From b495b33d0ae9c677ce1cf94de9f70953cb624bbb Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Wed, 20 Jul 2005 08:07:47 +0000 Subject: [PATCH] commit for Lars: 1) ajax proposal: proof of concept using xajax in felamimail to work without page reloads 2) also implemented IMAP ACL for cyrus and php5 (still needs some work) --- phpgwapi/inc/class.common.inc.php | 8 + phpgwapi/inc/xajax.inc.php | 1088 ++++++++++ .../js/dhtmlxtree/License_Commercial.html | 52 + .../js/dhtmlxtree/License_Enterprise.html | 51 + phpgwapi/js/dhtmlxtree/License_GPL.txt | 72 + phpgwapi/js/dhtmlxtree/css/dhtmlXTree.css | 11 + phpgwapi/js/dhtmlxtree/doc/alpha.html | 124 ++ phpgwapi/js/dhtmlxtree/doc/guide.html | 346 +++ phpgwapi/js/dhtmlxtree/doc/index.html | 55 + phpgwapi/js/dhtmlxtree/doc/ogroup.html | 124 ++ phpgwapi/js/dhtmlxtree/doc/tgroup.html | 55 + phpgwapi/js/dhtmlxtree/index.html | 191 ++ phpgwapi/js/dhtmlxtree/js/dhtmlXCommon.js | 201 ++ phpgwapi/js/dhtmlxtree/js/dhtmlXTree.js | 1323 ++++++++++++ phpgwapi/js/dhtmlxtree/pro_features.html | 30 + phpgwapi/js/dhtmlxtree/readme.txt | 24 + phpgwapi/js/dhtmlxtree/samples/dhtmlXTree.cfm | 82 + phpgwapi/js/dhtmlxtree/samples/example.cfm | 122 ++ phpgwapi/js/dhtmlxtree/samples/tree3.xml | 64 + phpgwapi/js/dhtmlxtree/samples/tree4.xml | 61 + phpgwapi/js/dhtmlxtree/samples/tree5.xml | 64 + phpgwapi/js/dhtmlxtree/samples/tree6.xml | 8 + phpgwapi/js/dhtmlxtree/samples/treeEx11.html | 57 + phpgwapi/js/dhtmlxtree/samples/treeEx12.html | 95 + phpgwapi/js/dhtmlxtree/samples/treeEx13.html | 82 + phpgwapi/js/dhtmlxtree/samples/treeEx21.html | 80 + phpgwapi/js/dhtmlxtree/samples/treeEx22.html | 100 + phpgwapi/js/dhtmlxtree/samples/treeEx23.html | 95 + phpgwapi/js/dhtmlxtree/samples/treeEx24.html | 109 + phpgwapi/js/dhtmlxtree/samples/treeEx31.html | 66 + phpgwapi/js/dhtmlxtree/samples/treeEx32.html | 72 + phpgwapi/js/dhtmlxtree/samples/xml.asp | 14 + phpgwapi/js/dhtmlxtree/samples/xml.php | 10 + phpgwapi/js/dhtmlxtree/src/dhtmlXCommon.js | 250 +++ phpgwapi/js/dhtmlxtree/src/dhtmlXTree.js | 1878 +++++++++++++++++ phpgwapi/js/dhtmlxtree/tree.xml | 40 + phpgwapi/js/dhtmlxtree/tree2.xml | 31 + .../default/images/dhtmlxtree/blank.gif | Bin 0 -> 56 bytes .../default/images/dhtmlxtree/book.gif | Bin 0 -> 184 bytes .../default/images/dhtmlxtree/book_titel.gif | Bin 0 -> 155 bytes .../default/images/dhtmlxtree/books_close.gif | Bin 0 -> 189 bytes .../default/images/dhtmlxtree/books_open.gif | Bin 0 -> 187 bytes .../default/images/dhtmlxtree/btn_up1.gif | Bin 0 -> 228 bytes .../default/images/dhtmlxtree/btn_up2.gif | Bin 0 -> 228 bytes .../default/images/dhtmlxtree/close2.gif | Bin 0 -> 1042 bytes .../images/dhtmlxtree/folderClosed.gif | Bin 0 -> 135 bytes .../default/images/dhtmlxtree/folderOpen.gif | Bin 0 -> 139 bytes .../images/dhtmlxtree/iconCheckAll.gif | Bin 0 -> 123 bytes .../images/dhtmlxtree/iconCheckGray.gif | Bin 0 -> 126 bytes .../default/images/dhtmlxtree/iconClient.gif | Bin 0 -> 123 bytes .../images/dhtmlxtree/iconDeleteSelected.gif | Bin 0 -> 947 bytes .../default/images/dhtmlxtree/iconJob.gif | Bin 0 -> 126 bytes .../default/images/dhtmlxtree/iconReport.gif | Bin 0 -> 125 bytes .../default/images/dhtmlxtree/iconTask.gif | Bin 0 -> 127 bytes .../images/dhtmlxtree/iconTimeRecordsEdit.gif | Bin 0 -> 140 bytes .../images/dhtmlxtree/iconUnCheckAll.gif | Bin 0 -> 111 bytes .../default/images/dhtmlxtree/item.gif | Bin 0 -> 1053 bytes .../default/images/dhtmlxtree/item2.gif | Bin 0 -> 1049 bytes .../default/images/dhtmlxtree/leaf.gif | Bin 0 -> 123 bytes .../default/images/dhtmlxtree/line1.gif | Bin 0 -> 71 bytes .../default/images/dhtmlxtree/line2.gif | Bin 0 -> 70 bytes .../default/images/dhtmlxtree/line3.gif | Bin 0 -> 73 bytes .../default/images/dhtmlxtree/line4.gif | Bin 0 -> 69 bytes .../images/dhtmlxtree/magazines_close.gif | Bin 0 -> 195 bytes .../images/dhtmlxtree/magazines_open.gif | Bin 0 -> 190 bytes .../default/images/dhtmlxtree/minus.gif | Bin 0 -> 85 bytes .../default/images/dhtmlxtree/minus2.gif | Bin 0 -> 92 bytes .../default/images/dhtmlxtree/minus3.gif | Bin 0 -> 93 bytes .../default/images/dhtmlxtree/minus4.gif | Bin 0 -> 90 bytes .../default/images/dhtmlxtree/minus5.gif | Bin 0 -> 87 bytes .../default/images/dhtmlxtree/minus_ar.gif | Bin 0 -> 68 bytes .../default/images/dhtmlxtree/open2.gif | Bin 0 -> 1045 bytes .../default/images/dhtmlxtree/plus.gif | Bin 0 -> 89 bytes .../default/images/dhtmlxtree/plus2.gif | Bin 0 -> 95 bytes .../default/images/dhtmlxtree/plus3.gif | Bin 0 -> 96 bytes .../default/images/dhtmlxtree/plus4.gif | Bin 0 -> 94 bytes .../default/images/dhtmlxtree/plus5.gif | Bin 0 -> 92 bytes .../default/images/dhtmlxtree/plus_ar.gif | Bin 0 -> 70 bytes .../default/images/dhtmlxtree/tombs.gif | Bin 0 -> 169 bytes .../default/images/dhtmlxtree/tombs_mag.gif | Bin 0 -> 172 bytes xajax.php | 62 + 81 files changed, 7197 insertions(+) create mode 100644 phpgwapi/inc/xajax.inc.php create mode 100644 phpgwapi/js/dhtmlxtree/License_Commercial.html create mode 100644 phpgwapi/js/dhtmlxtree/License_Enterprise.html create mode 100644 phpgwapi/js/dhtmlxtree/License_GPL.txt create mode 100644 phpgwapi/js/dhtmlxtree/css/dhtmlXTree.css create mode 100644 phpgwapi/js/dhtmlxtree/doc/alpha.html create mode 100644 phpgwapi/js/dhtmlxtree/doc/guide.html create mode 100644 phpgwapi/js/dhtmlxtree/doc/index.html create mode 100644 phpgwapi/js/dhtmlxtree/doc/ogroup.html create mode 100644 phpgwapi/js/dhtmlxtree/doc/tgroup.html create mode 100644 phpgwapi/js/dhtmlxtree/index.html create mode 100644 phpgwapi/js/dhtmlxtree/js/dhtmlXCommon.js create mode 100644 phpgwapi/js/dhtmlxtree/js/dhtmlXTree.js create mode 100644 phpgwapi/js/dhtmlxtree/pro_features.html create mode 100644 phpgwapi/js/dhtmlxtree/readme.txt create mode 100644 phpgwapi/js/dhtmlxtree/samples/dhtmlXTree.cfm create mode 100644 phpgwapi/js/dhtmlxtree/samples/example.cfm create mode 100644 phpgwapi/js/dhtmlxtree/samples/tree3.xml create mode 100644 phpgwapi/js/dhtmlxtree/samples/tree4.xml create mode 100644 phpgwapi/js/dhtmlxtree/samples/tree5.xml create mode 100644 phpgwapi/js/dhtmlxtree/samples/tree6.xml create mode 100644 phpgwapi/js/dhtmlxtree/samples/treeEx11.html create mode 100644 phpgwapi/js/dhtmlxtree/samples/treeEx12.html create mode 100644 phpgwapi/js/dhtmlxtree/samples/treeEx13.html create mode 100644 phpgwapi/js/dhtmlxtree/samples/treeEx21.html create mode 100644 phpgwapi/js/dhtmlxtree/samples/treeEx22.html create mode 100644 phpgwapi/js/dhtmlxtree/samples/treeEx23.html create mode 100644 phpgwapi/js/dhtmlxtree/samples/treeEx24.html create mode 100644 phpgwapi/js/dhtmlxtree/samples/treeEx31.html create mode 100644 phpgwapi/js/dhtmlxtree/samples/treeEx32.html create mode 100644 phpgwapi/js/dhtmlxtree/samples/xml.asp create mode 100644 phpgwapi/js/dhtmlxtree/samples/xml.php create mode 100644 phpgwapi/js/dhtmlxtree/src/dhtmlXCommon.js create mode 100644 phpgwapi/js/dhtmlxtree/src/dhtmlXTree.js create mode 100644 phpgwapi/js/dhtmlxtree/tree.xml create mode 100644 phpgwapi/js/dhtmlxtree/tree2.xml create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/blank.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/book.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/book_titel.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/books_close.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/books_open.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/btn_up1.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/btn_up2.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/close2.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/folderClosed.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/folderOpen.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/iconCheckAll.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/iconCheckGray.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/iconClient.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/iconDeleteSelected.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/iconJob.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/iconReport.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/iconTask.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/iconTimeRecordsEdit.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/iconUnCheckAll.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/item.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/item2.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/leaf.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/line1.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/line2.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/line3.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/line4.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/magazines_close.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/magazines_open.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/minus.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/minus2.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/minus3.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/minus4.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/minus5.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/minus_ar.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/open2.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/plus.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/plus2.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/plus3.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/plus4.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/plus5.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/plus_ar.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/tombs.gif create mode 100644 phpgwapi/templates/default/images/dhtmlxtree/tombs_mag.gif create mode 100644 xajax.php diff --git a/phpgwapi/inc/class.common.inc.php b/phpgwapi/inc/class.common.inc.php index e044fe2760..5a8e6c06cc 100644 --- a/phpgwapi/inc/class.common.inc.php +++ b/phpgwapi/inc/class.common.inc.php @@ -1338,6 +1338,14 @@ } } + if ($GLOBALS['egw_info']['flags']['include_xajax']) + { + require_once(EGW_SERVER_ROOT.'/phpgwapi/inc/xajax.inc.php'); + $xajax = new xajax($GLOBALS['egw']->link('/xajax.php')); + $xajax->registerFunction("doXMLHTTP"); + } + $java_script .= $xajax->getJavascript(); + /* this flag is for all javascript code that has to be put before other jscode. Think of conf vars etc... (pim@lingewoud.nl) */ if (isset($GLOBALS['egw_info']['flags']['java_script_thirst'])) diff --git a/phpgwapi/inc/xajax.inc.php b/phpgwapi/inc/xajax.inc.php new file mode 100644 index 0000000000..3a7a53f363 --- /dev/null +++ b/phpgwapi/inc/xajax.inc.php @@ -0,0 +1,1088 @@ +xml = ""; + $this->xml .= ""; + } + + // addAssign() adds an assign command message to your xml response + // $sTarget is a string containing the id of an HTML element + // $sAttribute is the part of the element you wish to modify ("innerHTML", "value", etc.) + // $sData is the data you want to set the attribute to + // usage: $objResponse->addAssign("contentDiv","innerHTML","Some Text"); + function addAssign($sTarget,$sAttribute,$sData) + { + $this->xml .= ""; + $this->xml .= "$sTarget"; + $this->xml .= ""; + $this->xml .= ""; + } + + // addAppend() adds an append command message to your xml response + // $sTarget is a string containing the id of an HTML element + // $sAttribute is the part of the element you wish to modify ("innerHTML", "value", etc.) + // $sData is the data you want to append to the end of the attribute + // usage: $objResponse->addAppend("contentDiv","innerHTML","Some Text"); + function addAppend($sTarget,$sAttribute,$sData) + { + $this->xml .= ""; + $this->xml .= "$sTarget"; + $this->xml .= ""; + $this->xml .= ""; + } + + // addPrepend() adds an prepend command message to your xml response + // $sTarget is a string containing the id of an HTML element + // $sAttribute is the part of the element you wish to modify ("innerHTML", "value", etc.) + // $sData is the data you want to prepend to the beginning of the attribute + // usage: $objResponse->addPrepend("contentDiv","innerHTML","Some Text"); + function addPrepend($sTarget,$sAttribute,$sData) + { + $this->xml .= ""; + $this->xml .= "$sTarget"; + $this->xml .= ""; + $this->xml .= ""; + } + + // addReplace() adds an replace command message to your xml response + // $sTarget is a string containing the id of an HTML element + // $sAttribute is the part of the element you wish to modify ("innerHTML", "value", etc.) + // $sSearch is a string to search for + // $sData is a string to replace the search string when found in the attribute + // usage: $objResponse->addReplace("contentDiv","innerHTML","text","text"); + function addReplace($sTarget,$sAttribute,$sSearch,$sData) + { + $this->xml .= ""; + $this->xml .= "$sTarget"; + $this->xml .= ""; + $this->xml .= ""; + $this->xml .= ""; + } + + // addClear() adds an clear command message to your xml response + // $sTarget is a string containing the id of an HTML element + // $sAttribute is the part of the element you wish to clear ("innerHTML", "value", etc.) + // usage: $objResponse->addClear("contentDiv","innerHTML"); + function addClear($sTarget,$sAttribute) + { + $this->xml .= ""; + $this->xml .= "$sTarget"; + $this->xml .= ""; + } + + // addAlert() adds an alert command message to your xml response + // $sMsg is a text to be displayed in the alert box + // usage: $objResponse->addAlert("This is some text"); + function addAlert($sMsg) + { + $this->xml .= ""; + } + + // addScript() adds a jscript command message to your xml response + // $sJS is a string containing javascript code to be executed + // usage: $objResponse->addAlert("var x = prompt('get some text');"); + function addScript($sJS) + { + $this->xml .= ""; + } + + // addRemove() adds a Remove Element command message to your xml response + // $sTarget is a string containing the id of an HTML element to be removed + // from your page + // usage: $objResponse->addRemove("Div2"); + function addRemove($sTarget) + { + $this->xml .= ""; + $this->xml .= "$sTarget"; + $this->xml .= ""; + } + + function addCreate($sParent, $sTag, $sId, $sType="") + { + $this->xml .= ""; + $this->xml .= "$sParent"; + $this->xml .= ""; + if ($sType != "") + $this->xml .= ""; + $this->xml .= ""; + } + + // getXML() returns the xml to be returned from your function to the xajax + // processor on your page + // usage: $objResponse->getXML(); + function getXML() + { + if (strstr($this->xml,"") == false) + $this->xml .= ""; + + return $this->xml; + } +}// end class xajaxResponse + +// Communication Method Defines +if (!defined ('GET')) +{ + define ('GET', 0); +} +if (!defined ('POST')) +{ + define ('POST', 1); +} + +// the xajax class generates the xajax javascript for your page including the +// javascript wrappers for the PHP functions that you want to call from your page. +// It also handles processing and executing the command messages in the xml responses +// sent back to your page from your PHP functions. +class xajax +{ + var $aFunctions; // Array of PHP functions that will be callable through javascript wrappers + var $aFunctionRequestTypes; // Array of RequestTypes to be used with each function (key=function name) + var $sRequestURI; // The URI for making requests to the xajax object + var $bDebug; // Show debug messages true/false + var $sWrapperPrefix; // The prefix to prepend to the javascript wraper function name + var $bStatusMessages; // Show debug messages true/false + var $aObjArray; // Array for parsing complex objects + var $iPos; // Position in $aObjArray + + // Contructor + // $sRequestURI - defaults to the current page + // $bDebug Mode - defaults to false + // $sWrapperPrefix - defaults to "xajax_"; + // usage: $xajax = new xajax(); + function xajax($sRequestURI="",$sWrapperPrefix="xajax_",$bDebug=false) + { + $this->aFunctions = array(); + $this->sRequestURI = $sRequestURI; + if ($this->sRequestURI == "") + $this->sRequestURI = $this->detectURI(); + $this->sWrapperPrefix = $sWrapperPrefix; + $this->bDebug = $bDebug; + } + + // detectURL() returns the current URL based upon the SERVER vars + // used internally + function detectURI() + { + $aUri = array(); + + if (!empty($_SERVER['REQUEST_URI'])) + { + $aUri = parse_url($_SERVER['REQUEST_URI']); + } + + if (empty($aUri['scheme'])) + { + if (!empty($_SERVER['HTTP_SCHEME'])) + { + $aUri['scheme'] = $_SERVER['HTTP_SCHEME']; + } + else + { + $aUri['scheme'] = (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off') ? 'https' : 'http'; + } + + if (!empty($_SERVER['HTTP_HOST'])) + { + if (strpos($_SERVER['HTTP_HOST'], ':') > 0) + { + list($aUri['host'], $aUri['port']) = explode(':', $_SERVER['HTTP_HOST']); + } + else + { + $aUri['host'] = $_SERVER['HTTP_HOST']; + } + } + else if (!empty($_SERVER['SERVER_NAME'])) + { + $aUri['host'] = $_SERVER['SERVER_NAME']; + } + else + { + print "xajax Error: xajax failed to automatically identify your Request URI."; + print "Please set the Request URI explicitly when you instantiate the xajax object."; + exit(); + } + + if (empty($aUri['port']) && !empty($_SERVER['SERVER_PORT'])) + { + $aUri['port'] = $_SERVER['SERVER_PORT']; + } + + if (empty($aUri['path'])) + { + if (!empty($_SERVER['PATH_INFO'])) + { + $path = parse_url($_SERVER['PATH_INFO']); + } + else + { + $path = parse_url($_SERVER['PHP_SELF']); + } + $aUri['path'] = $path['path']; + unset($path); + } + } + + $sUri = $aUri['scheme'] . '://'; + if (!empty($aUri['user'])) + { + $sUri .= $aUri['user']; + if (!empty($aUri['pass'])) + { + $sUri .= ':' . $aUri['pass']; + } + $sUri .= '@'; + } + + $sUri .= $aUri['host']; + + if (!empty($aUri['port']) && (($aUri['scheme'] == 'http' && $aUri['port'] != 80) || ($aUri['scheme'] == 'https' && $aUri['port'] != 443))) + { + $sUri .= ':'.$aUri['port']; + } + // And finally path, without script name + $sUri .= substr($aUri['path'], 0, strrpos($aUri['path'], '/') + 1); + + unset($aUri); + + return $sUri.basename($_SERVER['SCRIPT_NAME']); + } + + // setRequestURI() sets the URI to which requests will be made + // usage: $xajax->setRequestURI("http://xajax.sourceforge.net"); + function setRequestURI($sRequestURI) + { + $this->sRequestURI = $sRequestURI; + } + + // debugOn() enables debug messages for xajax + // usage: $xajax->debugOn(); + function debugOn() + { + $this->bDebug = true; + } + + // debugOff() disables debug messages for xajax + // usage: $xajax->debugOff(); + function debugOff() + { + $this->bDebug = false; + } + + // statusMessagesOn() enables messages in the statusbar for xajax + // usage: $xajax->statusMessagesOn(); + function statusMessagesOn() + { + $this->bStatusMessages = true; + } + + // statusMessagesOff() disables messages in the statusbar for xajax + // usage: $xajax->statusMessagesOff(); + function statusMessagesOff() + { + $this->bStatusMessages = false; + } + + // setWrapperPrefix() sets the prefix that will be appended to the javascript + // wraper functions. + function setWrapperPrefix($sPrefix) + { + $this->sWrapperPrefix = $sPrefix; + } + + //Dpericated. Use registerFunction(); + function addFunction($sFunction,$sRequestType=POST) + { + trigger_error("xajax: the addFunction() method has been renamed registerFunction().
Please use ->registerFunction('$sFunction'".($sRequestType==GET?",GET":"")."); instead.",E_USER_WARNING); + $this->registerFunction($sFunction,$sRequestType); + } + + // registerFunction() registers a PHP function to be callable through xajax + // $sFunction is a string containing the function name + // $sRequestType is the RequestType (GET/POST) that should be used + // for this function. Defaults to POST. + // usage: $xajax->registerFunction("myfunction",POST); + function registerFunction($sFunction,$sRequestType=POST) + { + $this->aFunctions[] = $sFunction; + $this->aFunctionRequestTypes[$sFunction] = $sRequestType; + } + + // generates the javascript wrapper for the specified PHP function + // used internally + function wrap($sFunction,$sRequestType=POST) + { + $js = "function ".$this->sWrapperPrefix."$sFunction(){xajax.call(\"$sFunction\", arguments, ".$sRequestType.");}\n"; + return $js; + } + + // processRequests() is the main communications engine of xajax + // The engine handles all incoming xajax requests, calls the apporiate PHP functions + // and passes the xml responses back to the javascript response handler + // if your RequestURI is the same as your web page then this function should + // be called before any headers or html has been sent. + // usage: $xajax->processRequests() + function processRequests() + { + if (!empty($_GET['xajaxjs'])) + { + header("Content-type: text/javascript"); + print $this->generateJavascript(); + exit(); + return; + } + + $requestMode = -1; + $sFunctionName = ""; + $aArgs = array(); + $sResponse = ""; + + if (!empty($_GET["xajax"])) + $requestMode = GET; + + if (!empty($_POST["xajax"])) + $requestMode = POST; + + if ($requestMode == -1) + return; + + if ($requestMode == POST) + { + $sFunctionName = $_POST["xajax"]; + + if (!empty($_POST["xajaxargs"])) + $aArgs = $_POST["xajaxargs"]; + } + else + { + header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); + header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); + header ("Cache-Control: no-cache, must-revalidate"); + header ("Pragma: no-cache"); + header("Content-type: text/xml"); + + $sFunctionName = $_GET["xajax"]; + + if (!empty($_GET["xajaxargs"])) + $aArgs = $_GET["xajaxargs"]; + } + + if (!in_array($sFunctionName, $this->aFunctions)) + { + $objResponse = new xajaxResponse(); + $objResponse->addAlert("Unknown Function $sFunctionName."); + $sResponse = $objResponse->getXML(); + } + else if ($this->aFunctionRequestTypes[$sFunctionName] != $requestMode) + { + $objResponse = new xajaxResponse(); + $objResponse->addAlert("Incorrect Request Type."); + $sResponse = $objResponse->getXML(); + } + else + { + for ($i = 0; $i < sizeof($aArgs); $i++) + { + if (stristr($aArgs[$i],"") != false) + { + $aArgs[$i] = $this->xmlToArray("xjxobj",$aArgs[$i]); + } + else if (stristr($aArgs[$i],"") != false) + { + $aArgs[$i] = $this->xmlToArray("xjxquery",$aArgs[$i]); + } + } + $sResponse = call_user_func_array($sFunctionName, $aArgs); + } + + header("Content-type: text/xml; charset=utf-8"); + print $sResponse; + + exit(); + } + + // xmlToArray() takes a string containing xajax xjxobj xml or xjxquery xml + // and builds an array representation of it to pass as an argument to + // the php function being called. Returns an array. + // used internally + function xmlToArray($rootTag, $sXml) + { + $aArray = array(); + $sXml = str_replace("<$rootTag>","<$rootTag>|~|",$sXml); + $sXml = str_replace("","|~|",$sXml); + $sXml = str_replace("","|~|",$sXml); + $sXml = str_replace("","|~|",$sXml); + $sXml = str_replace("","|~|",$sXml); + $sXml = str_replace("","|~||~|",$sXml); + $sXml = str_replace("","|~|",$sXml); + $sXml = str_replace("","|~||~|",$sXml); + $sXml = str_replace("","|~|",$sXml); + $sXml = str_replace("","|~||~|",$sXml); + + $this->aObjArray = explode("|~|",$sXml); + + $this->iPos = 0; + $aArray = $this->parseObjXml($rootTag); + + return $aArray; + } + + // parseObjXml() is a recursive function that generates an array from the + // contents of $this->aObjArray. Returns an array. + // used internally + function parseObjXml($rootTag) + { + $aArray = array(); + + if ($rootTag == "xjxobj") + { + while(!stristr($this->aObjArray[$this->iPos],"")) + { + $this->iPos++; + if(stristr($this->aObjArray[$this->iPos],"")) + { + $key = ""; + $value = null; + + $this->iPos++; + while(!stristr($this->aObjArray[$this->iPos],"")) + { + if(stristr($this->aObjArray[$this->iPos],"")) + { + $this->iPos++; + while(!stristr($this->aObjArray[$this->iPos],"")) + { + $key .= $this->aObjArray[$this->iPos]; + $this->iPos++; + } + } + if(stristr($this->aObjArray[$this->iPos],"")) + { + $this->iPos++; + while(!stristr($this->aObjArray[$this->iPos],"")) + { + if(stristr($this->aObjArray[$this->iPos],"")) + { + $value = $this->parseObjXml("xjxobj"); + $this->iPos++; + } + else + { + $value .= $this->aObjArray[$this->iPos]; + } + $this->iPos++; + } + } + $this->iPos++; + } + $aArray[$key]=$value; + } + } + } + + if ($rootTag == "xjxquery") + { + $sQuery = ""; + $this->iPos++; + while(!stristr($this->aObjArray[$this->iPos],"")) + { + if (stristr($this->aObjArray[$this->iPos],"") || stristr($this->aObjArray[$this->iPos],"")) + { + $this->iPos++; + continue; + } + $sQuery .= $this->aObjArray[$this->iPos]; + $this->iPos++; + } + parse_str($sQuery, $aArray); + } + + return $aArray; + } + + // Depricated. Use printJavascript(); + function javascript($sJsURI="") + { + trigger_error("xajax: the javascript() method has been renamed printJavascript().
Please use ->printJavascript(".($sJsURI==""?"":"'$sJsURI'")."); instead.",E_USER_WARNING); + $this->printJavascript($sJsURI); + } + + // printJavascript() prints the xajax javascript code into your page + // it should only be called between the tags + // usage: + // + // ... + // printJavascript(); + function printJavascript($sJsURI="") + { + print $this->getJavascript($sJsURI); + } + + // getJavascript() returns the xajax javascript code that should be added to + // your page between the tags + // usage: + // + // ... + // getJavascript(); + function getJavascript($sJsURI="") + { + if ($sJsURI == "") + $sJsURI = $this->sRequestURI; + + $separator=strpos($sJsURI,'?')==false?'?':'&'; + + $html = "\n"; + $html .= "\t\n"; + + return $html; + } + + // compressJavascript() compresses the javascript code for more efficient delivery + // used internally + // $sJS is a string containing the javascript code to compress + function compressJavascript($sJS) + { + //remove windows cariage returns + $sJS = str_replace("\r","",$sJS); + + //array to store replaced literal strings + $literal_strings = array(); + + //explode the string into lines + $lines = explode("\n",$sJS); + //loop through all the lines, building a new string at the same time as removing literal strings + $clean = ""; + $inComment = false; + $literal = ""; + $inQuote = false; + $escaped = false; + $quoteChar = ""; + + for($i=0;$ibDebug){ $js .= "var xajaxDebug=".($this->bDebug?"true":"false").";\n"; } + + ob_start(); + ?> + function Xajax() + { + bDebug){ ?>this.DebugMessage = function(text){if (xajaxDebug) alert("Xajax Debug:\n " + text)} + + this.workId = 'xajaxWork'+ new Date().getTime(); + this.depth = 0; + + //Get the XMLHttpRequest Object + this.getRequestObject = function() + { + bDebug){ ?>this.DebugMessage("Initializing Request Object.."); + var req; + try + { + req=new ActiveXObject("Msxml2.XMLHTTP"); + } + catch (e) + { + try + { + req=new ActiveXObject("Microsoft.XMLHTTP"); + } + catch (e2) + { + req=null; + } + } + if(!req && typeof XMLHttpRequest != "undefined") + req = new XMLHttpRequest(); + + bDebug){ ?>if (!req) this.DebugMessage("Request Object Instantiation failed."); + + return req; + } + + // xajax.$() is shorthand for document.getElementById() + this.$ = function(sId) + { + return document.getElementById(sId); + } + + // xajax.getFormValues() builds a query string XML message from the elements of a form object + this.getFormValues = function(frm) + { + var objForm; + if (typeof(frm) == "string") + objForm = this.$(frm); + else + objForm = frm; + var sXml = ""; + if (objForm && objForm.tagName == 'FORM') + { + var formElements = objForm.elements; + for( var i=0; i < formElements.length; i++) + { + if ((formElements[i].type == 'radio' || formElements[i].type == 'checkbox') && formElements[i].checked == false) + continue; + var name = formElements[i].name; + if (name) + { + if (sXml != '') + sXml += '&'; + sXml += name+"="+encodeURIComponent(formElements[i].value); + } + } + } + + sXml +=""; + + return sXml; + } + + // Generates an XML message that xajax can understand from a javascript object + this.objectToXML = function(obj) + { + var sXml = ""; + for (i in obj) + { + try + { + if (i == 'constructor') + continue; + if (obj[i] && typeof(obj[i]) == 'function') + continue; + + var key = i; + var value = obj[i]; + if (value && typeof(value)=="object" && + (value.constructor == Array + ) && this.depth <= 50) + { + this.depth++; + value = this.objectToXML(value); + this.depth--; + } + + sXml += ""+key+""+value+""; + + } + catch(e) + { + bDebug){ ?>this.DebugMessage(e); + } + } + sXml += ""; + + return sXml; + } + + // Sends a XMLHttpRequest to call the specified PHP function on the server + this.call = function(sFunction, aArgs, sRequestType) + { + var i,r,postData; + if (document.body) + document.body.style.cursor = 'wait'; + bStatusMessages == true){?>window.status = 'Sending Request...'; + bDebug){ ?>this.DebugMessage("Starting xajax..."); + var xajaxRequestType = sRequestType; + var uri = xajaxRequestUri; + var value; + switch(xajaxRequestType) + { + case :{ + var uriGet = uri.indexOf("?")==-1?"?xajax="+encodeURIComponent(sFunction):"&xajax="+encodeURIComponent(sFunction); + for (i = 0; i:{ + postData = "xajax="+encodeURIComponent(sFunction); + postData += "&xajaxr="+new Date().getTime(); + for (i = 0; i ?"GET":"POST", uri, true); + if (xajaxRequestType == ) + { + try + { + r.setRequestHeader("Method", "POST " + uri + " HTTP/1.1"); + r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + } + catch(e) + { + alert("Your browser does not appear to support asynchronous requests using POST."); + return false; + } + } + r.onreadystatechange = function() + { + if (r.readyState != 4) + return; + + if (r.status==200) + { + bDebug){ ?>xajax.DebugMessage("Received:\n" + r.responseText); + var data = r.responseXML; + if (data) + xajax.processResponse(data); + } + } + bDebug){ ?>this.DebugMessage("Calling "+sFunction +" uri="+uri+" (post:"+ postData +")"); + r.send(postData); + bStatusMessages == true){?>window.status = 'Waiting for data...'; + bDebug){ ?>this.DebugMessage(sFunction + " waiting.."); + delete r; + return true; + } + + // Tests if the new Data is the same as the extant data + this.willChange = function(element, attribute, newData) + { + var oldData; + if (attribute == "innerHTML") + { + tmpXajax = this.$(this.workId); + if (tmpXajax == null) + { + tmpXajax = document.createElement("div"); + tmpXajax.setAttribute('id',this.workId); + tmpXajax.style.display = "none"; + tmpXajax.style.visibility = "hidden"; + document.body.appendChild(tmpXajax); + } + tmpXajax.innerHTML = newData; + newData = tmpXajax.innerHTML; + } + eval("oldData=document.getElementById('"+element+"')."+attribute); + if (newData != oldData) + return true; + + return false; + } + + //Process XML xajaxResponses returned from the request + this.processResponse = function(xml) + { + bStatusMessages == true){?> window.status = 'Recieving data...'; + var tmpXajax = null; + xml = xml.documentElement; + for (i=0; i -1) + { + x = v.indexOf(search)+search.length+1; + v2 += v.substr(0,x).replace(search,data); + v = v.substr(x,v.length-x); + } + if (this.willChange(element,attribute,v2)) + eval('document.getElementById("'+element+'").'+attribute+'=v2;'); + } + if (action=="clear") + eval("document.getElementById('"+element+"')."+attribute+"='';"); + if (action=="remove") + { + objElement = this.$(element); + if (objElement.parentNode && objElement.parentNode.removeChild) + { + objElement.parentNode.removeChild(objElement); + } + } + if (action=="create") + { + var objParent = this.$(element); + objElement = document.createElement(attribute); + objElement.setAttribute('id',data); + if (type && type != '') + objElement.setAttribute('type',type); + objParent.appendChild(objElement); + if (objParent.tagName == "FORM") + { + + } + } + } + } + document.body.style.cursor = 'default'; + bStatusMessages == true){?> window.status = 'Done'; + } + } + + var xajax = new Xajax(); + aFunctions as $sFunction) + $js .= $this->wrap($sFunction,$this->aFunctionRequestTypes[$sFunction]); + + if ($this->bDebug == false) + $js = $this->compressJavascript($js); + + print $js; + } +}// end class xajax +?> diff --git a/phpgwapi/js/dhtmlxtree/License_Commercial.html b/phpgwapi/js/dhtmlxtree/License_Commercial.html new file mode 100644 index 0000000000..7c95316741 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/License_Commercial.html @@ -0,0 +1,52 @@ + + + + + dhtmlxTree Commercial License + + + +

dhtmlxTree Commercial License

+ +

1. LIMITED LICENSE GRANT.

+ +

Scand LLC grants to you ("Licensee") a nonexclusive, nontransferable, worldwide, royalty-free license to use this version of dhtmlxTree (the "Software").

+ +

The Licensee has the right to use the software only in ONE commercial project (for one License). It is possible to use the software on any Website unlimited number of times but within the ONE commercial project (application). "Website" and "site" means the technology, and is not limited by internet sites, it also includes intranet and extranet websites. When referred to a site, a site means a location where all the web pages share a single fully qualified domain name.

+ +

The Licensee has the right to apply for free-of-charge support (consultations) on the product within 3 months since purchasing the product and also free-of-charge elimination of any found bugs during the same period.

+ +

Modifications to the software are allowed, as long as they do not conflict with the license, but distribution of the modified software is forbidden. A non-exclusive royalty-free right is granted to the initial developer of the Software to use, modify and distribute your modification in future versions of the Software.

+ + +

a) specific restrictions

+

The licensee is not permitted to distribute the components in any fashion which would promote, encourage or allow reuse or redistribution of the JavaScript component.

+

b) general restrictions

+

Software may not be transferred, leased, assigned, or sublicensed, in whole or in part.

+

IF THESE RESTRICTIONS ARE NOT ALLOWED BY YOUR RESPECTIVE LAW THEN CONTACT SCAND LLC TO CHECK IF THE RESTRICTIONS CAN BE RELAXED IN YOUR CASE. THE RELAXATION CAN ONLY BE GIVEN BY WRITTEN CONSENT.

+

c) disclaimer of warranty

+

The Software is provided "AS IS," without a warranty of any kind.

+

ALL EXPRESS OR IMPLIED REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.

+

IF THIS DISCLAIMER IS NOT ALLOWED BY YOUR RESPECTIVE LAW THEN CONTACT SCAND LLC TO CHECK IF THE DISCLAIMER CAN BE RELAXED IN YOUR CASE. THE RELAXATION CAN ONLY BE GIVEN BY WRITTEN CONSENT.

+

d) limitation of liability.

+

IN NO EVENT WILL SCAND LLC BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES HOWEVER CAUSED AND REGARDLESS OF THEORY OF LIABILITY ARISING OUT OF THE USE OF, INABILITY TO USE OR DOWNLOADING OF THE SOFTWARE, EVEN IF SCAND LLC HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

+

IF THIS LIMITATION IS NOT ALLOWED BY YOUR RESPECTIVE LAW THEN CONTACT SCAND LLC TO CHECK IF THE LIMITATION CAN BE RELAXED IN YOUR CASE. THE RELAXATION CAN ONLY BE GIVEN BY WRITTEN CONSENT.

+ +

2. COPYRIGHT

+ +

SCAND LLC and its licensors retain all ownership rights to the software and related documentation. Use of the software and related documentation is governed by the license agreement accompanying the software and applicable copyright law.

+

The documentation must always follow the related software. Making unauthorized copies, adaptations, or compilation works is prohibited. SCAND LLC may revise this documentation from time to time without notice.

+

THIS DOCUMENTATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN NO EVENT SHALL SCAND LLC BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF BUSINESS, LOSS OF USE OR DATA, INTERRUPTION OF BUSINESS, OR FOR INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY KIND, ARISING FROM ANY ERROR IN THIS DOCUMENTATION.

+

This means that the software and documentation come with no warranty, without any limitation. No liability of any kind can be accepted and this the fullest extent. If your law doesn't allow this, then do not use this software and documentation.

+ +

The Software and documentation are copyright © 1996-2005 Scand LLC. All rights reserved.

+ + + + diff --git a/phpgwapi/js/dhtmlxtree/License_Enterprise.html b/phpgwapi/js/dhtmlxtree/License_Enterprise.html new file mode 100644 index 0000000000..94ff2f57e7 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/License_Enterprise.html @@ -0,0 +1,51 @@ + + + + + dhtmlxTree Enterprise License + + + +

dhtmlxTree Enterprise License

+ +

1. LIMITED LICENSE GRANT.

+ +

Scand LLC grants to you ("Licensee") a nonexclusive, nontransferable, worldwide, royalty-free license to use this version of dhtmlxTree (the "Software"). +The Licensee has the right to use the Software in any number of projects, but only by the ONE company.

+ +

The Licensee has the right to apply for free-of-charge support (consultations) on the product within 2 years since purchasing the product and also free-of-charge elimination of any found bugs during the same period.

+ +

Modifications to the software are allowed, as long as they do not conflict with the license, but distribution of the modified software is forbidden. A non-exclusive royalty-free right is granted to the initial developer of the Software to use, modify and distribute your modification in future versions of the Software.

+ +

a) specific restrictions

+ +

The licensee is not permitted to distribute the components in any fashion which would promote, encourage or allow reuse or redistribution of the JavaScript component.

+

b) general restrictions

+

Software may not be transferred, leased, assigned, or sublicensed, in whole or in part.

+ +

IF THESE RESTRICTIONS ARE NOT ALLOWED BY YOUR RESPECTIVE LAW THEN CONTACT SCAND LLC TO CHECK IF THE RESTRICTIONS CAN BE RELAXED IN YOUR CASE. THE RELAXATION CAN ONLY BE GIVEN BY WRITTEN CONSENT.

+ +

c) disclaimer of warranty

+ +

The Software is provided "AS IS," without a warranty of any kind.

+

ALL EXPRESS OR IMPLIED REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.

+

IF THIS DISCLAIMER IS NOT ALLOWED BY YOUR RESPECTIVE LAW THEN CONTACT SCAND LLC TO CHECK IF THE DISCLAIMER CAN BE RELAXED IN YOUR CASE. THE RELAXATION CAN ONLY BE GIVEN BY WRITTEN CONSENT.

+

d) limitation of liability.

+

IN NO EVENT WILL SCAND LLC BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES HOWEVER CAUSED AND REGARDLESS OF THEORY OF LIABILITY ARISING OUT OF THE USE OF, INABILITY TO USE OR DOWNLOADING OF THE SOFTWARE, EVEN IF SCAND LLC HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

+

IF THIS LIMITATION IS NOT ALLOWED BY YOUR RESPECTIVE LAW THEN CONTACT SCAND LLC TO CHECK IF THE LIMITATION CAN BE RELAXED IN YOUR CASE. THE RELAXATION CAN ONLY BE GIVEN BY WRITTEN CONSENT.

+ +

2. COPYRIGHT

+

SCAND LLC and its licensors retain all ownership rights to the software and related documentation. Use of the software and related documentation is governed by the license agreement accompanying the software and applicable copyright law.

+

The documentation must always follow the related software. Making unauthorized copies, adaptations, or compilation works is prohibited. SCAND LLC may revise this documentation from time to time without notice.

+

THIS DOCUMENTATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN NO EVENT SHALL SCAND LLC BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF BUSINESS, LOSS OF USE OR DATA, INTERRUPTION OF BUSINESS, OR FOR INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY KIND, ARISING FROM ANY ERROR IN THIS DOCUMENTATION.

+

This means that the software and documentation come with no warranty, without any limitation. No liability of any kind can be accepted and this the fullest extent. If your law doesn't allow this, then do not use this software and documentation.

+

The Software and documentation are copyright © 1996-2005 Scand LLC. All rights reserved.

+ + + diff --git a/phpgwapi/js/dhtmlxtree/License_GPL.txt b/phpgwapi/js/dhtmlxtree/License_GPL.txt new file mode 100644 index 0000000000..947e61d70c --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/License_GPL.txt @@ -0,0 +1,72 @@ +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + + +a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. + +b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. + +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + +a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + +b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + diff --git a/phpgwapi/js/dhtmlxtree/css/dhtmlXTree.css b/phpgwapi/js/dhtmlxtree/css/dhtmlXTree.css new file mode 100644 index 0000000000..fda00de246 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/css/dhtmlXTree.css @@ -0,0 +1,11 @@ +.defaultTreeTable{ + margin : 0; + padding : 0; + border : 0; +} +.containerTableStyle { overflow : auto;} +.standartTreeRow{ font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 12px; -moz-user-select: none; } +.selectedTreeRow{ background-color : navy; color:white; font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 12px; -moz-user-select: none; } +.standartTreeImage{ width:18px; height:18px; overflow:hidden; border:0; padding:0; margin:0; } +.hiddenRow { width:1px; overflow:hidden; } +.dragSpanDiv{ font-size : 12px; border: thin solid 1 1 1 1; } diff --git a/phpgwapi/js/dhtmlxtree/doc/alpha.html b/phpgwapi/js/dhtmlxtree/doc/alpha.html new file mode 100644 index 0000000000..75698c68ab --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/doc/alpha.html @@ -0,0 +1,124 @@ +
changeItemId(itemId,newItemId)
change item id
Object: dhtmlXTreeObject
Topic(s): Node/level control; +
File required:dhtmlXTree.js
  • itemId - old node id
  • newItemId - new node id
  • clearCut()
    clear cut
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
    closeAllItems(itemId)
    collapse target node and all child nodes
    Object: dhtmlXTreeObject
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - node id
  • closeItem(itemId)
    collapse node
    Object: dhtmlXTreeObject
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • deleteChildItems(itemId)
    delete all child of node
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
  • itemId - node identificator
  • deleteItem(itemId,selectParent)
    delete node
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
  • itemId - node identificator
  • selectParent - If true parent of deleted item get selection, else no selected items leaving in tree.
  • doCut()
    mark selected item as cutted
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
    doPaste(itemId)
    insert previously cutted branch
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
  • itemId - id of new parent node
  • enableAutoSavingSelected(mode) + [Commercial] +
    enable/disable autosaving selected node in cookie
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
  • mode - true/false
  • enableCheckBoxes(mode)
    hide checkboxes
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • mode - enabled/disabled
  • enableContextMenu(menu) + [Commercial] +
    enable context menu
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • menu - menu object
  • enableDragAndDrop(mode)
    enable/disable drag-and-drop
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • mode - enabled/disabled
  • enableDragAndDropScrolling(mode) + [Commercial] +
    enable/disable auto scrolling while drag-and-drop
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • mode - enabled/disabled
  • enableMultiLineItems(width) + [Commercial] +
    enable multi line items
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • width - text width, if equls zero then use single lines items;
  • enableSmartXMLParsing(mode) + [Commercial] +
    enable/disable smart XML parsing mode
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • mode - 1 - on, 0 - off;
  • enableThreeStateCheckboxes(mode)
    enable three state checkboxes
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • mode - 1 - on, 0 - off;
  • enableTreeImages(mode)
    enable tree images
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • mode - 1 - on, 0 - off;
  • enableTreeLines(mode)
    enableTreeLines(mode);
    Object: dhtmlXTreeObject
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • mode - enable/disable tree lines
  • findItem(searchStr,direction,top)
    find tree item by text, select and focus it
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
  • searchStr - search text
  • direction - 0: top -> bottom; 1: bottom -> top
  • top - 1: start searching from top
  • findItemIdByLabel(searchStr,direction,top)
    find tree item by text
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
  • searchStr - search text
  • direction - 0: top -> bottom; 1: bottom -> top
  • top - 1: start searching from top
  • focusItem(itemId) + [Commercial] +
    focus item in tree
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • itemId - item Id
  • getAllChecked()
    return list of identificators of nodes with checked checkboxes
    Object: dhtmlXTreeObject
    Topic(s): Checkboxes/user data manipulation; +
    File required:dhtmlXTree.js
    getAllCheckedBranches()
    return list of identificators of nodes with checked checkboxes, and parent of that checkboxes
    Object: dhtmlXTreeObject
    Topic(s): Checkboxes/user data manipulation; +
    File required:dhtmlXTree.js
    getAllSubItems(itemId)
    Returns the list of all children items from all next levels of tree, separated by commas.
    Object: dhtmlXTreeObject
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • getChildItemIdByIndex(itemId,index)
    retun child node identificator by index
    Object: dhtmlXTreeObject
    Topic(s): Selection control; +
    File required:dhtmlXTree.js
  • itemId - parent node identificator
  • index - index of child node
  • getItemColor(itemId)
    get node color
    Object: dhtmlXTreeObject
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • getItemIdByIndex(itemId,index)
    retun node identificator by index
    Object: dhtmlXTreeObject
    Topic(s): Selection control; +
    File required:dhtmlXTree.js
  • itemId - node identificator
  • index - index of node
  • getItemText(itemId)
    return node text
    Object: dhtmlXTreeObject
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • getLevel(itemId)
    return node level
    Object: dhtmlXTreeObject
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • getParentId(itemId)
    return parent node identificator
    Object: dhtmlXTreeObject
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • getSelectedItemId()
    retun selected node identificator
    Object: dhtmlXTreeObject
    Topic(s): Selection control; +
    File required:dhtmlXTree.js
    getSelectedItemText()
    retun selected node text
    Object: dhtmlXTreeObject
    Topic(s): Selection control; +
    File required:dhtmlXTree.js
    getSubItems(itemId)
    Returns the list of all children items from the next level of tree, separated by commas.
    Object: dhtmlXTreeObject
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • getUserData(itemId,name)
    return user data from target node
    Object: dhtmlXTreeObject
    Topic(s): Checkboxes/user data manipulation; +
    File required:dhtmlXTree.js
  • itemId - target node identificator
  • name - key for user data
  • hasChildren(itemId)
    return count of childrens
    Object: dhtmlXTreeObject
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • insertNewItem(parentId,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,childs)
    create new child node
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
  • parentId - parent node id
  • itemId - new node id
  • itemText - new node text
  • itemActionHandler - function fired on node select event (optional)
  • image1 - image for node without childrens; (optional)
  • image2 - image for closed node; (optional)
  • image3 - image for opened node (optional)
  • optionStr - options string (optional)
  • childs - node childs flag (for dynamical trees) (optional)
  • insertNewNext(parentItemId,itemId,itemName,itemActionHandler,image1,image2,image3,optionStr,childs)
    create new node next to specified
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
  • parentItemId - node id
  • itemId - new node id
  • itemName - new node text
  • itemActionHandler - function fired on node select event (optional)
  • image1 - image for node without childrens; (optional)
  • image2 - image for closed node; (optional)
  • image3 - image for opened node (optional)
  • optionStr - options string (optional)
  • childs - node childs flag (for dynamical trees) (optional)
  • isItemChecked(itemId)
    return state of nodes's checkbox
    Object: dhtmlXTreeObject
    Topic(s): Checkboxes/user data manipulation; +
    File required:dhtmlXTree.js
  • itemId - target node identificator
  • loadOpenStates(name) + [Commercial] +
    restore open nodes from cookie
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
  • name - optional,cookie name
  • loadState(name) + [Commercial] +
    load tree from cookie
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
  • name - optional,cookie name
  • loadXML(file)
    load tree from xml file
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • file - link too XML file
  • loadXMLString(xmlString)
    load tree from xml string
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • xmlString - XML string
  • openAllItems(itemId)
    expand target node and all child nodes
    Object: dhtmlXTreeObject
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - node id
  • openItem(itemId)
    expand node
    Object: dhtmlXTreeObject
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • refreshItem(itemId)
    refresh tree branch from xml
    Object: dhtmlXTreeObject
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node, if not defined tree super root used.
  • restoreSelectedItem(name) + [Commercial] +
    restore selected item from cookie
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
  • name - optional, cookie name
  • saveOpenStates(name) + [Commercial] +
    save open nodes to cookie
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
  • name - optional,cookie name
  • saveSelectedItem(name) + [Commercial] +
    save selected item to cookie
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
  • name - optional, cookie name
  • saveState(name) + [Commercial] +
    save tree to cookie
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
  • name - optional, cookie name
  • selectItem(itemId,mode)
    select node ( and optionaly fire onselect event)
    Object: dhtmlXTreeObject
    Topic(s): Selection control; +
    File required:dhtmlXTree.js
  • itemId - node identificator
  • mode - If true, script function for selected node will be called.
  • serializeTree() + [Commercial] +
    return xml description of tree
    Object: dhtmlXTreeObject
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
    setCheck(itemId,state)
    change state of node's checkbox
    Object: dhtmlXTreeObject
    Topic(s): Checkboxes/user data manipulation; +
    File required:dhtmlXTree.js
  • itemId - target node identificator
  • state - checkbox state
  • setDragBehavior(mode) + [Commercial] +
    set Drag-And-Drop behavior
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • mode - behavior name (child or sibling)
  • setDragHandler(func)
    set function called when drag-and-drop event occured
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • aFunc - event handling function
  • setDropHandler(func) + [Commercial] +
    set function called after drag-and-drap event occured
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • func - event handling function
  • setImageArrays(arrayName,image1,image2,image3,image4,image5)
    enableTreeLines(mode);
    Object: dhtmlXTreeObject
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • arrayName - name of array: plus, minus
  • image1 - line crossed image
  • image2 - image with top line
  • image3 - image with bottom line
  • image4 - image without line
  • image5 - single root image
  • setImagePath( newPath )
    set path to image directory
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • newPath - path to image directory
  • setItemCloseable(itemId,flag)
    prevent node from closing
    Object: dhtmlXTreeObject
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • flag - if 0 - node can't be closed, else node can be closed
  • setItemColor(itemId,defaultColor,selectedColor)
    set node color
    Object: dhtmlXTreeObject
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • defaultColor - node color
  • selectedColor - selected node color
  • setItemImage(itemId,image1,image2)
    set node images
    Object: dhtmlXTreeObject
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • image1 - node without childrens image or closed node image (if image2 specified)
  • image2 - open node image (optional)
  • setItemImage2(itemId, image1,image2,image3)
    set node images
    Object: dhtmlXTreeObject
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • image1 - node without childrens image
  • image2 - closed node image
  • image3 - open node image
  • setItemText(itemId,newLabel)
    set new node text (HTML allowed)
    Object: dhtmlXTreeObject
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • newLabel - node text
  • setOnCheckHandler(func)
    set function called before checkbox checked/unchecked
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • func - event handling function
  • setOnClickHandler(func)
    set function called when tree node selected
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • func - event handling function
  • setOnDblClickHandler(func)
    set function called when tree node double clicked
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • func - event handling function
  • setOnOpenHandler(func)
    set function called before tree node opened/closed
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • func - event handling function
  • setStdImages(image1,image2,image3)
    set default images for nodes
    Object: dhtmlXTreeObject
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • a0 - image for node without childrens;
  • a1 - image for closed node;
  • a2 - image for opened node
  • setSubChecked(itemId,state)
    change state of node's checkbox and all childnodes checkboxes
    Object: dhtmlXTreeObject
    Topic(s): Checkboxes/user data manipulation; +
    File required:dhtmlXTree.js
  • itemId - target node identificator
  • state - checkbox state
  • setUserData(itemId,name,value)
    set user data for target node
    Object: dhtmlXTreeObject
    Topic(s): Checkboxes/user data manipulation; +
    File required:dhtmlXTree.js
  • itemId - target node identificator
  • name - key for user data
  • value - user data
  • setXMLAutoLoading(filePath)
    enables dinamic loading from XML mode
    Object: dhtmlXTreeObject
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • filePath - name of script returning XML;
  • \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxtree/doc/guide.html b/phpgwapi/js/dhtmlxtree/doc/guide.html new file mode 100644 index 0000000000..fdbd1c982e --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/doc/guide.html @@ -0,0 +1,346 @@ + + + + + DHTML Tree guide and samples + + + + + + + +

    dhtmlXTree Guide and Samples

    +
    + + +

    Main features

    +
  • Multibrowser/Multiplatform support
  • +
  • Full controll with JavaScript
  • +
  • Dynamic loading
  • +
  • XML support
  • +
  • Dynamic rendering (Smart XML parsing) for big trees
  • +
  • drag-&-drop (within one tree, between trees, between frames)
  • +
  • checkboxes (two/three states)
  • +
  • customizable icons (with javascript or xml)
  • +
  • context menu (integration with dhtmlxMenu)
  • +
  • user data for nodes
  • +
  • multi-line tree items
  • +
  • high stability
  • +
  • Macromedia Cold Fusion support
  • +
    + +

    Supported browsers

    +
  • IE 5.x and above
  • +
  • Mac OS X Safari
  • +
  • Mozilla 1.4 and above
  • +
  • FireFox 0.9 and above
  • +
  • Opera (Xml loading depends on browser version)
  • +
    + +

    Working with dhtmlXTree

    + +

    Initialize object on page

    + +

    Set Event Handlers

    + +

    Adding nodes with Script

    + +

    Loading data with XML

    + +

    Setting custom icons to nodes

    + +

    Building dynamic tree

    + + + +

    Manipulating nodes

    +
    + + + +

    Cold Fusion Tag for dhtmlXTree

    + + +
    + + diff --git a/phpgwapi/js/dhtmlxtree/doc/index.html b/phpgwapi/js/dhtmlxtree/doc/index.html new file mode 100644 index 0000000000..8379240715 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/doc/index.html @@ -0,0 +1,55 @@ + + + + + DHTML Tree SDK + + + + + + + + + + + + + + + +
    + dhtmlXTree v.1.1 SDK +
    + +
    +©Scand LLC, 2004 + + + + + + + + diff --git a/phpgwapi/js/dhtmlxtree/doc/ogroup.html b/phpgwapi/js/dhtmlxtree/doc/ogroup.html new file mode 100644 index 0000000000..147c289f5d --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/doc/ogroup.html @@ -0,0 +1,124 @@ +

    dhtmlXTreeObject object API

    changeItemId(itemId,newItemId)
    change item id
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - old node id
  • newItemId - new node id
  • clearCut()
    clear cut
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
    closeAllItems(itemId)
    collapse target node and all child nodes
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - node id
  • closeItem(itemId)
    collapse node
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • deleteChildItems(itemId)
    delete all child of node
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
  • itemId - node identificator
  • deleteItem(itemId,selectParent)
    delete node
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
  • itemId - node identificator
  • selectParent - If true parent of deleted item get selection, else no selected items leaving in tree.
  • doCut()
    mark selected item as cutted
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
    doPaste(itemId)
    insert previously cutted branch
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
  • itemId - id of new parent node
  • enableAutoSavingSelected(mode) + [Commercial] +
    enable/disable autosaving selected node in cookie
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
  • mode - true/false
  • enableCheckBoxes(mode)
    hide checkboxes
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • mode - enabled/disabled
  • enableContextMenu(menu) + [Commercial] +
    enable context menu
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • menu - menu object
  • enableDragAndDrop(mode)
    enable/disable drag-and-drop
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • mode - enabled/disabled
  • enableDragAndDropScrolling(mode) + [Commercial] +
    enable/disable auto scrolling while drag-and-drop
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • mode - enabled/disabled
  • enableMultiLineItems(width) + [Commercial] +
    enable multi line items
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • width - text width, if equls zero then use single lines items;
  • enableSmartXMLParsing(mode) + [Commercial] +
    enable/disable smart XML parsing mode
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • mode - 1 - on, 0 - off;
  • enableThreeStateCheckboxes(mode)
    enable three state checkboxes
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • mode - 1 - on, 0 - off;
  • enableTreeImages(mode)
    enable tree images
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • mode - 1 - on, 0 - off;
  • enableTreeLines(mode)
    enableTreeLines(mode);
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • mode - enable/disable tree lines
  • findItem(searchStr,direction,top)
    find tree item by text, select and focus it
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
  • searchStr - search text
  • direction - 0: top -> bottom; 1: bottom -> top
  • top - 1: start searching from top
  • findItemIdByLabel(searchStr,direction,top)
    find tree item by text
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
  • searchStr - search text
  • direction - 0: top -> bottom; 1: bottom -> top
  • top - 1: start searching from top
  • focusItem(itemId) + [Commercial] +
    focus item in tree
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • itemId - item Id
  • getAllChecked()
    return list of identificators of nodes with checked checkboxes
    Topic(s): Checkboxes/user data manipulation; +
    File required:dhtmlXTree.js
    getAllCheckedBranches()
    return list of identificators of nodes with checked checkboxes, and parent of that checkboxes
    Topic(s): Checkboxes/user data manipulation; +
    File required:dhtmlXTree.js
    getAllSubItems(itemId)
    Returns the list of all children items from all next levels of tree, separated by commas.
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • getChildItemIdByIndex(itemId,index)
    retun child node identificator by index
    Topic(s): Selection control; +
    File required:dhtmlXTree.js
  • itemId - parent node identificator
  • index - index of child node
  • getItemColor(itemId)
    get node color
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • getItemIdByIndex(itemId,index)
    retun node identificator by index
    Topic(s): Selection control; +
    File required:dhtmlXTree.js
  • itemId - node identificator
  • index - index of node
  • getItemText(itemId)
    return node text
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • getLevel(itemId)
    return node level
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • getParentId(itemId)
    return parent node identificator
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • getSelectedItemId()
    retun selected node identificator
    Topic(s): Selection control; +
    File required:dhtmlXTree.js
    getSelectedItemText()
    retun selected node text
    Topic(s): Selection control; +
    File required:dhtmlXTree.js
    getSubItems(itemId)
    Returns the list of all children items from the next level of tree, separated by commas.
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • getUserData(itemId,name)
    return user data from target node
    Topic(s): Checkboxes/user data manipulation; +
    File required:dhtmlXTree.js
  • itemId - target node identificator
  • name - key for user data
  • hasChildren(itemId)
    return count of childrens
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • insertNewItem(parentId,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,childs)
    create new child node
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
  • parentId - parent node id
  • itemId - new node id
  • itemText - new node text
  • itemActionHandler - function fired on node select event (optional)
  • image1 - image for node without childrens; (optional)
  • image2 - image for closed node; (optional)
  • image3 - image for opened node (optional)
  • optionStr - options string (optional)
  • childs - node childs flag (for dynamical trees) (optional)
  • insertNewNext(parentItemId,itemId,itemName,itemActionHandler,image1,image2,image3,optionStr,childs)
    create new node next to specified
    Topic(s): Add/delete; +
    File required:dhtmlXTree.js
  • parentItemId - node id
  • itemId - new node id
  • itemName - new node text
  • itemActionHandler - function fired on node select event (optional)
  • image1 - image for node without childrens; (optional)
  • image2 - image for closed node; (optional)
  • image3 - image for opened node (optional)
  • optionStr - options string (optional)
  • childs - node childs flag (for dynamical trees) (optional)
  • isItemChecked(itemId)
    return state of nodes's checkbox
    Topic(s): Checkboxes/user data manipulation; +
    File required:dhtmlXTree.js
  • itemId - target node identificator
  • loadOpenStates(name) + [Commercial] +
    restore open nodes from cookie
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
  • name - optional,cookie name
  • loadState(name) + [Commercial] +
    load tree from cookie
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
  • name - optional,cookie name
  • loadXML(file)
    load tree from xml file
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • file - link too XML file
  • loadXMLString(xmlString)
    load tree from xml string
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • xmlString - XML string
  • openAllItems(itemId)
    expand target node and all child nodes
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - node id
  • openItem(itemId)
    expand node
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • refreshItem(itemId)
    refresh tree branch from xml
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node, if not defined tree super root used.
  • restoreSelectedItem(name) + [Commercial] +
    restore selected item from cookie
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
  • name - optional, cookie name
  • saveOpenStates(name) + [Commercial] +
    save open nodes to cookie
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
  • name - optional,cookie name
  • saveSelectedItem(name) + [Commercial] +
    save selected item to cookie
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
  • name - optional, cookie name
  • saveState(name) + [Commercial] +
    save tree to cookie
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
  • name - optional, cookie name
  • selectItem(itemId,mode)
    select node ( and optionaly fire onselect event)
    Topic(s): Selection control; +
    File required:dhtmlXTree.js
  • itemId - node identificator
  • mode - If true, script function for selected node will be called.
  • serializeTree() + [Commercial] +
    return xml description of tree
    Topic(s): Add/delete; +
    File required:dhtmlXTree_xw.js
    setCheck(itemId,state)
    change state of node's checkbox
    Topic(s): Checkboxes/user data manipulation; +
    File required:dhtmlXTree.js
  • itemId - target node identificator
  • state - checkbox state
  • setDragBehavior(mode) + [Commercial] +
    set Drag-And-Drop behavior
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • mode - behavior name (child or sibling)
  • setDragHandler(func)
    set function called when drag-and-drop event occured
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • aFunc - event handling function
  • setDropHandler(func) + [Commercial] +
    set function called after drag-and-drap event occured
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • func - event handling function
  • setImageArrays(arrayName,image1,image2,image3,image4,image5)
    enableTreeLines(mode);
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • arrayName - name of array: plus, minus
  • image1 - line crossed image
  • image2 - image with top line
  • image3 - image with bottom line
  • image4 - image without line
  • image5 - single root image
  • setImagePath( newPath )
    set path to image directory
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • newPath - path to image directory
  • setItemCloseable(itemId,flag)
    prevent node from closing
    Topic(s): Node/level control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • flag - if 0 - node can't be closed, else node can be closed
  • setItemColor(itemId,defaultColor,selectedColor)
    set node color
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • defaultColor - node color
  • selectedColor - selected node color
  • setItemImage(itemId,image1,image2)
    set node images
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • image1 - node without childrens image or closed node image (if image2 specified)
  • image2 - open node image (optional)
  • setItemImage2(itemId, image1,image2,image3)
    set node images
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • image1 - node without childrens image
  • image2 - closed node image
  • image3 - open node image
  • setItemText(itemId,newLabel)
    set new node text (HTML allowed)
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • itemId - identificator of node
  • newLabel - node text
  • setOnCheckHandler(func)
    set function called before checkbox checked/unchecked
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • func - event handling function
  • setOnClickHandler(func)
    set function called when tree node selected
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • func - event handling function
  • setOnDblClickHandler(func)
    set function called when tree node double clicked
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • func - event handling function
  • setOnOpenHandler(func)
    set function called before tree node opened/closed
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • func - event handling function
  • setStdImages(image1,image2,image3)
    set default images for nodes
    Topic(s): Appearence control; +
    File required:dhtmlXTree.js
  • a0 - image for node without childrens;
  • a1 - image for closed node;
  • a2 - image for opened node
  • setSubChecked(itemId,state)
    change state of node's checkbox and all childnodes checkboxes
    Topic(s): Checkboxes/user data manipulation; +
    File required:dhtmlXTree.js
  • itemId - target node identificator
  • state - checkbox state
  • setUserData(itemId,name,value)
    set user data for target node
    Topic(s): Checkboxes/user data manipulation; +
    File required:dhtmlXTree.js
  • itemId - target node identificator
  • name - key for user data
  • value - user data
  • setXMLAutoLoading(filePath)
    enables dinamic loading from XML mode
    Topic(s): Initialization; +
    File required:dhtmlXTree.js
  • filePath - name of script returning XML;
  • \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxtree/doc/tgroup.html b/phpgwapi/js/dhtmlxtree/doc/tgroup.html new file mode 100644 index 0000000000..413cc3ee93 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/doc/tgroup.html @@ -0,0 +1,55 @@ +

    dhtmlXTreeObject object API

    Initialization

    Selection control

    Add/delete

    Node/level control

    Checkboxes/user data manipulation

    Appearence control

    \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxtree/index.html b/phpgwapi/js/dhtmlxtree/index.html new file mode 100644 index 0000000000..14402c680f --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/index.html @@ -0,0 +1,191 @@ + + + +dhtmlxTree v.1.1 Standard Edition + + + + + + + + + + + + +

    Often there is a need to show a hierarchically structured data.
    +Our dhtmlxTree (DHTML extensions Tree) lets you do this in an easy and most comfortable way - in any browser! This JavaScript Tree Menu component allows creating user-friendly navigation bar for a commercial application or a web site. Menu items are organized into compact, hierarchical tree structure so users can find information they need easily.
    +Having such feature, as dynamical loading of items from XML stream allows dhtmlxTree to handle large amounts of data. Drag-and-drop makes it possible to drag items not just within one tree, but between different trees. Try by yourself now:

    + + + + + + + +
    +
    +
    +
      +
    +
    +
    + + Drag & drop items within the trees as well as between trees
    + Double-click on folder label or click on [+] plus to expand subitems. +
    +

    +

    Rich client-side Javascript API gives an opportunity to change tree styles (folder images, fonts, indents, and colors) and manage any part or activity. Our DHTML tree works perfectly in all main Web-browsers for Windows, Mac OS X, Linux or Unix so you don't have to care about the browser compatibility.
    +dhtmlxTree has built-in checkboxes providing a handy tool for any kind of navigation system where selection lists are required. +

    + + + + + + + + + +
    +

    What's new in version 1.1 (June 22, 2005):

    +
  • possibility to use tree without icons - EnableTreeImages method
  • +
  • autoscrolling while drag-and-drop
  • +
  • fixed bug in drag-and-drop on pages with scrollbars
  • +
  • added another drag-n-drop behavior – drop-as-sibling *
  • +
  • drag-n-drop between frames/iframes *
  • +
  • OnDrop event handler *
  • +
  • fixed some visual glitches
  • +
  • focus item with script - focusItem method *
  • +
  • advanced xml processing for loading big trees - tested with 50000 items *
  • +
  • saving/Restoring tree state in cookie *
  • +
  • possibility to create XML based on updated tree structure *
  • +
  • search functionality *
  • +
  • possibility to change nodes order *
  • +
  • multi-line tree items *
  • +
  • context menu - integration with dhtmlXMenu *
  • +
    + * - professional edition +

    +
    +

    Supported Browsers:

    +
  • IE 5.x and above
  • +
  • Mac OS X Safari
  • +
  • Mozilla 1.4 and above
  • +
  • FireFox 0.9 and above
  • +
  • Opera (Xml support depends on browser version)
  • + +

    Features:

    +
  • Multibrowser/Multiplatform support
  • +
  • Full controll with JavaScript API
  • +
  • Dynamic loading (can load data on demand)
  • +
  • Dynamic rendering *
  • +
  • XML support (initializes from XML stream)
  • +
  • drag-&-drop (within one tree, between trees, between frames *)
  • +
  • checkboxes (two/three states)
  • +
  • context menu * (integration with dhtmlxMenu)
  • +
  • tooltips
  • +
  • multi-line tree items *
  • +
  • customizable icons (with javascript or xml)
  • +
  • user data for nodes
  • +
  • high stability
  • +
  • .NET custom server control
  • +
  • JSP custom tag for Java - pending
  • +
  • Macromedia Cold Fusion support
  • +
    + * - professional edition +

    Editions

    +
  • Standard - available for free download (for non-commercial use).
  • +
  • Professional - contains additional features (with examples) which are not present at standard edition. Avalable for users of Commercial and Enterprice licenses.
  • +

    Licensing

    +
  • Open Source - GPL (standard edition only)
  • +
  • Commercial License (standard and professional editions): in order to use any edition of dhtmlxTree in a commercial non-OpenSource project, get all features available in professional edition or to have support you can purchase a Commercial License ($99) - please contact us
  • +
    +

    Download:

    +
  • Full package (v.1.1 standard)
  • +
  • Documentation only
  • +

    Examples:

    +
  • Initialize object
  • +
  • Add/Delete items
  • +
  • Attached events
  • +
  • Collapse/Expand branch
  • +
  • Change item text/images
  • +
  • Checkboxes
  • +
  • Change design
  • +
  • Autoloading from xml
  • +
  • Drag and Drop
  • +

    Documentation:

    +
  • API Functions and Documentation
    (including CF custom tag doc)
  • +
    +
    + +

    Code Sample

    + + +<link rel="STYLESHEET" type="text/css" href="jTreeX.css"> +<script src="dhtmlXCommon.js"></script> +<script src="dhtmlXTree.js"></script> + +<script> + var tree1 = null; + function doOnLoad(){ + tree1=new dhtmlXTreeObject('treebox1',"100%","100%",0); + tree1.setImagePath("imgs/"); + tree1.enableDragAndDrop(true); + tree1.loadXML("tree.xml") + } +</script> +<body onload="doOnLoad()"> +<div + id="treebox1" + style=" width:250; + height:250; + background-color:#f5f5f5; + border :1px solid Silver; + overflow:auto;"> +</div> + + +

    See also our Java tree applet - jTree.

    +
    + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxtree/js/dhtmlXCommon.js b/phpgwapi/js/dhtmlxtree/js/dhtmlXCommon.js new file mode 100644 index 0000000000..97f0f4ff05 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/js/dhtmlXCommon.js @@ -0,0 +1,201 @@ + +function dtmlXMLLoaderObject(funcObject,dhtmlObject){ + this.xmlDoc=""; + this.onloadAction=funcObject||null; + this.mainObject=dhtmlObject||null; + return this; +}; + + dtmlXMLLoaderObject.prototype.waitLoadFunction=function(dhtmlObject){ + this.check=function(){ + if(!dhtmlObject.xmlDoc.readyState)dhtmlObject.onloadAction(dhtmlObject.mainObject); + else{ + if(dhtmlObject.xmlDoc.readyState != 4)return false; + else dhtmlObject.onloadAction(dhtmlObject.mainObject);} +}; + return this.check; +}; + + + dtmlXMLLoaderObject.prototype.getXMLTopNode=function(tagName){ + if(this.xmlDoc.responseXML){var temp=this.xmlDoc.responseXML.getElementsByTagName(tagName);var z=temp[0];} + else var z=this.xmlDoc.documentElement; + if(z)return z; + alert("Incorrect XML"); + return document.createElement("DIV"); +}; + + + dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString){ + try +{ + var parser = new DOMParser(); + this.xmlDoc = parser.parseFromString(xmlString,"text/xml"); +} + catch(e){ + this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + this.xmlDoc.loadXML(xmlString); +} + this.onloadAction(this.mainObject); +} + dtmlXMLLoaderObject.prototype.loadXML=function(filePath){ + try +{ + this.xmlDoc = new XMLHttpRequest(); + this.xmlDoc.open("GET",filePath,true); + this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this); + this.xmlDoc.send(null); +} + catch(e){ + + if(document.implementation && document.implementation.createDocument) +{ + this.xmlDoc = document.implementation.createDocument("","",null); + this.xmlDoc.onload = new this.waitLoadFunction(this); +} + else +{ + this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + this.xmlDoc.async="true"; + this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this); +} + this.xmlDoc.load(filePath); +} +}; + + +function callerFunction(funcObject,dhtmlObject){ + this.handler=function(e){ + if(!e)e=event; + funcObject(e,dhtmlObject); + return true; +}; + return this.handler; +}; + + +function getAbsoluteLeft(htmlObject){ + var xPos = htmlObject.offsetLeft; + var temp = htmlObject.offsetParent; + while(temp != null){ + xPos+= temp.offsetLeft; + temp = temp.offsetParent; +} + return xPos; +} + +function getAbsoluteTop(htmlObject){ + var yPos = htmlObject.offsetTop; + var temp = htmlObject.offsetParent; + while(temp != null){ + yPos+= temp.offsetTop; + temp = temp.offsetParent; +} + return yPos; +} + + + +function convertStringToBoolean(inputString){if(typeof(inputString)=="string")inputString=inputString.toLowerCase(); + switch(inputString){ + case "1": + case "true": + case "yes": + case "y": + case 1: + case true: + return true; + break; + default: return false; +} +} + + +function getUrlSymbol(str){ + if(str.indexOf("?")!=-1) + return "&" + else + return "?" +} + + +function dhtmlDragAndDropObject(){ + this.lastLanding=0; + this.dragNode=0; + this.dragStartNode=0; + this.dragStartObject=0; + this.tempDOMU=null; + this.tempDOMM=null; + this.waitDrag=0; + if(window.dhtmlDragAndDrop)return window.dhtmlDragAndDrop; + window.dhtmlDragAndDrop=this; + return this; +}; + + dhtmlDragAndDropObject.prototype.removeDraggableItem=function(htmlNode){ + htmlNode.onmousedown=null; + htmlNode.dragStarter=null; + htmlNode.dragLanding=null; +} + dhtmlDragAndDropObject.prototype.addDraggableItem=function(htmlNode,dhtmlObject){ + htmlNode.onmousedown=this.preCreateDragCopy; + htmlNode.dragStarter=dhtmlObject; + this.addDragLanding(htmlNode,dhtmlObject); +} + dhtmlDragAndDropObject.prototype.addDragLanding=function(htmlNode,dhtmlObject){ + htmlNode.dragLanding=dhtmlObject; +} + dhtmlDragAndDropObject.prototype.preCreateDragCopy=function(e) +{ + if(window.dhtmlDragAndDrop.waitDrag){ + window.dhtmlDragAndDrop.waitDrag=0; + document.body.onmouseup=window.dhtmlDragAndDrop.tempDOMU; + document.body.onmousemove=window.dhtmlDragAndDrop.tempDOMM; + return; +} + + window.dhtmlDragAndDrop.waitDrag=1; + window.dhtmlDragAndDrop.tempDOMU=document.body.onmouseup; + window.dhtmlDragAndDrop.tempDOMM=document.body.onmousemove; + window.dhtmlDragAndDrop.dragStartNode=this; + window.dhtmlDragAndDrop.dragStartObject=this.dragStarter; + document.body.onmouseup=window.dhtmlDragAndDrop.preCreateDragCopy; + document.body.onmousemove=window.dhtmlDragAndDrop.callDrag; +}; + dhtmlDragAndDropObject.prototype.callDrag=function(e){ + if(!e)e=window.event; + dragger=window.dhtmlDragAndDrop; + if(!dragger.dragNode){ + dragger.dragNode=dragger.dragStartObject._createDragNode(dragger.dragStartNode); + document.body.appendChild(dragger.dragNode); + document.body.onmouseup=dragger.stopDrag; + dragger.waitDrag=0; +} + + dragger.dragNode.style.left=e.clientX+15+document.body.scrollLeft;dragger.dragNode.style.top=e.clientY+3+document.body.scrollTop; + + if(!e.srcElement)var z=e.target;else z=e.srcElement; + dragger.checkLanding(z); +} + dhtmlDragAndDropObject.prototype.checkLanding=function(htmlObject){ + if(htmlObject.dragLanding){if(this.lastLanding)this.lastLanding.dragLanding._dragOut(this.lastLanding); + this.lastLanding=htmlObject;this.lastLanding=this.lastLanding.dragLanding._dragIn(this.lastLanding,this.dragStartNode);} + else{ + if(htmlObject.tagName!="BODY")this.checkLanding(htmlObject.parentNode); + else{if(this.lastLanding)this.lastLanding.dragLanding._dragOut(this.lastLanding);this.lastLanding=0;} +} +} + dhtmlDragAndDropObject.prototype.stopDrag=function(e){ + dragger=window.dhtmlDragAndDrop; + if(dragger.lastLanding)dragger.lastLanding.dragLanding._drag(dragger.dragStartNode,dragger.dragStartObject,dragger.lastLanding); + dragger.lastLanding=0; + dragger.dragNode.parentNode.removeChild(dragger.dragNode); + dragger.dragNode=0; + dragger.dragStartNode=0; + dragger.dragStartObject=0; + document.body.onmouseup=dragger.tempDOMU; + document.body.onmousemove=dragger.tempDOMM; + dragger.tempDOMU=null; + dragger.tempDOMM=null; + dragger.waitDrag=0; +} diff --git a/phpgwapi/js/dhtmlxtree/js/dhtmlXTree.js b/phpgwapi/js/dhtmlxtree/js/dhtmlXTree.js new file mode 100644 index 0000000000..6671ee9f84 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/js/dhtmlXTree.js @@ -0,0 +1,1323 @@ + + + +function dhtmlXTreeObject(htmlObject,width,height,rootId){ + if(typeof(htmlObject)!="object") + this.parentObject=document.getElementById(htmlObject); + else + this.parentObject=htmlObject; + this.mytype="tree"; + this.width=width; + this.height=height; + this.rootId=rootId; + + this.style_pointer="pointer"; + if(navigator.appName == 'Microsoft Internet Explorer')this.style_pointer="hand"; + + this.hfMode=0; + this.nodeCut=0; + this.XMLsource=0; + this.XMLloadingWarning=0; + this._globalIdStorage=new Array(); + this.globalNodeStorage=new Array(); + this._globalIdStorageSize=0; + this.treeLinesOn=true; + this.checkFuncHandler=0; + this.openFuncHandler=0; + this.dblclickFuncHandler=0; + this.tscheck=false; + this.timgen=true; + + this.imPath="treeGfx/"; + this.checkArray=new Array("iconUnCheckAll.gif","iconCheckAll.gif","iconCheckGray.gif"); + this.lineArray=new Array("line2.gif","line3.gif","line4.gif","blank.gif","blank.gif"); + this.minusArray=new Array("minus2.gif","minus3.gif","minus4.gif","minus.gif","minus5.gif"); + this.plusArray=new Array("plus2.gif","plus3.gif","plus4.gif","plus.gif","plus5.gif"); + this.imageArray=new Array("leaf.gif","folderOpen.gif","folderClosed.gif"); + this.cutImg= new Array(0,0,0); + this.cutImage="but_cut.gif"; + + this.dragger= new dhtmlDragAndDropObject(); + this.htmlNode=new dhtmlXTreeItemObject(this.rootId,"",0,this); + this.htmlNode.htmlNode.childNodes[0].childNodes[0].style.display="none"; + this.htmlNode.htmlNode.childNodes[0].childNodes[0].childNodes[0].className="hiddenRow"; + this.allTree=this._createSelf(); + this.allTree.appendChild(this.htmlNode.htmlNode); + this.allTree.onselectstart=new Function("return false;"); + this.XMLLoader=new dtmlXMLLoaderObject(this._parseXMLTree,this); + + this.dragger.addDragLanding(this.allTree,this); + return this; +}; + + +function dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode){ + this.htmlNode=""; + this.acolor=""; + this.scolor=""; + this.tr=0; + this.childsCount=0; + this.tempDOMM=0; + this.tempDOMU=0; + this.dragSpan=0; + this.dragMove=0; + this.span=0; + this.closeble=1; + this.childNodes=new Array(); + + this.checkstate=0; + this.treeNod=treeObject; + this.label=itemText; + this.parentObject=parentObject; + this.actionHandler=actionHandler; + this.images=new Array(treeObject.imageArray[0],treeObject.imageArray[1],treeObject.imageArray[2]); + + + this.id=treeObject._globalIdStorageAdd(itemId,this); + if(this.treeNod.checkBoxOff)this.htmlNode=this.treeNod._createItem(1,this,mode); + else this.htmlNode=this.treeNod._createItem(0,this,mode); + this.htmlNode.objBelong=this; + return this; +}; + + + + dhtmlXTreeObject.prototype._globalIdStorageAdd=function(itemId,itemObject){ + if(this._globalIdStorageFind(itemId)){d=new Date();itemId=d.valueOf()+"_"+itemId;return this._globalIdStorageAdd(itemId,itemObject);} + this._globalIdStorage[this._globalIdStorageSize]=itemId; + this.globalNodeStorage[this._globalIdStorageSize]=itemObject; + this._globalIdStorageSize++; + return itemId; +}; + + dhtmlXTreeObject.prototype._globalIdStorageSub=function(itemId){ + for(var i=0;i1)beforeNode=parentObject.htmlNode.childNodes[0].childNodes[1].nodem.previousSibling;break; +} +}; +}; + + if((beforeNode)&&(beforeNode.tr.nextSibling)) + parentObject.htmlNode.childNodes[0].insertBefore(tr,beforeNode.tr.nextSibling); + else + parentObject.htmlNode.childNodes[0].appendChild(tr); + + if(this.XMLsource)if((childs)&&(childs!=0))Nodes[Count].XMLload=0;else Nodes[Count].XMLload=1; + + Nodes[Count].tr=tr; + tr.nodem=Nodes[Count]; + + if(parentObject.itemId==0) + tr.childNodes[0].className="hitemIddenRow"; + + if(optionStr){ + var tempStr=optionStr.split(","); + for(var i=0;i=2) +{ + this._correctPlus(Nodes[parentObject.childsCount-2]); + this._correctLine(Nodes[parentObject.childsCount-2]); +} + if(parentObject.childsCount!=2)this._correctPlus(Nodes[0]); + if(this.tscheck)this._correctCheckStates(parentObject); +} + + return Nodes[Count]; +}; + + + dhtmlXTreeObject.prototype.insertNewItem=function(parentId,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,childs){ + var parentObject=this._globalIdStorageFind(parentId); + if(!parentObject)return(-1); + return this._attachChildNode(parentObject,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,childs); +}; + + dhtmlXTreeObject.prototype._parseXMLTree=function(dhtmlObject,node,parentId,level){ + dhtmlObject.XMLloadingWarning=1; + var nodeAskingCall=""; + if(!node){ + node=dhtmlObject.XMLLoader.getXMLTopNode("tree"); + parentId=node.getAttribute("id"); + dhtmlObject.setCheckList=""; +} + + for(var i=0;i1){ + if(((Nodes[1].style.display!="none")||(mode==1))&&(mode!=2))nodestyle="none";else nodestyle=""; + for(var i=1;i1){oldTree._correctPlus(z.childNodes[c-2]); + oldTree._correctLine(z.childNodes[c-2]);} + this._correctPlus(targetObject); + this._correctLine(targetObject); + oldTree._correctPlus(z); + this._correctLine(itemObject); + this._correctPlus(Nodes[Count]); + if(targetObject.childsCount>=2) +{ + this._correctPlus(Nodes[targetObject.childsCount-2]); + this._correctLine(Nodes[targetObject.childsCount-2]); +} + if(this.tscheck)this._correctCheckStates(targetObject); + if(oldTree.tscheck)oldTree._correctCheckStates(z); + return true; +}; + + +dhtmlXTreeObject.prototype._checkParenNodes=function(itemId,htmlObject,shtmlObject){ + if(shtmlObject){if(shtmlObject.parentObject.id==htmlObject.id)return 1;} + if(htmlObject.id==itemId)return 1; + if(htmlObject.parentObject)return this._checkParenNodes(itemId,htmlObject.parentObject);else return 0; +}; + + + + + dhtmlXTreeObject.prototype._clearStyles=function(itemObject){ + var td1=itemObject.htmlNode.childNodes[0].childNodes[0].childNodes[1]; + var td3=td1.nextSibling.nextSibling; + + if(this.checkBoxOff){td1.childNodes[0].style.display="";td1.childNodes[0].onclick=this.onCheckBoxClick;} + else td1.childNodes[0].style.display="none"; + td1.childNodes[0].treeNod=this; + + this.dragger.removeDraggableItem(td3); + if(this.dragAndDropOff)this.dragger.addDraggableItem(td3,this); + td3.childNodes[0].className="standartTreeRow"; + td3.onclick=this.onRowSelect;td3.ondblclick=this.onRowClick2; + td1.previousSibling.onclick=this.onRowClick; + + + this._correctLine(itemObject); + this._correctPlus(itemObject); + for(var i=0;i0))){if(list)list+=","+htmlNode.id;else list=htmlNode.id;} + var j=htmlNode.childsCount; + for(var i=0;i0) +{ + temp=temp.nextSibling; + if((!temp)||(!temp.nodem))return 0; + index--; +} + return temp.nodem.id; +}; + + dhtmlXTreeObject.prototype.getChildItemIdByIndex=function(itemId,index){ + var sNode=this._globalIdStorageFind(itemId); + if(!sNode)return(0); + if(this.hasChildren(itemId) + + + + DHTML Tree. Professional edition features + + + + +

    dhtmlxTree Professional Edition Features:

    +
    +
  • Context Menu
  • +
  • OnDrop event handler
  • +
  • Additional Drag-n-drop behavior – drop-as-sibling
  • +
  • Drag-n-drop between frames
  • +
  • Focus item with script method
  • +
  • Dynamic rendering – advanced xml processing for loading big trees when dynamical loading can't be used
  • +
  • Serialization – possibility to create XML based on updated tree structure.
  • +
  • Search
  • +
  • Multi-line tree items
  • +
  • Saving/Restoring tree state in/from cookies
  • + + + + diff --git a/phpgwapi/js/dhtmlxtree/readme.txt b/phpgwapi/js/dhtmlxtree/readme.txt new file mode 100644 index 0000000000..42037fa385 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/readme.txt @@ -0,0 +1,24 @@ + +Current version: 1.1 from June 22, 2005 build 714 + +============================================================================================ + +If you want to use dhtmlXTree in a commercial product, you have to buy a commercial license. +Please contact us at info@scand.com + +Some comments on commercial usage: + +1.Commercial License allows you to use dhtmlXTree on unlimited number of Websites or sites +but only in one commercial project(application). According to this license we provide you +with support (consultations) and free-of-charge bug fixing during 3 month. +This license costs $99. + +2.Enterprise License allows you to use dhtmlXTree in unlimited number of projects on condition +that all of them are projects of one company. Support period is 2 years. +This license costs $399. + +One year support additionally to period specified in license will cost $79 plus. + +According to both licenses you are allowed to make changes to the code of Software but Scand LLC +still owns the code and you are not allowed to distribute changed code. + diff --git a/phpgwapi/js/dhtmlxtree/samples/dhtmlXTree.cfm b/phpgwapi/js/dhtmlxtree/samples/dhtmlXTree.cfm new file mode 100644 index 0000000000..f2ce9ed492 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/dhtmlXTree.cfm @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + + +
    + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxtree/samples/example.cfm b/phpgwapi/js/dhtmlxtree/samples/example.cfm new file mode 100644 index 0000000000..6298250b80 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/example.cfm @@ -0,0 +1,122 @@ + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + <cf_dhtmlXTree im1="book.gif" im2="books_open.gif" im3="books_close.gif" > + + <item text="Mystery " id="mystery" open="yes" > + <item text="Lawrence Block" id="lb" > + <item text="All the Flowers Are Dying" id="lb_1" /> + <item text="The Burglar on the Prowl" id="lb_2" /> + <item text="The Plot Thickens" id="lb_3" /> + <item text="Grifters Game" id="lb_4" /> + <item text="The Burglar Who Thought He Was Bogart" id="lb_5" /> + </item> + <item text="Robert Crais" id="rc" > + <item text="The Forgotten Man" id="rc_1" /> + <item text="Stalking the Angel" id="rc_2" /> + <item text="Free Fall" id="rc_3" /> + <item text="Sunset Express" id="rc_4" /> + <item text="Hostage" id="rc_5" /> + </item> + <item text="Ian Rankin" id="ir" ></item> + <item text="James Patterson" id="jp" ></item> + <item text="Nancy Atherton" id="na" ></item> + </item> + + </cf_dhtmlXTree> + +
    + + + + <cf_dhtmlXTree checkboxes="threeState" xmlFile="tree4.xml" > + </cf_dhtmlXTree> + +
    + + + + + + + + + + + + + + + + + + + + + + + <cf_dhtmlXTree width="50%" dragndrop="true" checkboxes="twoState" onSelect="onClick" onCheck="onCheck" onDrop="onDrag" > + + <item text="Mystery " id="mystery" open="yes" > + <item text="Lawrence Block" id="lb" > + <item text="All the Flowers Are Dying" id="lb_1" /> + <item text="The Burglar on the Prowl" id="lb_2" /> + <item text="The Plot Thickens" id="lb_3" /> + <item text="Grifters Game" id="lb_4" /> + <item text="The Burglar Who Thought He Was Bogart" id="lb_5" /> + </item> + <item text="Robert Crais" id="rc" > + <item text="The Forgotten Man" id="rc_1" /> + <item text="Stalking the Angel" id="rc_2" /> + <item text="Free Fall" id="rc_3" /> + <item text="Sunset Express" id="rc_4" /> + <item text="Hostage" id="rc_5" /> + </item> + <item text="Ian Rankin" id="ir" ></item> + <item text="James Patterson" id="jp" ></item> + <item text="Nancy Atherton" id="na" ></item> + </item> + + </cf_dhtmlXTree> + +
    \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxtree/samples/tree3.xml b/phpgwapi/js/dhtmlxtree/samples/tree3.xml new file mode 100644 index 0000000000..79f13eed5e --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/tree3.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/phpgwapi/js/dhtmlxtree/samples/tree4.xml b/phpgwapi/js/dhtmlxtree/samples/tree4.xml new file mode 100644 index 0000000000..c74ca65901 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/tree4.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/phpgwapi/js/dhtmlxtree/samples/tree5.xml b/phpgwapi/js/dhtmlxtree/samples/tree5.xml new file mode 100644 index 0000000000..42f89ef5fc --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/tree5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/phpgwapi/js/dhtmlxtree/samples/tree6.xml b/phpgwapi/js/dhtmlxtree/samples/tree6.xml new file mode 100644 index 0000000000..bbc8081eb8 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/tree6.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/phpgwapi/js/dhtmlxtree/samples/treeEx11.html b/phpgwapi/js/dhtmlxtree/samples/treeEx11.html new file mode 100644 index 0000000000..5c16c1c7c4 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/treeEx11.html @@ -0,0 +1,57 @@ + + + + + DHTML Tree samples. dhtmlXTree - Initialize object on page + + + +

    Initialize object on page

    + + + + + + + + + + + +
    +
    +
    + + +
     
    +
    + +<div id="treeboxbox_tree" style="width:200;height:200"></div> +<script> + tree=new dhtmlXTreeObject("treeboxbox_tree","100%","100%",0); + tree.setImagePath("../imgs/"); + tree.loadXML("tree.xml") +</script> + + Parameters passed to the constructor are: +
  • object to attach tree to (should be loaded before calling constructor)
  • +
  • width of the tree
  • +
  • height of the tree
  • +
  • identifier of level parent to tree root level

  • + Specify Additional parameters of the tree: +
  • setImagePath(url) - method specifies the path to the folder with tree icons
  • +
  • loadXML("tree.xml") - load tree items from XML
  • + +

    + + + diff --git a/phpgwapi/js/dhtmlxtree/samples/treeEx12.html b/phpgwapi/js/dhtmlxtree/samples/treeEx12.html new file mode 100644 index 0000000000..56bbeeda2b --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/treeEx12.html @@ -0,0 +1,95 @@ + + + + + DHTML Tree samples. dhtmlXTree - Add / Delete items + + + +

    Add / Delete items

    + + + + + + + + + + + + +
    + + +
    +
    + + + Insert new child item Item label

    + + Insert new item next Item label

    + + Delete item

    + + + +
     
    +
    + + +<div id="treeboxbox_tree" style="width:200;height:200"></div> +<script> + tree=new dhtmlXTreeObject("treeboxbox_tree","100%","100%",0); + tree.setImagePath("../imgs/"); + tree.loadXML("tree.xml") + + tree.insertNewItem(0,100,"New Node 1",0,0,0,0,"SELECT"); + tree.insertNewNext(2,101,"New Node 2",0,0,0,0,""); + tree.deleteItem("2"); +</script> + +
  • 0s passed to the function for arguments 4-7 (function to call on select, images) mean use default values for them
  • +
  • Last argument is a comma delimited string of following possible value (upper case only):
  • +
  • SELECT - move selection to this node after inserting
  • +
  • CALL - call function on select
  • +
  • TOP - add node to the top position
  • +
  • CHILD - node has children
  • +
  • CHECKED - checkbox is checked (if exists)
  • + +

    + + + diff --git a/phpgwapi/js/dhtmlxtree/samples/treeEx13.html b/phpgwapi/js/dhtmlxtree/samples/treeEx13.html new file mode 100644 index 0000000000..9358416b60 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/treeEx13.html @@ -0,0 +1,82 @@ + + + + + DHTML Tree samples. dhtmlXTree - Action handlers + + + +

    Action handlers

    + + + + + + + + + + + + +
    +
    +
    + +
     
    +
    + +<div id="treeBox" style="width:200;height:200"></div> +<script> + tree=new dhtmlXTreeObject(document.getElementById('treeBox'),"100%","100%",0); + + ... + tree.setDragHandler(onDrop);//set function object to call on drop + tree.setOnClickHandler(onNodeSelect);//set function object to call on node select + tree.setOnOpenHandler(aFunc);//set function to call on open/close node + tree.setOnCheckHandler(aFunc);//set function to call on open/close node + tree.setOnDblClickHandler(aFunc);//set function to call on dbl click +</script> + +
  • Selected node ID will be passed to function specified as argument for setDefaultAction(funcObj)
  • +
  • Dropped node ID and new parent node ID will be passed to function specified as argument for setDragFunction(funcObj)
  • +
  • node ID will be passed to the function specified as argument for setOpenAction(aFunc)
  • +
  • node ID will be passed to the function specified as argument for setDblClickAction(aFunc)
  • + +

    + + + diff --git a/phpgwapi/js/dhtmlxtree/samples/treeEx21.html b/phpgwapi/js/dhtmlxtree/samples/treeEx21.html new file mode 100644 index 0000000000..7df293b711 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/treeEx21.html @@ -0,0 +1,80 @@ + + + + + DHTML Tree samples. dhtmlXTree - Collapse/Expand + + + +

    Collapse/Expand

    + + + + + + + + + + + + +
    + + +
    +
    + + + Expand all

    + Collapse all

    + Close selected item

    + Open selected item

    + Collapse selected branch

    + Expand selected branch

    + +
     
    +
    + +<div id="treeboxbox_tree" style="width:200;height:200"></div> +<script> + tree=new dhtmlXTreeObject("treeboxbox_tree","100%","100%",0); + tree.setImagePath("../imgs/"); + tree.loadXML("tree.xml"); + + .... + //expand all + tree.openAllItems(0); + //open item + tree.openItem(id); + //close item + tree.closeItem(id); + //open branch + tree.openAllItems(id); + //close branch + tree.closeAllItems(id); +</script> + + + +

    + + + diff --git a/phpgwapi/js/dhtmlxtree/samples/treeEx22.html b/phpgwapi/js/dhtmlxtree/samples/treeEx22.html new file mode 100644 index 0000000000..b148f4a142 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/treeEx22.html @@ -0,0 +1,100 @@ + + + + + DHTML Tree samples. dhtmlXTree - Change text/image + + + +

    Change text/image

    + + + + + + + + + + + + +
    +
    +
    + + + Set new item label 

    + + To change item's image - click on one of next images: + + + + + + + + + + + + + +
    +
    +
    +
    + To change item's color - click on one of next colors: + + + + + + + + + + + + + + + + +
     
     
     
     
     
     
     
     
     
    +
     
    +
    + +<div id="treeboxbox_tree" style="width:200;height:200"></div> +<script> + tree=new dhtmlXTreeObject("treeboxbox_tree","100%","100%",0); + tree.setImagePath("../imgs/"); + tree.loadXML("tree.xml"); + + .... + //set item text + tree.setItemText(id,"New text"); + //set item images + tree.setItemImage2(id,"item.gif","closeItem.gif","openItem.gif"); +</script> + + +

    + + + diff --git a/phpgwapi/js/dhtmlxtree/samples/treeEx23.html b/phpgwapi/js/dhtmlxtree/samples/treeEx23.html new file mode 100644 index 0000000000..a78ec07c16 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/treeEx23.html @@ -0,0 +1,95 @@ + + + + + DHTML Tree samples. dhtmlXTree - Checkboxes + + + +

    Checkboxes

    + + + + + + + + + + + + + +
    +
    +
    + + Two state checkboxes + Check item

    + UnCheck item

    + Check branch

    + UnCheck branch

    + + Get list of checked

    + +
    +
    +
    + + Three state checkboxes
    +
    + + Check item

    + UnCheck item

    + + Get list of checked

    + +
    +
    + +<div id="treeboxbox_tree" style="width:200;height:200"></div> +<script> + tree=new dhtmlXTreeObject("treeboxbox_tree","100%","100%",0); + tree.setImagePath("../imgs/"); + //enable checkboxes + tree.enableCheckBoxes(1); + tree.loadXML("tree.xml"); + + .... + //check item + tree.setCheck(id,true); + //uncheck item + tree.setCheck(id,false); + //check branch + tree.setSubChecked(id,true); + //uncheck branch + tree.setSubChecked(id,false); + //check item + tree.setCheck(id,true); + //return ids of checked items + var list=tree.getAllChecked(); +</script> + + +

    + + + diff --git a/phpgwapi/js/dhtmlxtree/samples/treeEx24.html b/phpgwapi/js/dhtmlxtree/samples/treeEx24.html new file mode 100644 index 0000000000..614386600f --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/treeEx24.html @@ -0,0 +1,109 @@ + + + + + DHTML Tree samples. dhtmlXTree - Easy skinable design + + + +

    Easy skinable design

    + + + + + + + + + + + + +
    + + +

    +
    + +
    + + Set design 1
    + Set design 2
    + Set design 3
    + Set design 4
    + + +
     
    +
    + +<div id="treeboxbox_tree" style="width:200;height:200"></div> +<script> + tree=new dhtmlXTreeObject("treeboxbox_tree","100%","100%",0); + tree.setImagePath("../imgs/"); + tree.loadXML("tree.xml"); + + // enable/disable tree lines + tree.enableTreeLines(false); + // set plus images + tree.setImageArrays("plus","","","","open2.gif"); + //set minus images + tree.setImageArrays("minus","","","","close2.gif"); + //set default node images + tree.setStdImages("book.gif","books_open.gif","books_close.gif"); + +</script> + + + +

    + + + + diff --git a/phpgwapi/js/dhtmlxtree/samples/treeEx31.html b/phpgwapi/js/dhtmlxtree/samples/treeEx31.html new file mode 100644 index 0000000000..79fe889188 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/treeEx31.html @@ -0,0 +1,66 @@ + + + + + DHTML Tree samples. dhtmlXTree - Autoloading from XML + + + +

    Autoloading from XML

    + + + + + + + + + + + + +
    + + +
    +
    + Tree has unlimmited level count. Each new level loaded from asp script. + + + + + + + +
     
    +
    + +<div id="treeboxbox_tree" style="width:200;height:200"></div> +<script> + tree=new dhtmlXTreeObject("treeboxbox_tree","100%","100%",0); + tree.setImagePath("../imgs/"); + //link tree to asp script + tree.setXMLAutoLoading("xml.php"); + + //load first level of tree + tree.loadXML("xml.asp?id=0"); +</script> + + +

    + + + diff --git a/phpgwapi/js/dhtmlxtree/samples/treeEx32.html b/phpgwapi/js/dhtmlxtree/samples/treeEx32.html new file mode 100644 index 0000000000..24ee99d1f5 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/treeEx32.html @@ -0,0 +1,72 @@ + + + + + DHTML Tree samples. dhtmlXTree - Drag and Drop + + + +

    Drag and Drop

    + + + + + + + + + + +
    + +

    +
    + +
    + +

    +
    + +
    + Drag&Drop works in each tree and between trees too. +
    + +<div id="treeboxbox_tree" style="width:200;height:200"></div> +<script> + tree=new dhtmlXTreeObject("treeboxbox_tree","100%","100%",0); + tree.setImagePath("../imgs/"); + + //enable Drag&Drop + tree.enableDragAndDrop(1); + //set my Drag&Drop handler + tree.setDragHandler(myDragHandler); + tree.loadXML("tree.xml"); + + function myDragHandler(idFrom,idTo){ + //if we return false then drag&drop be aborted + return true; + } +</script> + + + +

    + + + diff --git a/phpgwapi/js/dhtmlxtree/samples/xml.asp b/phpgwapi/js/dhtmlxtree/samples/xml.asp new file mode 100644 index 0000000000..4c5b2c9525 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/xml.asp @@ -0,0 +1,14 @@ + +<% +Response.ContentType="text/xml" + +Dim url_id +Dim intCurrPos +url_var=request.querystring("id") + +Response.Write "" + For intCurrPos = 0 To 4 + Response.Write "" + Next +Response.Write "" +%> diff --git a/phpgwapi/js/dhtmlxtree/samples/xml.php b/phpgwapi/js/dhtmlxtree/samples/xml.php new file mode 100644 index 0000000000..c9da831420 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/samples/xml.php @@ -0,0 +1,10 @@ +"); +if (isset($_GET["id"])) + $url_var=$_GET["id"]; +else + $url_var=0; +print(""); + for ($inta=0; $inta<4; $inta++) + print(""); +print(""); +?> diff --git a/phpgwapi/js/dhtmlxtree/src/dhtmlXCommon.js b/phpgwapi/js/dhtmlxtree/src/dhtmlXCommon.js new file mode 100644 index 0000000000..61bfc494ab --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/src/dhtmlXCommon.js @@ -0,0 +1,250 @@ + /** + * @desc: xmlLoader object + * @type: private + * @param: funcObject - xml parser function + * @param: object - jsControl object + * @topic: 0 + */ +function dtmlXMLLoaderObject(funcObject, dhtmlObject){ + this.xmlDoc=""; + this.onloadAction=funcObject||null; + this.mainObject=dhtmlObject||null; + return this; +}; + /** + * @desc: xml loading handler + * @type: private + * @param: dtmlObject - xmlLoader object + * @topic: 0 + */ + dtmlXMLLoaderObject.prototype.waitLoadFunction=function(dhtmlObject){ + this.check=function (){ + if (!dhtmlObject.xmlDoc.readyState) dhtmlObject.onloadAction(dhtmlObject.mainObject); + else { + if (dhtmlObject.xmlDoc.readyState != 4) return false; + else dhtmlObject.onloadAction(dhtmlObject.mainObject); } + }; + return this.check; + }; + + /** + * @desc: return XML top node + * @param: tagName - top XML node tag name (not used in IE, required for Safari and Mozilla) + * @type: private + * @returns: top XML node + * @topic: 0 + */ + dtmlXMLLoaderObject.prototype.getXMLTopNode=function(tagName){ + if (this.xmlDoc.responseXML) { var temp=this.xmlDoc.responseXML.getElementsByTagName(tagName); var z=temp[0]; } + else var z=this.xmlDoc.documentElement; + if (z) return z; + alert("Incorrect XML"); + return document.createElement("DIV"); + }; + + /** + * @desc: load XML + * @type: private + * @param: filePath - xml file path + * @topic: 0 + */ + dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString){ + try + { + var parser = new DOMParser(); + this.xmlDoc = parser.parseFromString(xmlString,"text/xml"); + } + catch(e){ + this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + this.xmlDoc.loadXML(xmlString); + } + this.onloadAction(this.mainObject); + } + dtmlXMLLoaderObject.prototype.loadXML=function(filePath){ + try + { + this.xmlDoc = new XMLHttpRequest(); + this.xmlDoc.open("GET",filePath,true); + this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this); + this.xmlDoc.send(null); + } + catch(e){ + + if (document.implementation && document.implementation.createDocument) + { + this.xmlDoc = document.implementation.createDocument("", "", null); + this.xmlDoc.onload = new this.waitLoadFunction(this); + } + else + { + this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + this.xmlDoc.async="true"; + this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this); + } + this.xmlDoc.load(filePath); + } + }; + + /** + * @desc: Call wrapper + * @type: private + * @param: funcObject - action handler + * @param: dhtmlObject - user data + * @returns: function handler + * @topic: 0 + */ +function callerFunction(funcObject,dhtmlObject){ + this.handler=function(e){ + if (!e) e=event; + funcObject(e,dhtmlObject); + return true; + }; + return this.handler; +}; + + /** + * @desc: Calculate absolute position of html object + * @type: private + * @param: htmlObject - html object + * @topic: 0 + */ +function getAbsoluteLeft(htmlObject){ + var xPos = htmlObject.offsetLeft; + var temp = htmlObject.offsetParent; + while (temp != null) { + xPos += temp.offsetLeft; + temp = temp.offsetParent; + } + return xPos; + } + /** + * @desc: Calculate absolute position of html object + * @type: private + * @param: htmlObject - html object + * @topic: 0 + */ +function getAbsoluteTop(htmlObject) { + var yPos = htmlObject.offsetTop; + var temp = htmlObject.offsetParent; + while (temp != null) { + yPos += temp.offsetTop; + temp = temp.offsetParent; + } + return yPos; + } + + +/** +* @desc: Convert string to it boolean representation +* @type: private +* @param: inputString - string for covertion +* @topic: 0 +*/ +function convertStringToBoolean(inputString){ if (typeof(inputString)=="string") inputString=inputString.toLowerCase(); + switch(inputString){ + case "1": + case "true": + case "yes": + case "y": + case 1: + case true: + return true; + break; + default: return false; + } +} + +/** +* @desc: find out what symbol to use as url param delimiters in further params +* @type: private +* @param: str - current url string +* @topic: 0 +*/ +function getUrlSymbol(str){ + if(str.indexOf("?")!=-1) + return "&" + else + return "?" + } + + +function dhtmlDragAndDropObject(){ + this.lastLanding=0; + this.dragNode=0; + this.dragStartNode=0; + this.dragStartObject=0; + this.tempDOMU=null; + this.tempDOMM=null; + this.waitDrag=0; + if (window.dhtmlDragAndDrop) return window.dhtmlDragAndDrop; + window.dhtmlDragAndDrop=this; + return this; + }; + + dhtmlDragAndDropObject.prototype.removeDraggableItem=function(htmlNode){ + htmlNode.onmousedown=null; + htmlNode.dragStarter=null; + htmlNode.dragLanding=null; + } + dhtmlDragAndDropObject.prototype.addDraggableItem=function(htmlNode,dhtmlObject){ + htmlNode.onmousedown=this.preCreateDragCopy; + htmlNode.dragStarter=dhtmlObject; + this.addDragLanding(htmlNode,dhtmlObject); + } + dhtmlDragAndDropObject.prototype.addDragLanding=function(htmlNode,dhtmlObject){ + htmlNode.dragLanding=dhtmlObject; + } + dhtmlDragAndDropObject.prototype.preCreateDragCopy=function(e) + { + if (window.dhtmlDragAndDrop.waitDrag) { + window.dhtmlDragAndDrop.waitDrag=0; + document.body.onmouseup=window.dhtmlDragAndDrop.tempDOMU; + document.body.onmousemove=window.dhtmlDragAndDrop.tempDOMM; + return; + } + + window.dhtmlDragAndDrop.waitDrag=1; + window.dhtmlDragAndDrop.tempDOMU=document.body.onmouseup; + window.dhtmlDragAndDrop.tempDOMM=document.body.onmousemove; + window.dhtmlDragAndDrop.dragStartNode=this; + window.dhtmlDragAndDrop.dragStartObject=this.dragStarter; + document.body.onmouseup=window.dhtmlDragAndDrop.preCreateDragCopy; + document.body.onmousemove=window.dhtmlDragAndDrop.callDrag; + }; + dhtmlDragAndDropObject.prototype.callDrag=function(e){ + if (!e) e=window.event; + dragger=window.dhtmlDragAndDrop; + if (!dragger.dragNode) { + dragger.dragNode=dragger.dragStartObject._createDragNode(dragger.dragStartNode); + document.body.appendChild(dragger.dragNode); + document.body.onmouseup=dragger.stopDrag; + dragger.waitDrag=0; + } + + dragger.dragNode.style.left=e.clientX+15+document.body.scrollLeft; dragger.dragNode.style.top=e.clientY+3+document.body.scrollTop; + + if (!e.srcElement) var z=e.target; else z=e.srcElement; + dragger.checkLanding(z); + } + dhtmlDragAndDropObject.prototype.checkLanding=function(htmlObject){ + if (htmlObject.dragLanding) { if (this.lastLanding) this.lastLanding.dragLanding._dragOut(this.lastLanding); + this.lastLanding=htmlObject; this.lastLanding=this.lastLanding.dragLanding._dragIn(this.lastLanding,this.dragStartNode); } + else { + if (htmlObject.tagName!="BODY") this.checkLanding(htmlObject.parentNode); + else { if (this.lastLanding) this.lastLanding.dragLanding._dragOut(this.lastLanding); this.lastLanding=0; } + } + } + dhtmlDragAndDropObject.prototype.stopDrag=function(e){ + dragger=window.dhtmlDragAndDrop; + if (dragger.lastLanding) dragger.lastLanding.dragLanding._drag(dragger.dragStartNode,dragger.dragStartObject,dragger.lastLanding); + dragger.lastLanding=0; + dragger.dragNode.parentNode.removeChild(dragger.dragNode); + dragger.dragNode=0; + dragger.dragStartNode=0; + dragger.dragStartObject=0; + document.body.onmouseup=dragger.tempDOMU; + document.body.onmousemove=dragger.tempDOMM; + dragger.tempDOMU=null; + dragger.tempDOMM=null; + dragger.waitDrag=0; + } \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxtree/src/dhtmlXTree.js b/phpgwapi/js/dhtmlxtree/src/dhtmlXTree.js new file mode 100644 index 0000000000..83ea889d12 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/src/dhtmlXTree.js @@ -0,0 +1,1878 @@ +/*_TOPICS_ +@0:Initialization +@1:Selection control +@2:Add/delete +@3:Private +@4:Node/level control +@5:Checkboxes/user data manipulation +@6:Appearence control +*/ + +/** +* @desc: tree constructor +* @param: htmlObject - parent html object or id of parent html object +* @param: width - tree width +* @param: height - tree height +* @param: rootId - id of virtual root node +* @type: public +* @topic: 0 +*/ +function dhtmlXTreeObject(htmlObject, width, height, rootId){ + if (typeof(htmlObject)!="object") + this.parentObject=document.getElementById(htmlObject); + else + this.parentObject=htmlObject; + this.mytype="tree"; + this.width=width; + this.height=height; + this.rootId=rootId; + + this.hfMode=0; + this.nodeCut=0; + this.XMLsource=0; + this.XMLloadingWarning=0; + this._globalIdStorage=new Array(); + this.globalNodeStorage=new Array(); + this._globalIdStorageSize=0; + this.treeLinesOn=true; + this.checkFuncHandler=0; + this.openFuncHandler=0; + this.dblclickFuncHandler=0; + this.tscheck=false; + this.timgen=true; + + this.imPath="treeGfx/"; + this.checkArray=new Array("iconUnCheckAll.gif","iconCheckAll.gif","iconCheckGray.gif"); + this.lineArray=new Array("line2.gif","line3.gif","line4.gif","blank.gif","blank.gif"); + this.minusArray=new Array("minus2.gif","minus3.gif","minus4.gif","minus.gif","minus5.gif"); + this.plusArray=new Array("plus2.gif","plus3.gif","plus4.gif","plus.gif","plus5.gif"); + this.imageArray=new Array("leaf.gif","folderOpen.gif","folderClosed.gif"); + this.cutImg= new Array(0,0,0); + this.cutImage="but_cut.gif"; + + this.dragger= new dhtmlDragAndDropObject(); +//create root + this.htmlNode=new dhtmlXTreeItemObject(this.rootId,"",0,this); + this.htmlNode.htmlNode.childNodes[0].childNodes[0].style.display="none"; + this.htmlNode.htmlNode.childNodes[0].childNodes[0].childNodes[0].className="hiddenRow"; +//init tree structures + this.allTree=this._createSelf(); + this.allTree.appendChild(this.htmlNode.htmlNode); + this.allTree.onselectstart=new Function("return false;"); + this.XMLLoader=new dtmlXMLLoaderObject(this._parseXMLTree,this); + + this.dragger.addDragLanding(this.allTree,this); + return this; +}; + +/** +* @desc: tree node constructor +* @param: itemId - node id +* @param: itemText - node label +* @param: parentObject - parent item object +* @param: treeObject - tree object +* @param: actionHandler - onclick event handler(optional) +* @param: mode - do not show images +* @type: private +* @topic: 0 +*/ +function dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode){ + this.htmlNode=""; + this.acolor=""; + this.scolor=""; + this.tr=0; + this.childsCount=0; + this.tempDOMM=0; + this.tempDOMU=0; + this.dragSpan=0; + this.dragMove=0; + this.span=0; + this.closeble=1; + this.childNodes=new Array(); + + this.checkstate=0; + this.treeNod=treeObject; + this.label=itemText; + this.parentObject=parentObject; + this.actionHandler=actionHandler; + this.images=new Array(treeObject.imageArray[0],treeObject.imageArray[1],treeObject.imageArray[2]); + + + this.id=treeObject._globalIdStorageAdd(itemId,this); + if (this.treeNod.checkBoxOff ) this.htmlNode=this.treeNod._createItem(1,this,mode); + else this.htmlNode=this.treeNod._createItem(0,this,mode); + this.htmlNode.objBelong=this; + return this; + }; + + +/** +* @desc: register node +* @type: private +* @param: itemId - node identificator +* @param: itemObject - node object +* @topic: 3 +*/ + dhtmlXTreeObject.prototype._globalIdStorageAdd=function(itemId,itemObject){ + if (this._globalIdStorageFind(itemId)) { d=new Date(); itemId=d.valueOf()+"_"+itemId; return this._globalIdStorageAdd(itemId,itemObject); } + this._globalIdStorage[this._globalIdStorageSize]=itemId; + this.globalNodeStorage[this._globalIdStorageSize]=itemObject; + this._globalIdStorageSize++; + return itemId; + }; +/** +* @desc: unregister node +* @type: private +* @param: itemId - node identificator +* @topic: 3 +*/ + dhtmlXTreeObject.prototype._globalIdStorageSub=function(itemId){ + for (var i=0; i1) beforeNode=parentObject.htmlNode.childNodes[0].childNodes[1].nodem.previousSibling; break; + } + }; + }; + + if ((beforeNode)&&(beforeNode.tr.nextSibling)) + parentObject.htmlNode.childNodes[0].insertBefore(tr,beforeNode.tr.nextSibling); + else + parentObject.htmlNode.childNodes[0].appendChild(tr); + + if (this.XMLsource) if ((childs)&&(childs!=0)) Nodes[Count].XMLload=0; else Nodes[Count].XMLload=1; + + Nodes[Count].tr=tr; + tr.nodem=Nodes[Count]; + + if (parentObject.itemId==0) + tr.childNodes[0].className="hitemIddenRow"; + + if (optionStr) { + var tempStr=optionStr.split(","); + for (var i=0; i=2) + { + this._correctPlus(Nodes[parentObject.childsCount-2]); + this._correctLine(Nodes[parentObject.childsCount-2]); + } + if (parentObject.childsCount!=2) this._correctPlus(Nodes[0]); + if (this.tscheck) this._correctCheckStates(parentObject); + } + + return Nodes[Count]; +}; + +/** +* @desc: create new child node +* @type: public +* @param: parentId - parent node id +* @param: itemId - new node id +* @param: itemText - new node text +* @param: itemActionHandler - function fired on node select event (optional) +* @param: image1 - image for node without childrens; (optional) +* @param: image2 - image for closed node; (optional) +* @param: image3 - image for opened node (optional) +* @param: optionStr - options string (optional) +* @param: childs - node childs flag (for dynamical trees) (optional) +* @topic: 2 +*/ + dhtmlXTreeObject.prototype.insertNewItem=function(parentId,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,childs){ + var parentObject=this._globalIdStorageFind(parentId); + if (!parentObject) return (-1); + return this._attachChildNode(parentObject,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,childs); + }; +/** +* @desc: parse xml +* @type: private +* @param: dhtmlObject - jsTree object +* @param: node - top XML node +* @param: parentId - parent node id +* @param: level - level of tree +* @topic: 2 +*/ + dhtmlXTreeObject.prototype._parseXMLTree=function(dhtmlObject,node,parentId,level){ + dhtmlObject.XMLloadingWarning=1; + var nodeAskingCall=""; + if (!node) { + node=dhtmlObject.XMLLoader.getXMLTopNode("tree"); + parentId=node.getAttribute("id"); + } + + for(var i=0; i0))) { if (list) list+=","+htmlNode.id; else list=htmlNode.id; } + var j=htmlNode.childsCount; + for (var i=0; i0) + { + temp=temp.nextSibling; + if ((!temp)||(!temp.nodem)) return 0; + index--; + } + return temp.nodem.id; + }; +/** +* @desc: retun child node identificator by index +* @type: public +* @param: itemId - parent node identificator +* @param: index - index of child node +* @topic: 1 +*/ + dhtmlXTreeObject.prototype.getChildItemIdByIndex=function(itemId,index){ + var sNode=this._globalIdStorageFind(itemId); + if (!sNode) return (0); + if (this.hasChildren(itemId) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/phpgwapi/js/dhtmlxtree/tree2.xml b/phpgwapi/js/dhtmlxtree/tree2.xml new file mode 100644 index 0000000000..6d31941c87 --- /dev/null +++ b/phpgwapi/js/dhtmlxtree/tree2.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/phpgwapi/templates/default/images/dhtmlxtree/blank.gif b/phpgwapi/templates/default/images/dhtmlxtree/blank.gif new file mode 100644 index 0000000000000000000000000000000000000000..d7ae4067134ffb090de8adafdeaf575fe11a411d GIT binary patch literal 56 zcmZ?wbhEHb6k-r!XkcLY4+e@qSy)9F7#VaJfB+=Jz{KCvzw-23{>5{)-0I$ZZ;m*F FH30ie6G8w0 literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/book.gif b/phpgwapi/templates/default/images/dhtmlxtree/book.gif new file mode 100644 index 0000000000000000000000000000000000000000..b0ce63a9d1cb3db01408111118b0be965b81a214 GIT binary patch literal 184 zcmZ?wbhEHb6k-r!*v!DdkoNz~nKLGv|7)%J4+N5>|2+=;ciQ{k=g5EmqyH_p{nuX) z5(g@T0L7mytRf6N3_2h#$P5OS)Cng&SFdGlC@PdZy-4JaE8l_z8pj=j)HOD(O;kvc zS+%8BnV~6dd6sNW#}YS<7|H&&7Lyg40xfP!OaxPm);P&0-DYLs5Hd*c**EK=aA|bK cwiBmIC*Pj?zTstoY-U4~L~Uyak066J04g9!djJ3c literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/book_titel.gif b/phpgwapi/templates/default/images/dhtmlxtree/book_titel.gif new file mode 100644 index 0000000000000000000000000000000000000000..31c916d065008d1acf7b3e592fcb2429bbc4fc1b GIT binary patch literal 155 zcmZ?wbhEHb6k-r!*v!E2|NsB5KmLFC`v3IZf1A(!o3rn4NdI5%gg-!W25dm_Ckv|x z0|$c+ND^cQ1B-{iNzc`LEnc5p`ct8!^+{o)i&ss1o>85V}tW&Xe!G`o7 piaZTViaL#b_?lOgSS?oMJFT-IbOFcygL&yaoD&3}d9pBA0|4dAJemLi literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/books_close.gif b/phpgwapi/templates/default/images/dhtmlxtree/books_close.gif new file mode 100644 index 0000000000000000000000000000000000000000..e4bd9d6fe280bc61c2941223a06b926db88a6bb1 GIT binary patch literal 189 zcmZ?wbhEHb6k-r!*v!DdkoNz~nKKTj{{w+!$=?f~{@(xo_wo0?H@^M_iU8%&fZ|UU zRuKkH1|5(%$P5OSEQ6DttCzC8*sCv@&?vFQF(Te#TKZJJMTKYBFL;oN+k)9|$B%{@(xo_wo0?H@^M_a)I(_K=CIF zs|W)pgAPa>WCjCEhQZ01Tzhv2d2{b)RjgzE;JeTwOl{gKWrgZH+{}zgZ`x8&P!s@X0Jm)ln$REY2(eDpE)+QOGDMDX`MlFE20GD+Q_7OU}<#D9Hz!o0p=H tUs|G&n_rZw#~2zM9N_F5!l3w{JHXS?FA`|Ak)8p&XKrG8DkCF5aDcOK2!rB(?f_3mzeu3fMtTP9p1FzXsf>&a)&Nq9LU;fG literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/close2.gif b/phpgwapi/templates/default/images/dhtmlxtree/close2.gif new file mode 100644 index 0000000000000000000000000000000000000000..94c267d5b921afe8c7157ff4c4f2315167aacd02 GIT binary patch literal 1042 zcmeH`>r0by9L3KbpSfqYYHsRcm9{N6yS$iXUMkVd)YXbLh)N>7QJ5MADpGb+Q`fSK zHIp1=CKQIT5*6$MZ9+-wqA$E4p$!!c%W0ardieF&ztG#x>%-ymJ$z51E+H~1RSYra zZelC26SxVGCdK^Ee%3P<4(tJ}a*WC0kfMghdB7=!jRpxtDFarI63%Z^%qHVi^{Qqu z%u+btWwdgJ9EyZtFbwWTL4;i>1lUi9NgUj#sKE$yNzoezrwsFYu!*qd3Q2!1X$m5N z7#OtVWih`OMz3TE?q)OJnlvMgnzmXM2|=p}g$!IBhCD7m7!?`b?Q)RO+szsL&bIg; z3LFFKQfPOzv|qjTdQ(hTF!1j#}O(5C}0o^v|3e-I^Nv$$8$990Z(Kw%Rs){9*V*4!sHhV z>CN;^za4mU)MJmyXV4Xl0XgPI?u_h1S{Uyn2S4f9&Gr1fg=H6>a3}wo8f%LvIWG87 zK$E}1fBkaiRj8g~d>{CV`nQnccEq8NqDYdfDqpf$q z6r@WFuN%@PT@2t+_M}aYHFiJUfslC9iqI~;qUvf9BuP~j!F-pb=8USW!RN9>bYrd8 z-m-*4bpH;&;qr#n0*Ut2jO+bs`k-sL&=_wtZx*Px)F{@OmkXI`v2K5&v vab;A7@)_?!a^0oqoEO(ErLXx|FM1j`PkD7Kq5$ox6>DN8k=`P$h{3i$d_W$2 literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/folderClosed.gif b/phpgwapi/templates/default/images/dhtmlxtree/folderClosed.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ebe3c977b5491a71be006e2ac49df7f680ffd4d GIT binary patch literal 135 zcmZ?wbhEHb6k-r!Si}GV|If@kb0%%(OosRG-~azV^Z)-d|NsA2{K>*9!obd;15yD} z%fReYvFpyif?i9`4`?y4AuZc+B|;% literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/folderOpen.gif b/phpgwapi/templates/default/images/dhtmlxtree/folderOpen.gif new file mode 100644 index 0000000000000000000000000000000000000000..c193e869f19b0553efa0244e817e413a2c34959c GIT binary patch literal 139 zcmZ?wbhEHb6k-r!Si}GV|If^vIg{c4|Nm#sr2YRt6UYDxD*j|)6=7gw&;h9csbyde z$k=t~--J%f$3n{KiG@G!I|N>0n0L#8VS44hqpNyMT#u}IxYto|4a>}PUtj(#ICy8m ob8ZfX^I;z)R;*jJcHXvM)mo*dQV+5vW}i>*t~%SN!oXk+0BBM?ssI20 literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/iconCheckAll.gif b/phpgwapi/templates/default/images/dhtmlxtree/iconCheckAll.gif new file mode 100644 index 0000000000000000000000000000000000000000..d90899259bbd5ad85adf03a42f221d53a46af70c GIT binary patch literal 123 zcmZ?wbhEHb6krfwSj5V}XI-@7)K}TECkzY>|G@yr00PCIEQ|~ctPDCJ4oEEnvqQwL zJK6?b9&$S@+E=kCBuL~ TzHvnfS82~4oC$^Ed#Sd z#;!ZO0#;(LL$3NcRGr{cXL7b=@OKYU^D32z*|pxIM%{GP4(?K>gYVs(jy9c$U)bSj UWo*)5?7^+7D(z~FyH!hZ*a{|OHNH5mT? z`2S_c(ofgU{x1ml|KY=}ZR;PcU-&?q=l_on|1TW)uwcUfhJ+0Q3?EJ$`2XO-hZz(8 zpV;sqz~O@e!|oGTJ|5fl-$LL*fWzOmqyrKRhgYuopW*O-M#J5M`#)$fyuEnh|BVYT zuU~iow63GzLxjWMKy9FVfG!yYqai?_5K#Qd!pOj2z@P)N4wNStI3_S8a>#gWSa7hJ zomC^|M1W#LBNKz=wwGg}3zMjQc+r;`N{x&xY+`?SG7FDh<&p^4 pap9Ec0d4^kgJJlMcs4FF*wlyCq5 literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/iconJob.gif b/phpgwapi/templates/default/images/dhtmlxtree/iconJob.gif new file mode 100644 index 0000000000000000000000000000000000000000..c073898e9925a8c52156bf3945843938785dbc0c GIT binary patch literal 126 zcmZ?wbhEHb6krfwSi}GV|Nk=_IBV`;R^9~i}S#!2CFdiu56`8%^_c243<6C1AEL2_?*(81J2odV- VpDz@UkhbKC*0BfL8KRsF)&O}+Ee-$x literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/iconReport.gif b/phpgwapi/templates/default/images/dhtmlxtree/iconReport.gif new file mode 100644 index 0000000000000000000000000000000000000000..bdcc6a54da2f0b7f53a67355007678b90b6eba26 GIT binary patch literal 125 zcmZ?wbhEHb6krfwSi}GV|Nk=_IBRDjenFuP>z zy0ebKhMl9cXjWD3GKT_J@zl;~>`6JooCP{AJPO<{3iV}kUK!j=Xz+g8c4%Rdr3W8Z Xz=}_s8EqD~s+Ar*l(Daig~1vCUZp9f literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/iconTimeRecordsEdit.gif b/phpgwapi/templates/default/images/dhtmlxtree/iconTimeRecordsEdit.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ca8341d26c1389fc614299867b663d0caac7073 GIT binary patch literal 140 zcmZ?wbhEHb6krfwSi}GV2M!$g|NnnOL&N|73=9nnKsHcN@h1zb2m>2~4oC$^Edz64 z#;Oay1y~eiYK+cs>2deEMM~UAQC6FqZcxG#cyXI-@7)K}TEC;!2K0R|L*vM@3*urTO=1VCyTm`yx(-O)Di zvXI+h(Y}gBB0(Z=TE?Wi>3uQ}*XD5YuULKPtM&8mr_OJgrr@9>mF+Mw`DBis5Q8-U Du<#}? literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/item.gif b/phpgwapi/templates/default/images/dhtmlxtree/item.gif new file mode 100644 index 0000000000000000000000000000000000000000..56c0221a0dac2681189b8c818c16298d49b58251 GIT binary patch literal 1053 zcmd^;`%hD606@QcZ)+cx(qf$jeAEX~j14S4q7Yp10RfF70;>o@MW)e4n@kLrU|O6Y zLc}@+Mi4=&Swl#eF>08GM`T@*2%98O!+89KWG! zi61YEOa8SwtshdWs-q zQN+&-HB#M$C`tue_M-82cD%z~&PCmMaI%-Wy~|yU^{N0p_LHrU^ECTkvkQ5w!SjOA zd~W!ra;}VrmK>3eL(#WgQJ)==vv)EG*9k7&U0_Pb>5IaMrD8e{ps>$*6hy~Nfrb<| zF5JUeQ{kR0uAy}JmE1f`eh@CVCTfX^F#z*?E!tJ>*vP5ddkP5)b$0$NF)=t{i ziTrlT)+X<2R>@Wq+a1V%|j3(?*#Rv6fMp;%K4$*l3?8yvMN5Rm$SZU z>REN9?|jg>8P+E)lycdjdU|HitCg}o`_wUjjBA;eozW|C$Uo<)j6qjd%&PI8Ow4;B zcJX=&biQFnn$UlM|0U}`b1(qARSc5oyLoWZrpFt{RXVd+xQXZ7>oY?Bg8UUc+H+Lie|x9hq5A&&`}aTI^>6FR zJCt$g*?#pd1>aKd>u;~JyRivR;^uPZQkWqj+amGj-=CyC(J2#?SRGkzKD~MV^*O1j z!jj!0vZWHtrp(JvFWGu=3x6MbLRZ46S0`Q9+D6R?fBXG))#8fmsTt3|J!3X!?mW{x z=jt@s8RCLDdV%Cwq)Y;VP}wJxcTk|gCYZ?KEr~`b2ww!7V%Ye zXXXgy@qPaFS#GN2oo9C*e|Yrj`%CpoWwRtxi)DryRVpDZ!Ayos%sC7)6U7|YSh=sY z*PEfPlp@cj%ce3%mZh0NtXlBE(>?FMycaIzx5zd-dh1B}p`xdspEAfWaQd-Jb&9M$ zzUtk#ce@^KlkO3F`u-_@8jnJY6r%*g<+tZkrzICG&JEiZz!Aj88^iS<3>ZcM-Vjjy z$->CMFrPsOqzaTL7&yK$*mM4AS$wp~kmKJOi4z}$Sy|^PRdqdn!ra*Ao97af#1VW% zqCt=A&X=RY{Pv9VzF15=Dy;0y#^UwKB`JV`rARH-;NpScmKh2YDv|^moZB_bZX8f_ zJ~??Vi`$heA1^$g$mO5-spY|uLzgGARM_nN5V$a4Nr#in$rBGfFVB+F7AbIKVQp1+ z%`Gtye5iT3P0`h6?}{rYg_j5kElIF^tQpAY)NQl(qLV5ouLA#`hz}<0K8^m$YbuX*~6o0a?iZC!S=m6P3Ss?}nCW$HiD>+~DyLOwL V>$-Y2=G*?-P>rZmH#t@YYXBh07Qz4k literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/line2.gif b/phpgwapi/templates/default/images/dhtmlxtree/line2.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2d7bdd5065ad01d005de788ffceb90e7ba39aab GIT binary patch literal 70 zcmZ?wbhEHb6k-r!n8?7;($exD3>X*~6o0a?iZC!S=m6P3Ss?}nCh;l#D>+~DyLOwL V>$-Y2<`-MpBadm%W{NOa0{{&)7qb8W literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/line3.gif b/phpgwapi/templates/default/images/dhtmlxtree/line3.gif new file mode 100644 index 0000000000000000000000000000000000000000..d718be218facdbdf057fc5e92b5b86580b131071 GIT binary patch literal 73 zcmZ?wbhEHb6k-r!n8?7;($exD3>X*~6o0a?iZC!S=m6P3Ss?}nCaEd?D>+~DyLOwL X>$-Y2<`-Mp1+}o0%!M~AMHs9BQ{)(f literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/line4.gif b/phpgwapi/templates/default/images/dhtmlxtree/line4.gif new file mode 100644 index 0000000000000000000000000000000000000000..29285e5986c766d8507e3bb295c38f2337577bc9 GIT binary patch literal 69 zcmZ?wbhEHb6k-r!n8?7;($exD3>X*~6o0a?iZC!S=m6P3Ss?}nCb22~D^I`WUp!|D UQ=##?cSXM&7e49rU}Ufc00XHPu>b%7 literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/magazines_close.gif b/phpgwapi/templates/default/images/dhtmlxtree/magazines_close.gif new file mode 100644 index 0000000000000000000000000000000000000000..513c01a0069b49e65f06e8eb46add5af6d842e30 GIT binary patch literal 195 zcmZ?wbhEHb6k-r!*v!Ci&PMm^&1;wao&J9Rb|*LS&4!gf9^L={|Nr*~_kO;3_U+D1 zAe#XRDE?$&6=C3J&;f~o%wS+CC^+f4dMVS3z3VL&G^s36jEJ|GbTV>j`=SkM|^7ZZpf>wPBWX!fc10+0CsAOAT)@gfuOi na4vCcL!4;9bRM?EiZrQOk^06^3-R{yF7Y~6xBkguf(+IG_D@l_ literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/magazines_open.gif b/phpgwapi/templates/default/images/dhtmlxtree/magazines_open.gif new file mode 100644 index 0000000000000000000000000000000000000000..fcda411c7927e5a09487a5906ce4d67faaae1742 GIT binary patch literal 190 zcmZ?wbhEHb6k-r!*v!Ci&PMm^&1;wao&J9Rb|*LS&4!gf9^L={|Nr*~_kO;3_U+D1 zAe#XRDE?$&6=C3J&;f~o%wS;2E;zZ9W$z9-Z`S>X6ziBi_%5^vQ=7I*S)uw4H#66y zH*Kk_E$-?)Y-SYgN<4Jomu%4?*@g#}3<)01LKiQ^@H4uUShDh{C^}T+1f1YX-y*so iXZmA}i8<{YCqBq(8s&vZYBa^RX~e5{W%LR%SOWlR-At7L literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/minus.gif b/phpgwapi/templates/default/images/dhtmlxtree/minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..ef04a54696e17442f7d3a858b18e2da9db1c2e34 GIT binary patch literal 85 zcmZ?wbhEHb6k-r!n8?8J|NsA%mKFvuL-8jIs|W)#gAR}jloeuNU{agYzw-23{>5Bd lu8B3=Q%KlX>BCkwzhTj{h;`hYUHRJn(^Q}S;uB@C1^}ss9ftq_ literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/minus2.gif b/phpgwapi/templates/default/images/dhtmlxtree/minus2.gif new file mode 100644 index 0000000000000000000000000000000000000000..0372294cb98eb287dd2f3be297f179f355ec7e35 GIT binary patch literal 92 zcmZ?wbhEHb6k-r!n8*ME|NsAQX=wqHia%LcMHrYFbU>mYc?KrkIsGd&U-P?nmvnZ2 p6khn-AacIA)*X&K#six&gS|3d%}MULAzznL$I8Ri-p0gW4FF>GA6ozb literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/minus3.gif b/phpgwapi/templates/default/images/dhtmlxtree/minus3.gif new file mode 100644 index 0000000000000000000000000000000000000000..d928af6394a83a9ae7f52b159e81a8bc98dd5b8c GIT binary patch literal 93 zcmZ?wbhEHb6k-r!n8*ME|NsAQX=wqHia%LcMHrYFbU>mYc?KrEIsGd&U-P?nmvnZ2 q6khn-AacIA)*X&K#six&gS|3d%}MULAzznL$9jgf-N~Ji!5RRE<{%jW literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/minus4.gif b/phpgwapi/templates/default/images/dhtmlxtree/minus4.gif new file mode 100644 index 0000000000000000000000000000000000000000..30bc7deecb497409fd1b02e5e0274962f0cf8e28 GIT binary patch literal 90 zcmZ?wbhEHb6k-r!n8*ME|NsAQX=wqHia%LcMHrYFbU>mYc?Kr!IsGe7zvX`{xaFE! o(>=$8eU(0JW%3P+mZ|$KwcNMXsi`>W>7~3od!AT}FfdpH08)w}LjV8( literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/minus5.gif b/phpgwapi/templates/default/images/dhtmlxtree/minus5.gif new file mode 100644 index 0000000000000000000000000000000000000000..e2e30fcb24250b3743eae8c00ec94c54c8bf9cc4 GIT binary patch literal 87 zcmZ?wbhEHb6k-r!n8?8J|NsA%mKFvuL-8jIs|W)#gAR}jloeuNVA7b=zw-23{>PkK nu8B3=Q%KlX>BCkwzhTibb-$&S`_?)&6(>EtbnbgKBZD;n{`w$| literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/minus_ar.gif b/phpgwapi/templates/default/images/dhtmlxtree/minus_ar.gif new file mode 100644 index 0000000000000000000000000000000000000000..4428ba150031442de188ee8ae60993327805a3cc GIT binary patch literal 68 zcmZ?wbhEHb6k-r!n8?7u!^6YC!0`Y7e;}#&lZ91;fr&u}$Og&^F)%QRPU&BH`Yr$B VIVDZisvHg9xY{0h1hFz$0|5Ip5m5jD literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/open2.gif b/phpgwapi/templates/default/images/dhtmlxtree/open2.gif new file mode 100644 index 0000000000000000000000000000000000000000..7d8f2f8ba008f8855fb636eb516bda4290125468 GIT binary patch literal 1045 zcmeHG>q}E{06q71m)DA#&Qyk}o2F9IgYsFCk7a5X5&MvqgxV^d78Y7UuWK`P^stwY zsniTfv6O|VWc0uZ%hD8!QY=!zVPZLzIW=#;R{ufYJ0H%61BY`saQ4PT1&5@HA%?XQ zp+F>X2Oy2IZVB`ZDj4ho0)b05aVy595I8))zIJM)^u;yFm;T(=YA>SqiUU4Hpnydy z0}V%$A9~?qR-VoBDI*q`J;OAMK?bvDbCwBvP$z~ig|U9CCnsp3FKH|e^CxKHhglg6 zSJvDIni*V`z*y&BEk#2NWq9BtsHm|9-+NhXJOg4K6c)#acVThnwPmuUJ)Rovj5oT2 zR6Cf<9MiT_Jx@Z2shpf+MxX5#=H6ST42vDRtuwt(4^VAYUgSqhCyUNxdLRL6Tf=t= zJAv-EO2UC`2bpRodRey%%qE>6EHt?wj|GW9P9|Gb<#i!nE=c?Ml=id0*oh7Gf^uwbtD zAWKv2QltaciN;(O-y40cW0gIrG|8cdzLt)+1vM*0$ABO}s9C$TU?R;vf~9wU59a3v zE$12H4izvlaPeBEU9occxH0KPnVT@FpJ)#xe}Vt_mjz@C3=2l8yA$PVxCpNt9bzM)pD^)l7@Ir3e=Shw0 zbn#UOtuj46-+O<=bUxm4?aDiPiiosaXVYga^3Pfe)SZ(X8UaYOFwpHlBI zV_dD}3bNe#6nxafb%naxZ<36-+gu9GdcUfR?hM)|4=bJ*@v3}x#p9cb!1qp@;j_ib aQ`d1N=IG^N3jD|`P_>>BJf9kd9lrr0iAH_^ literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/plus.gif b/phpgwapi/templates/default/images/dhtmlxtree/plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..abb84bdfbfa5fbd6f188a3a65eec7b077229eef3 GIT binary patch literal 89 zcmZ?wbhEHb6k-r!n8?8J|NsA%mKFvuL-8jIs|W)#gAR}jloeuNVA7h?zw-23{>5Bd pu8B3=Q+S}8BR4s7p_$&y1Do!qcNrAyQ&FEhP4(+PeoY1jYXCC)AI<;( literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/plus2.gif b/phpgwapi/templates/default/images/dhtmlxtree/plus2.gif new file mode 100644 index 0000000000000000000000000000000000000000..ea2816efcea7a32f53f467c4a5fde344d9b4f585 GIT binary patch literal 95 zcmZ?wbhEHb6k-r!n8*ME|NsAQX=wqHia%LcMHrYFbU>mYc?KqfIsGd&U-P?nmvnZ2 t6khn-AX4r@E7$djb5F7y_}z4=XF=Z1-W|#HIde~jv>jP=F@S-=8UPoZC2#-$ literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/plus3.gif b/phpgwapi/templates/default/images/dhtmlxtree/plus3.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd6967e52b92d46da70950f18335896de54c9fcd GIT binary patch literal 96 zcmZ?wbhEHb6k-r!n8*ME|NsAQX=wqHia%LcMHrYFbU>mYc?KrKIsGd&U-P?nmvnZ2 u6khn-AX4r@E7$djb5F7y_}z4=XF=Z1-W|#HIde~jw3#m2_(Fq$!5RQNWhH_D literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/plus4.gif b/phpgwapi/templates/default/images/dhtmlxtree/plus4.gif new file mode 100644 index 0000000000000000000000000000000000000000..185bd9b7047143849a01d2e6e92a24e96abdf335 GIT binary patch literal 94 zcmZ?wbhEHb6k-r!n8*ME|NsAQX=wqHia%LcMHrYFbU>mYc?Kr^IsGe7zvX`{xaFE! s(>=!ryg71{GZ&iaNgmjA_rX#($vOI*UGnWo(^NUnwH#4g%)np`0M5K2f&c&j literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/plus5.gif b/phpgwapi/templates/default/images/dhtmlxtree/plus5.gif new file mode 100644 index 0000000000000000000000000000000000000000..72fe4e577f3a24dc19f47a60f070d55cc0dc1b2a GIT binary patch literal 92 zcmZ?wbhEHb6k-r!n8?8J|NsA%mKFvuL-8jIs|W)#gAR}jloeuNVA7q_zw-23{>PkK su8B3=Q+S}8BR4s7p_$&y1DozXSn9?(N1wAxzCCH0DkoR_K_&)k0Ga0?PXGV_ literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/plus_ar.gif b/phpgwapi/templates/default/images/dhtmlxtree/plus_ar.gif new file mode 100644 index 0000000000000000000000000000000000000000..d2fcaf0120f7b906cf1e933c056b428db2f25078 GIT binary patch literal 70 zcmZ?wbhEHb6k-r!n8?7u!^6YC!0`Y7e;}#&lZ91;fr&u}$Og&^F)%QRPw8KI`Yr$B XIYI%9Z&)0U`&3@{n5GuVz+epk7x)o^ literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/tombs.gif b/phpgwapi/templates/default/images/dhtmlxtree/tombs.gif new file mode 100644 index 0000000000000000000000000000000000000000..25131eeeb695d9df15d55ec74fc9f190684e3f9d GIT binary patch literal 169 zcmZ?wbhEHb6k-r!*v!Ddo$zP#xql)3f7>?v`~Uy{hp+!n-~Bgd-`}r4fV}?<7(nqS z3#$kNCxZ@124n^UOPIk)&((V+y3hXH5zEmKoxmn-5SGX;^ZH8BdaVRI+LEHXXmdY?R5 G7_0&81Vujp literal 0 HcmV?d00001 diff --git a/phpgwapi/templates/default/images/dhtmlxtree/tombs_mag.gif b/phpgwapi/templates/default/images/dhtmlxtree/tombs_mag.gif new file mode 100644 index 0000000000000000000000000000000000000000..b58e29a1e4c06692456a8b882a6afc2b623aa5bc GIT binary patch literal 172 zcmZ?wbhEHb6k-r!*v!Ci*v{_Zf(5@ne!Nm#{NeohS9|wft*CgqYSrH#KmPy!&wv3G zf3mQOFmN*HfMh^sFt9`#ob+71S7P?r${oiP`ji;DT%)F>iB3{3*m9Yh--totYwS7W z#v==~r5f214>e?1&9|J#;; literal 0 HcmV?d00001 diff --git a/xajax.php b/xajax.php new file mode 100644 index 0000000000..69e9e0dfd5 --- /dev/null +++ b/xajax.php @@ -0,0 +1,62 @@ + * + * -------------------------------------------- * + * This program is free software; you can redistribute it and/or modify it * + * under the terms of the GNU General Public License as published by the * + * Free Software Foundation; either version 2 of the License. * + \**************************************************************************/ + + /* $Id$ */ + /* $Source$ */ + + require_once('./phpgwapi/inc/xajax.inc.php'); + + function doXMLHTTP() + { + $numargs = func_num_args(); + if($numargs < 1) + return false; + + $argList = func_get_args(); + $arg0 = array_shift($argList); + + list($appName, $className, $functionName) = explode('.',$arg0); + + if(substr($className,0,4) != 'ajax') + { + // stopped for security reasons + error_log($_SERVER["PHP_SELF"]. ' stopped for security reason. className '.$className.' is not valid. className must start with ajax!!!'); + exit; + } + + $GLOBALS['egw_info'] = array(); + $GLOBALS['egw_info']['flags'] = array( + 'currentapp' => $appName, + 'noheader' => True, + 'disable_Template_class' => True, + ); + + include('./header.inc.php'); + + $sessionid = get_var('sessionid',array('COOKIE','GET')); + $kp3 = get_var('kp3',array('COOKIE','GET')); + + // the session has been created already + // the browser is sending all needed egroupware cookies + if($GLOBALS['phpgw']->session->verify($sessionid,$kp3)) + { + + $ajaxClass = CreateObject("$appName.$className"); + + return call_user_func_array(array(&$ajaxClass, $functionName), $argList ); + + } + } + + $xajax = new xajax($_SERVER["PHP_SELF"]); + $xajax->registerFunction("doXMLHTTP"); + $xajax->processRequests(); +?>