Ignore:
Timestamp:
05/07/05 21:19:31 (15 years ago)
Author:
yermol
Message:

htmlarea.js

. more debugging messages added.
. added HTMLArea.Config.linkReplacementMode which can be either

fullyqualified (the old default behavior) or absolute.


When set to fullyqualified all absolute links (e.g. /somepath) will be changed to fullyqualified URLS (e.g. http://yoursite/somepth).


When set to absolute, all fullyqualified urls back to the current site
will be changed to absolute (e.g. httpyoursite/somepath to /somepath)
making the Xinha generated content portable between sites.


( see HTMLArea.prototype.outwardHtml() )


. bugfix - if plugin .js file has a parse error htmlarea will only try to load

it a configurable number of times before popping up an error message.


backends/backend.php

. initial unified backend created. Requests to this backend are routed

to the corresponding plugin specific backend.php file.


backends/backend_conf.php

. a central server side configuration file has been created for the use

of plugin serverside code.

. all backends hooked into this scheme must include the central config file.

ImageManager?

. modified the config to allow overriding default values.
. default image directory is now xinha/examples/images
. added debugging trace messages which are tagged with the ImageManager? name.
. now uses unified backend.

Linker

. includes central config.
. default directory is now the xinha/examples directory (to avoid scan.php security

problem)

. added debugging trace messages which are tagged with the Linker name.
. links selected from the tree are now displayed in absolute instead of fully qualified

fashion.

. on edit the link that was previously selected is highlighted.
. on edit the selected link is scrolled to if it's outside the viewable area.
. if scan.php returns some kind of error or invalid javascript Linker now pops up

a nice descriptive error message.


. bugfix - same pattern as in loading plugins. If there is some error in loading the directory listing Linker will only attempt it a few times before giving up and

displaying a nice error.


dTree.js

. added clear_s() method to clear the selection
. added getNodeElement() method to return the <a ..> element for a given node.

Location:
branches/unified_backend/plugins
Files:
2 deleted
13 edited

Legend:

Unmodified
Added
Removed
  • branches/unified_backend/plugins/ImageManager/assets/dialog.js

    r43 r121  
    1212// $Id: dialog.js 26 2004-03-31 02:35:21Z Wei Zhuo $ 
    1313 
     14// ------------------------------------------------------------------ 
     15// 
     16// this is a modified duplicate of the /dialog.js in the Xinha root. 
     17// the code seems to make the assumption that only one of these dialogs 
     18// can be open at once (modal). 
     19// 
     20// REVISION HISTORY: 
     21// 
     22// 2005-05-01 YmL: 
     23//      .       added optional editor parameter to Dialog() "constructor". 
     24// 
     25// ------------------------------------------------------------------ 
     26// should be a function, the return handler of the currently opened dialog. 
     27Dialog._return = null; 
     28 
     29// constant, the currently opened dialog 
     30Dialog._modal = null; 
     31 
     32// the dialog will read it's args from this variable 
     33Dialog._arguments = null; 
     34 
     35Dialog.agt = navigator.userAgent.toLowerCase(); 
     36 
     37Dialog.is_ie       = ((Dialog.agt.indexOf("msie") != -1) && (Dialog.agt.indexOf("opera") == -1)); 
     38 
     39// ------------------------------------------------------------------ 
     40 
    1441// Though "Dialog" looks like an object, it isn't really an object.  Instead 
    1542// it's just namespace for protecting global symbols. 
    1643 
    17 function Dialog(url, action, init) { 
    18         if (typeof init == "undefined") { 
     44function Dialog(url, action, init)  
     45  { 
     46        if (typeof init == "undefined")  
     47          { 
    1948                init = window;  // pass this window object by default 
    20         } 
     49          } 
     50 
     51        // optional editor instance parameter that can be propagated through to  
     52        // dialogs. 
     53 
     54        if (typeof Dialog.arguments[3] != "undefined")  
     55          { 
     56                Dialog._editor = Dialog.arguments[3]; 
     57          } 
     58 
    2159        Dialog._geckoOpenModal(url, action, init); 
    22 }; 
    23  
    24 Dialog._parentEvent = function(ev) { 
    25         setTimeout( function() { if (Dialog._modal && !Dialog._modal.closed) { Dialog._modal.focus() } }, 50); 
    26         if (Dialog._modal && !Dialog._modal.closed) { 
     60 
     61  }; // end of Dialog() 
     62 
     63// ---------------------------------------------------------- 
     64 
     65/** 
     66* Dialog._parentEvent() 
     67*/ 
     68 
     69Dialog._parentEvent = function(ev)  
     70  { 
     71        setTimeout(  
     72          function()  
     73            {  
     74                        if (Dialog._modal && !Dialog._modal.closed)  
     75                          {  
     76                                Dialog._modal.focus()  
     77                                }  
     78                        }, 50); // end of setTimeout() call. 
     79                 
     80        if (Dialog._modal && !Dialog._modal.closed)  
     81          { 
    2782                Dialog._stopEvent(ev); 
    28         } 
    29 }; 
    30  
    31  
    32 // should be a function, the return handler of the currently opened dialog. 
    33 Dialog._return = null; 
    34  
    35 // constant, the currently opened dialog 
    36 Dialog._modal = null; 
    37  
    38 // the dialog will read it's args from this variable 
    39 Dialog._arguments = null; 
    40  
    41 Dialog._geckoOpenModal = function(url, action, init) { 
     83          } 
     84 
     85  }; // end of _parentEvent(); 
     86 
     87// ---------------------------------------------------------- 
     88 
     89/** 
     90* Dialog._geckoOpenModal() 
     91*/ 
     92 
     93Dialog._geckoOpenModal = function(url, action, init)  
     94  { 
    4295        //var urlLink = "hadialog"+url.toString(); 
     96 
    4397        var myURL = "hadialog"+url; 
    4498        var regObj = /\W/g; 
     99 
    45100        myURL = myURL.replace(regObj,'_'); 
     101 
    46102        var dlg = window.open(url, myURL, 
    47103                              "toolbar=no,menubar=no,personalbar=no,width=10,height=10," + 
    48104                              "scrollbars=no,resizable=yes,modal=yes,dependable=yes"); 
     105 
    49106        Dialog._modal = dlg; 
    50107        Dialog._arguments = init; 
    51108 
    52109        // capture some window's events 
    53         function capwin(w) { 
     110        function capwin(w)  
     111          { 
    54112                Dialog._addEvent(w, "click", Dialog._parentEvent); 
    55113                Dialog._addEvent(w, "mousedown", Dialog._parentEvent); 
    56114                Dialog._addEvent(w, "focus", Dialog._parentEvent); 
    57         }; 
     115          }; 
     116 
    58117        // release the captured events 
    59         function relwin(w) { 
     118        function relwin(w)  
     119          { 
    60120                Dialog._removeEvent(w, "click", Dialog._parentEvent); 
    61121                Dialog._removeEvent(w, "mousedown", Dialog._parentEvent); 
    62122                Dialog._removeEvent(w, "focus", Dialog._parentEvent); 
    63         }; 
     123          }; 
     124 
    64125        capwin(window); 
     126 
    65127        // capture other frames 
    66128        for (var i = 0; i < window.frames.length; capwin(window.frames[i++])); 
    67         // make up a function to be called when the Dialog ends. 
    68         Dialog._return = function (val) { 
    69                 if (val && action) { 
     129 
     130        // make up a function to be called when the Dialog ends, using the function 
     131        // passed to us. 
     132 
     133        Dialog._return = function (val)  
     134          { 
     135                if (val && action)  
     136                  { 
    70137                        action(val); 
    71                 } 
     138                  } 
     139 
    72140                relwin(window); 
    73141                // capture other frames 
     142 
    74143                for (var i = 0; i < window.frames.length; relwin(window.frames[i++])); 
     144 
    75145                Dialog._modal = null; 
    76         }; 
    77 }; 
    78  
    79  
    80 // event handling 
    81  
    82 Dialog._addEvent = function(el, evname, func) { 
    83         if (Dialog.is_ie) { 
     146 
     147    }; 
     148  }; // end of Dialog._geckoOpenModal 
     149 
     150/** 
     151* event handling 
     152*/ 
     153 
     154Dialog._addEvent = function(el, evname, func)  
     155  { 
     156        if (Dialog.is_ie)  
     157          { 
    84158                el.attachEvent("on" + evname, func); 
    85         } else { 
     159          }  
     160        else  
     161          { 
    86162                el.addEventListener(evname, func, true); 
    87         } 
    88 }; 
    89  
    90  
    91 Dialog._removeEvent = function(el, evname, func) { 
    92         if (Dialog.is_ie) { 
     163    } 
     164  }; 
     165 
     166/** 
     167* _removeEvent() 
     168*/ 
     169 
     170Dialog._removeEvent = function(el, evname, func)  
     171  { 
     172        if (Dialog.is_ie)  
     173          { 
    93174                el.detachEvent("on" + evname, func); 
    94         } else { 
     175          }  
     176        else  
     177          { 
    95178                el.removeEventListener(evname, func, true); 
    96         } 
    97 }; 
    98  
    99  
    100 Dialog._stopEvent = function(ev) { 
    101         if (Dialog.is_ie) { 
     179        } 
     180  }; 
     181 
     182/** 
     183* _stopEvent() 
     184*/ 
     185 
     186Dialog._stopEvent = function(ev)  
     187  { 
     188        if (Dialog.is_ie)  
     189          { 
    102190                ev.cancelBubble = true; 
    103191                ev.returnValue = false; 
    104         } else { 
     192          }  
     193        else  
     194          { 
    105195                ev.preventDefault(); 
    106196                ev.stopPropagation(); 
    107         } 
    108 }; 
    109  
    110 Dialog.agt = navigator.userAgent.toLowerCase(); 
    111 Dialog.is_ie       = ((Dialog.agt.indexOf("msie") != -1) && (Dialog.agt.indexOf("opera") == -1)); 
     197          } 
     198  }; 
     199 
     200Dialog.hello = function() 
     201{ 
     202alert( "HELLO" ); 
     203} 
     204 
     205// END 
  • branches/unified_backend/plugins/ImageManager/assets/editor.js

    r60 r121  
    11/** 
    2  * Functions for the ImageEditor interface, used by editor.php only      
    3  * @author $Author: Wei Zhuo $ 
    4  * @version $Id: editor.js 26 2004-03-31 02:35:21Z Wei Zhuo $ 
    5  * @package ImageManager 
    6  */ 
    7  
    8         var current_action = null; 
    9         var actions = ['crop', 'scale', 'rotate', 'measure', 'save']; 
    10         var orginal_width = null, orginal_height=null; 
    11         function toggle(action)  
    12         { 
    13                 if(current_action != action) 
    14                 { 
    15  
    16                         for (var i in actions) 
    17                         { 
    18                                 if(actions[i] != action) 
     2* @fileoverview Functions for the ImageEditor interface, used by editor.php only         
     3* 
     4* Note "editor" in this file refers to the image editor, not the Xinha editor. 
     5* 
     6* @author $Author: Wei Zhuo $ 
     7* @version $Id: editor.js 26 2004-03-31 02:35:21Z Wei Zhuo $ 
     8* @package ImageManager 
     9*/ 
     10 
     11var current_action = null; 
     12var actions = ['crop', 'scale', 'rotate', 'measure', 'save']; 
     13var orginal_width = null, orginal_height=null; 
     14 
     15// ------------------------------------------------------------------ 
     16 
     17/** 
     18* toggle() 
     19*/ 
     20 
     21function toggle(action)  
     22        { 
     23 
     24        _imgManager.ddt._ddt( "editor.js","24", "toggle(): top with action '" + action + "'" ); 
     25 
     26        if(current_action != action) 
     27                { 
     28 
     29                for (var i in actions) 
     30                        { 
     31                        if(actions[i] != action) 
    1932                                { 
    20                                         var tools = document.getElementById('tools_'+actions[i]); 
    21                                         tools.style.display = 'none'; 
    22                                         var icon = document.getElementById('icon_'+actions[i]); 
    23                                         icon.className = ''; 
     33                                var tools = document.getElementById('tools_'+actions[i]); 
     34                                tools.style.display = 'none'; 
     35                                var icon = document.getElementById('icon_'+actions[i]); 
     36                                icon.className = ''; 
    2437                                } 
    2538                        } 
    2639 
    27                         current_action = action; 
     40                current_action = action; 
    2841                         
    29                         var tools = document.getElementById('tools_'+action); 
    30                         tools.style.display = 'block'; 
    31                         var icon = document.getElementById('icon_'+action); 
    32                         icon.className = 'iconActive'; 
    33  
    34                         var indicator = document.getElementById('indicator_image'); 
    35                         indicator.src = 'img/'+action+'.gif'; 
    36  
    37                         editor.setMode(current_action); 
    38  
    39                         //constraints on the scale, 
    40                         //code by Frédéric Klee <fklee@isuisse.com> 
    41                         if(action == 'scale')  
    42                         { 
    43                                 var theImage = editor.window.document.getElementById('theImage'); 
    44                                 orginal_width = theImage.width ; 
    45                                 orginal_height = theImage.height; 
    46  
    47                 var w = document.getElementById('sw'); 
    48                                 w.value = orginal_width ; 
    49                                 var h = document.getElementById('sh') ; 
    50                                 h.value = orginal_height ; 
    51                         } 
    52  
    53                 } 
    54         } 
    55  
    56         function toggleMarker()  
    57         { 
    58                 var marker = document.getElementById("markerImg"); 
    59                  
    60                 if(marker != null && marker.src != null) { 
    61                         if(marker.src.indexOf("t_black.gif") >= 0) 
    62                                 marker.src = "img/t_white.gif"; 
    63                         else 
    64                                 marker.src = "img/t_black.gif"; 
    65  
    66                         editor.toggleMarker(); 
    67                 } 
    68         } 
    69  
    70         //Togggle constraints, by Frédéric Klee <fklee@isuisse.com> 
    71         function toggleConstraints()  
    72         { 
    73                 var lock = document.getElementById("scaleConstImg"); 
    74                 var checkbox = document.getElementById("constProp"); 
    75                  
    76                 if(lock != null && lock.src != null) { 
    77                         if(lock.src.indexOf("unlocked2.gif") >= 0) 
    78                         { 
    79                                 lock.src = "img/islocked2.gif"; 
    80                                 checkbox.checked = true; 
    81                                 checkConstrains('width'); 
    82  
    83                         } 
    84                         else 
    85                         { 
    86                                 lock.src = "img/unlocked2.gif"; 
    87                                 checkbox.checked = false; 
    88                         } 
    89                 } 
    90         } 
     42                var tools = document.getElementById('tools_'+action); 
     43                tools.style.display = 'block'; 
     44                var icon = document.getElementById('icon_'+action); 
     45                icon.className = 'iconActive'; 
     46 
     47                var indicator = document.getElementById('indicator_image'); 
     48                indicator.src = 'img/'+action+'.gif'; 
     49 
     50                editor.setMode(current_action); 
     51 
     52                //constraints on the scale, 
     53                //code by Frédéric Klee <fklee@isuisse.com> 
     54 
     55                if(action == 'scale')  
     56                        { 
     57                        var theImage = editor.window.document.getElementById('theImage'); 
     58                        orginal_width = theImage.width ; 
     59                        orginal_height = theImage.height; 
     60 
     61                        var w = document.getElementById('sw'); 
     62                        w.value = orginal_width ; 
     63                        var h = document.getElementById('sh') ; 
     64                        h.value = orginal_height ; 
     65                        } 
     66 
     67                } 
     68 
     69        } // end of toggle() 
     70 
     71// ------------------------------------------------------------- 
     72 
     73/** 
     74* toggleMarker() 
     75*/ 
     76 
     77function toggleMarker()  
     78        { 
     79 
     80        _imgManager.ddt._ddt( "editor.js","80", "toggleMarker(): top" ); 
     81 
     82        var marker = document.getElementById("markerImg"); 
     83                 
     84        if(marker != null && marker.src != null)  
     85                { 
     86                if(marker.src.indexOf("t_black.gif") >= 0) 
     87                        marker.src = "img/t_white.gif"; 
     88                else 
     89                        marker.src = "img/t_black.gif"; 
     90 
     91                editor.toggleMarker(); 
     92                } 
     93        } 
     94 
     95// ----------------------------------------------------------------- 
     96 
     97/** 
     98* Togggle constraints, by Frédéric Klee <fklee@isuisse.com> 
     99*/ 
     100 
     101function toggleConstraints()  
     102        { 
     103 
     104        _imgManager.ddt._ddt( "editor.js","104", "toggleConstraints(): top" ); 
     105 
     106        var lock = document.getElementById("scaleConstImg"); 
     107        var checkbox = document.getElementById("constProp"); 
     108                 
     109        if(lock != null && lock.src != null)  
     110                { 
     111                if(lock.src.indexOf("unlocked2.gif") >= 0) 
     112                        { 
     113                        lock.src = "img/islocked2.gif"; 
     114                        checkbox.checked = true; 
     115                        checkConstrains('width'); 
     116                        } 
     117                else 
     118                        { 
     119                        lock.src = "img/unlocked2.gif"; 
     120                        checkbox.checked = false; 
     121                        } 
     122                } 
     123        }       // end of toggleContraints() 
     124 
     125// --------------------------------------------------------------------- 
    91126         
    92         //check the constraints, by Frédéric Klee <fklee@isuisse.com> 
    93         function checkConstrains(changed)  
    94         { 
    95                 var constrained = document.getElementById('constProp'); 
    96                 if(constrained.checked)  
    97                 { 
    98                         var w = document.getElementById('sw') ; 
    99                         var width = w.value ; 
    100                         var h = document.getElementById('sh') ; 
    101                         var height = h.value ; 
     127/** 
     128* check the constraints, by Frédéric Klee <fklee@isuisse.com> 
     129*/ 
     130 
     131function checkConstrains(changed)  
     132        { 
     133 
     134        _imgManager.ddt._ddt( "editor.js","134", "checkConstrains(): top" ); 
     135 
     136        var constrained = document.getElementById('constProp'); 
     137        if(constrained.checked)  
     138                { 
     139                var w = document.getElementById('sw') ; 
     140                var width = w.value ; 
     141                var h = document.getElementById('sh') ; 
     142                var height = h.value ; 
    102143                         
    103                         if(orginal_width > 0 && orginal_height > 0)  
    104                         { 
    105                                 if(changed == 'width' && width > 0)  
    106                                         h.value = parseInt((width/orginal_width)*orginal_height); 
    107                                 else if(changed == 'height' && height > 0)  
    108                                         w.value = parseInt((height/orginal_height)*orginal_width); 
    109                         } 
    110                 } 
    111                  
    112                 updateMarker('scale') ; 
    113         } 
    114  
    115  
    116         function updateMarker(mode)  
    117         { 
    118                 if (mode == 'crop') 
    119                 { 
    120                         var t_cx = document.getElementById('cx'); 
    121                         var t_cy = document.getElementById('cy'); 
    122                         var t_cw = document.getElementById('cw'); 
    123                         var t_ch = document.getElementById('ch'); 
    124  
    125                         editor.setMarker(parseInt(t_cx.value), parseInt(t_cy.value), parseInt(t_cw.value), parseInt(t_ch.value)); 
    126                 } 
    127                 else if(mode == 'scale') { 
    128                         var s_sw = document.getElementById('sw'); 
    129                         var s_sh = document.getElementById('sh'); 
    130                         editor.setMarker(0, 0, parseInt(s_sw.value), parseInt(s_sh.value)); 
    131                 } 
    132         } 
    133  
     144                if(orginal_width > 0 && orginal_height > 0)  
     145                        { 
     146                        if(changed == 'width' && width > 0)  
     147                                h.value = parseInt((width/orginal_width)*orginal_height); 
     148                        else if(changed == 'height' && height > 0)  
     149                                w.value = parseInt((height/orginal_height)*orginal_width); 
     150                        } 
     151                } 
     152                 
     153        updateMarker('scale') ; 
     154 
     155        }       // end of checkContrains() 
     156 
     157// -------------------------------------------------------------------- 
     158 
     159/** 
     160* updateMarker() 
     161*/ 
     162 
     163function updateMarker(mode)  
     164        { 
     165 
     166        _imgManager.ddt._ddt( "editor.js","166", "updateMarker(): top with mode '" + mode + "'" ); 
     167 
     168        if (mode == 'crop') 
     169                { 
     170                var t_cx = document.getElementById('cx'); 
     171                var t_cy = document.getElementById('cy'); 
     172                var t_cw = document.getElementById('cw'); 
     173                var t_ch = document.getElementById('ch'); 
     174 
     175                editor.setMarker(parseInt(t_cx.value), parseInt(t_cy.value), parseInt(t_cw.value), parseInt(t_ch.value)); 
     176                } 
     177        else if(mode == 'scale')  
     178                { 
     179                var s_sw = document.getElementById('sw'); 
     180                var s_sh = document.getElementById('sh'); 
     181                editor.setMarker(0, 0, parseInt(s_sw.value), parseInt(s_sh.value)); 
     182                } 
     183 
     184        }       // end of updateMarker() 
     185 
     186// --------------------------------------------------------------------- 
     187 
     188/** 
     189* rotatePresent() 
     190*/ 
    134191         
    135         function rotatePreset(selection)  
    136         { 
    137                 var value = selection.options[selection.selectedIndex].value; 
    138                  
    139                 if(value.length > 0 && parseInt(value) != 0) { 
    140                         var ra = document.getElementById('ra'); 
    141                         ra.value = parseInt(value); 
    142                 } 
    143         } 
    144  
    145         function updateFormat(selection)  
    146         { 
    147                 var selected = selection.options[selection.selectedIndex].value; 
    148  
    149                 var values = selected.split(","); 
    150                 if(values.length >1) { 
    151                         updateSlider(parseInt(values[1])); 
    152                 } 
    153  
    154         } 
    155         function addEvent(obj, evType, fn) 
     192function rotatePreset(selection)  
     193        { 
     194 
     195        _imgManager.ddt._ddt( "editor.js","195", "rotatePresent(): top" ); 
     196 
     197        var value = selection.options[selection.selectedIndex].value; 
     198                 
     199        if(value.length > 0 && parseInt(value) != 0)  
     200                { 
     201                var ra = document.getElementById('ra'); 
     202                ra.value = parseInt(value); 
     203                } 
     204        } 
     205 
     206// --------------------------------------------------------------------- 
     207 
     208/** 
     209* updateFormat() 
     210*/ 
     211 
     212function updateFormat(selection)  
     213        { 
     214 
     215        _imgManager.ddt._ddt( "editor.js","215", "updateFormat(): top" ); 
     216 
     217        var selected = selection.options[selection.selectedIndex].value; 
     218 
     219        var values = selected.split(","); 
     220        if(values.length >1)  
     221                { 
     222                updateSlider(parseInt(values[1])); 
     223                } 
     224 
     225        } 
     226 
     227// --------------------------------------------------------------------- 
     228 
     229/** 
     230* addEvent() 
     231*/ 
     232 
     233function addEvent(obj, evType, fn) 
    156234        {  
    157                 if (obj.addEventListener) { obj.addEventListener(evType, fn, true); return true; }  
    158                 else if (obj.attachEvent) {  var r = obj.attachEvent("on"+evType, fn);  return r;  }  
    159                 else {  return false; }  
    160         }  
    161  
    162         init = function() 
    163         { 
    164                 var bottom = document.getElementById('bottom'); 
    165                 if(window.opener) 
    166                 { 
    167                         __dlg_init(bottom); 
    168                         __dlg_translate('ImageManager'); 
    169                 } 
    170         } 
    171  
    172         addEvent(window, 'load', init); 
     235 
     236        _imgManager.ddt._ddt( "editor.js","236", "addEvent(): top" ); 
     237 
     238        if (obj.addEventListener)  
     239                {  
     240                obj.addEventListener(evType, fn, true);  
     241                return true;  
     242                }  
     243        else if (obj.attachEvent)  
     244                {   
     245                var r = obj.attachEvent("on"+evType, fn);   
     246                return r;   
     247                }  
     248        else  
     249                {   
     250                return false;  
     251                }  
     252 
     253        } // end of addEvent() 
     254 
     255// ------------------------------------------------------ 
     256 
     257/** 
     258* init() 
     259*/ 
     260 
     261init = function() 
     262        { 
     263 
     264        _imgManager.ddt._ddt( "editor.js","264", "init(): top" ); 
     265 
     266        var bottom = document.getElementById('bottom'); 
     267        if(window.opener) 
     268                { 
     269                __dlg_init(bottom); 
     270                __dlg_translate('ImageManager'); 
     271                } 
     272        } 
     273 
     274// -------------------------------------------------------- 
     275 
     276_imgManager.ddt._ddt( "editor.js","276", "bottom: hooking onLoad event" ); 
     277 
     278addEvent(window, 'load', init); 
     279 
     280// END 
  • branches/unified_backend/plugins/ImageManager/assets/images.js

    r60 r121  
    11/** 
    2  * Functions for the image listing, used by images.php only      
    3  * @author $Author: Wei Zhuo $ 
    4  * @version $Id: images.js 26 2004-03-31 02:35:21Z Wei Zhuo $ 
    5  * @package ImageManager 
    6  */ 
     2* Functions for the image listing, used by images.php only       
     3* @author $Author: Wei Zhuo $ 
     4* @version $Id: images.js 26 2004-03-31 02:35:21Z Wei Zhuo $ 
     5* @package ImageManager 
     6*/ 
    77 
    8         function i18n(str) { 
    9         return HTMLArea._lc(str, 'ImageManager'); 
     8// the _imgManager reference must be set before this file is included. 
     9 
     10// -------------------------------------------- 
     11 
     12/** 
     13* i18n() 
     14*/ 
     15 
     16function i18n(str)  
     17        { 
     18 
     19        _imgManager.ddt._ddt( "images.js","19", "i18n(): top with string '" + str + "'" ); 
     20 
     21        return HTMLArea._lc(str, 'ImageManager'); 
    1022        }; 
    1123 
    12         function changeDir(newDir)  
     24// -------------------------------------------- 
     25 
     26function changeDir(newDir)  
    1327        { 
    14                 showMessage('Loading'); 
    1528 
    16                 // backend_url is defined in the calling page. For now we  
    17                 // assume it has a trailing & 
     29        _imgManager.ddt._ddt( "images.js","29", "changeDir(): top with newDir '" + newDir + "'" ); 
    1830 
    19                 location.href = _backend_url + "__function=images&dir="+newDir; 
     31        showMessage('Loading'); 
     32 
     33        // backend_url is defined in the calling page. For now we  
     34        // assume it has a trailing & 
     35 
     36        location.href = _backend_url + "__function=images&dir="+newDir; 
    2037        } 
    2138 
     39// ------------------------------------------------ 
    2240 
    23         function newFolder(dir, newDir)  
     41/** 
     42* newFolder() 
     43*/ 
     44 
     45function newFolder(dir, newDir)  
    2446        { 
    25                 location.href = _backend_url + "__function=images&dir="+dir+"&newDir="+newDir; 
     47 
     48        _imgManager.ddt._ddt( "images.js","48", "newFolder(): top with dir '" + dir + "' and newDir '" + newDir + "'" ); 
     49 
     50        location.href = _backend_url + "__function=images&dir="+dir+"&newDir="+newDir; 
    2651        } 
    2752 
    28         //update the dir list in the parent window. 
    29         function updateDir(newDir) 
     53// ---------------------------------------------------------------------- 
     54 
     55/** 
     56* update the dir list in the parent window. 
     57*/ 
     58 
     59function updateDir(newDir) 
    3060        { 
    31                 var selection = window.top.document.getElementById('dirPath'); 
    32                 if(selection) 
     61        _imgManager.ddt._ddt( "images.js","61", "updatDir(): top with string '" + newDir + "'" ); 
     62 
     63        var selection = window.top.document.getElementById('dirPath'); 
     64        if(selection) 
    3365                { 
    34                         for(var i = 0; i < selection.length; i++) 
     66                for(var i = 0; i < selection.length; i++) 
    3567                        { 
    36                                 var thisDir = selection.options[i].text; 
    37                                 if(thisDir == newDir) 
     68                        var thisDir = selection.options[i].text; 
     69                        if(thisDir == newDir) 
    3870                                { 
    39                                         selection.selectedIndex = i; 
    40                                         showMessage('Loading'); 
    41                                         break; 
     71                                selection.selectedIndex = i; 
     72                                showMessage('Loading'); 
     73                                break; 
    4274                                } 
    4375                        }                
     
    4577        } 
    4678 
    47         function selectImage(filename, alt, width, height)  
     79// ------------------------------------------------------------------------- 
     80 
     81/** 
     82* selectImage() 
     83*/ 
     84 
     85function selectImage(filename, alt, width, height)  
    4886        { 
    49                 var topDoc = window.top.document; 
     87 
     88        _imgManager.ddt._ddt( "images.js","88", "selectImage(): top with filename '" + filename + "'" ); 
     89 
     90        var topDoc = window.top.document; 
    5091                 
    51                 var obj = topDoc.getElementById('f_url');  obj.value = filename; 
    52                 var obj = topDoc.getElementById('f_width');  obj.value = width; 
    53                 var obj = topDoc.getElementById('f_width'); obj.value = width; 
    54                 var obj = topDoc.getElementById('f_height'); obj.value = height; 
    55                 var obj = topDoc.getElementById('f_alt'); obj.value = alt; 
    56                 var obj = topDoc.getElementById('orginal_width'); obj.value = width; 
    57                 var obj = topDoc.getElementById('orginal_height'); obj.value = height;           
     92        var obj = topDoc.getElementById('f_url');  obj.value = filename; 
     93        var obj = topDoc.getElementById('f_width');  obj.value = width; 
     94        var obj = topDoc.getElementById('f_width'); obj.value = width; 
     95        var obj = topDoc.getElementById('f_height'); obj.value = height; 
     96        var obj = topDoc.getElementById('f_alt'); obj.value = alt; 
     97        var obj = topDoc.getElementById('orginal_width'); obj.value = width; 
     98        var obj = topDoc.getElementById('orginal_height'); obj.value = height;           
    5899        } 
    59100 
    60         function showMessage(newMessage)  
     101// -------------------------------------------------------------------------- 
     102 
     103/** 
     104* showMessage() 
     105*/ 
     106 
     107function showMessage(newMessage)  
    61108        { 
    62                 var topDoc = window.top.document; 
    63109 
    64                 var message = topDoc.getElementById('message'); 
    65                 var messages = topDoc.getElementById('messages'); 
    66                 if(message && messages) 
     110        _imgManager.ddt._ddt( "images.js","110", "showMessage(): top with newMessage '" + newMessage + "'" ); 
     111 
     112        var topDoc = window.top.document; 
     113 
     114        var message = topDoc.getElementById('message'); 
     115        var messages = topDoc.getElementById('messages'); 
     116 
     117        if(message && messages) 
    67118                { 
    68                         if(message.firstChild) 
     119                if(message.firstChild) 
    69120                                message.removeChild(message.firstChild); 
    70121 
    71                         message.appendChild(topDoc.createTextNode(i18n(newMessage))); 
     122                message.appendChild(topDoc.createTextNode(i18n(newMessage))); 
    72123                         
    73                         messages.style.display = "block"; 
     124                messages.style.display = "block"; 
    74125                } 
     126 
    75127        } 
    76128 
    77         function addEvent(obj, evType, fn) 
     129// ------------------------------------------------------------ 
     130 
     131/** 
     132* addEvent() 
     133*/ 
     134 
     135function addEvent(obj, evType, fn) 
    78136        {  
    79                 if (obj.addEventListener) { obj.addEventListener(evType, fn, true); return true; }  
    80                 else if (obj.attachEvent) {  var r = obj.attachEvent("on"+evType, fn);  return r;  }  
    81                 else {  return false; }  
     137 
     138        _imgManager.ddt._ddt( "images.js","138", "addEvent(): top" ); 
     139 
     140        if (obj.addEventListener)  
     141                {  
     142                obj.addEventListener(evType, fn, true);  
     143                return true;  
     144                }  
     145        else if (obj.attachEvent)  
     146                {   
     147                var r = obj.attachEvent("on"+evType, fn);  return r;   
     148                }  
     149        else {  return false; }  
     150 
    82151        }  
    83152 
    84         function confirmDeleteFile(file)  
     153// -------------------------------------------------------- 
     154 
     155/** 
     156* confirmDeleteFile() 
     157*/ 
     158 
     159function confirmDeleteFile(file)  
    85160        { 
    86                 if(confirm(i18n("Delete file?"))) 
    87                         return true; 
    88          
    89                 return false;            
     161 
     162        _imgManager.ddt._ddt( "images.js","162", "confirmDeleteFile(): top with file '" + file + "'" ); 
     163 
     164        if(confirm(i18n("Delete file?"))) 
     165                return true; 
     166 
     167        return false;            
    90168        } 
    91169 
    92         function confirmDeleteDir(dir, count)  
     170// ---------------------------------------------------------- 
     171 
     172/** 
     173* confirmDeleteDir() 
     174*/ 
     175 
     176function confirmDeleteDir(dir, count)  
    93177        { 
    94                 if(count > 0) 
     178 
     179        _imgManager.ddt._ddt( "images.js","179", "confirmDeleteDir(): top with dir '" + dir + "' count '" + count + "'" ); 
     180 
     181        if(count > 0) 
    95182                { 
    96                         alert(i18n("Please delete all files/folders inside the folder you wish to delete first.")); 
    97                         return; 
     183                alert(i18n("Please delete all files/folders inside the folder you wish to delete first.")); 
     184                return; 
    98185                } 
    99186 
    100                 if(confirm(i18n("Delete folder?")))  
     187        if(confirm(i18n("Delete folder?")))  
    101188                        return true; 
    102189 
    103                 return false; 
     190        return false; 
    104191        } 
    105192 
    106         addEvent(window, 'load', init); 
     193// ---------------------------------------- 
     194 
     195_imgManager.ddt._ddt( "images.js","195", "bottom: hooking onload event" ); 
     196 
     197addEvent(window, 'load', init); 
     198 
     199// END 
  • branches/unified_backend/plugins/ImageManager/assets/manager.js

    r60 r121  
    11/** 
    2  * Functions for the ImageManager, used by manager.php only      
    3  * @author $Author: Wei Zhuo $ 
    4  * @version $Id: manager.js 26 2004-03-31 02:35:21Z Wei Zhuo $ 
    5  * @package ImageManager 
    6  */ 
     2* @fileoverview Functions for the ImageManager, used by manager.php only         
     3* 
     4* The _imgManager object must be present before this file can be included. 
     5* 
     6* @see manager.php 
     7* 
     8* @author $Author: Wei Zhuo $ 
     9* @version $Id: manager.js 26 2004-03-31 02:35:21Z Wei Zhuo $ 
     10* @package ImageManager 
     11* 
     12* @todo this should be turned into a class, possibly made part of ImageManager. 
     13*/ 
     14 
     15// ---------------------------------------------------- 
    716         
    8         //Translation 
    9         function i18n(str) { 
    10         return HTMLArea._lc(str, 'ImageManager'); 
     17/** 
     18* Translation 
     19* 
     20function i18n(str)  
     21        { 
     22 
     23        _imgManager.ddt._ddt( "manager.js","23", "i18n(): top with string '" + str + "'" ); 
     24 
     25        return HTMLArea._lc(str, 'ImageManager'); 
     26 
    1127        }; 
    1228 
    13  
    14         //set the alignment options 
    15         function setAlign(align)  
    16         { 
    17                 var selection = document.getElementById('f_align'); 
    18                 for(var i = 0; i < selection.length; i++) 
    19                 { 
    20                         if(selection.options[i].value == align) 
    21                         { 
    22                                 selection.selectedIndex = i; 
    23                                 break; 
     29// ---------------------------------------------------- 
     30 
     31/** 
     32* set the alignment options 
     33*/ 
     34 
     35function setAlign(align)  
     36        { 
     37 
     38        _imgManager.ddt._ddt( "manager.js","38", "setAlign(): top with align '" + align + "'" ); 
     39 
     40        var selection = document.getElementById('f_align'); 
     41 
     42        for(var i = 0; i < selection.length; i++) 
     43                { 
     44                if (selection.options[i].value == align) 
     45                        { 
     46                        selection.selectedIndex = i; 
     47                        break; 
    2448                        } 
    2549                } 
     50        }  // end of setAlign() 
     51 
     52// -------------------------------------------- 
     53 
     54/** 
     55* initialise the form 
     56*/ 
     57 
     58init = function ()  
     59        { 
     60 
     61        _imgManager.ddt._ddt( "manager.js","61", "init(): top." ); 
     62 
     63        __dlg_init(); 
     64 
     65        __dlg_translate('ImageManager'); 
     66 
     67        var uploadForm = document.getElementById('uploadForm'); 
     68 
     69        if(uploadForm) uploadForm.target = 'imgManager'; 
     70 
     71        var param = window.dialogArguments; 
     72 
     73        if (param)  
     74                { 
     75                document.getElementById("f_url").value = param["f_url"]; 
     76                document.getElementById("f_alt").value = param["f_alt"]; 
     77                document.getElementById("f_border").value = param["f_border"]; 
     78                document.getElementById("f_vert").value = param["f_vert"]; 
     79                document.getElementById("f_horiz").value = param["f_horiz"]; 
     80                document.getElementById("f_width").value = param["f_width"]; 
     81                document.getElementById("f_height").value = param["f_height"]; 
     82                setAlign(param["f_align"]); 
     83                } 
     84 
     85        _imgManager.ddt._ddt( "manager.js","85", "init(): setting focus" ); 
     86 
     87        document.getElementById("f_url").focus(); 
     88 
     89        }  // end of init. 
     90 
     91// ----------------------------------------------------------------- 
     92 
     93/** 
     94* onCancel() 
     95*/ 
     96 
     97function onCancel()  
     98        { 
     99 
     100        _imgManager.ddt._ddt( "manager.js","100", "onCancel(): top" ); 
     101 
     102        __dlg_close(null); 
     103        return false; 
     104        }; 
     105 
     106// ------------------------------------------------------------------ 
     107 
     108/** 
     109* onOK() 
     110*/ 
     111 
     112function onOK()  
     113        { 
     114 
     115        _imgManager.ddt._ddt( "manager.js","115", "onOK(): top" ); 
     116 
     117        // pass data back to the calling window 
     118 
     119        var fields = ["f_url", "f_alt", "f_align", "f_border", "f_horiz", "f_vert", "f_height", "f_width"]; 
     120        var param = new Object(); 
     121 
     122        for (var i in fields)  
     123                { 
     124                var id = fields[i]; 
     125                var el = document.getElementById(id); 
     126                if (id == "f_url" && el.value.indexOf('://') < 0 ) 
     127                        { 
     128 
     129                        if ( el.value == "" ) 
     130                                { 
     131                                alert( "No Image selected." ); 
     132                                return( false ); 
     133                                } 
     134 
     135                        param[id] = makeURL(base_url,el.value); 
     136                        } 
     137                else 
     138                        { 
     139                        param[id] = el.value; 
     140                        } 
     141                } 
     142 
     143        _imgManager.ddt._ddt( "manager.js","143", "onOK(): closing dialog" ); 
     144 
     145        __dlg_close(param); 
     146        return false; 
     147 
     148        };  // end of onOK() 
     149 
     150// --------------------------------------------------- 
     151 
     152/** 
     153* makeURL() 
     154* 
     155* similar to the Files::makeFile() in Files.php 
     156*/ 
     157 
     158function makeURL(pathA, pathB)  
     159        { 
     160 
     161        _imgManager.ddt._ddt( "manager.js","161", "makeURL(): pathA '" + pathA + "' pathB '" + pathB + "'" ); 
     162 
     163        if (pathA.substring(pathA.length-1) != '/') 
     164                        pathA += '/'; 
     165 
     166        if (pathB.charAt(0) == '/');     
     167                        pathB = pathB.substring(1); 
     168 
     169        return pathA+pathB; 
     170 
     171        }  // end of makeURL() 
     172 
     173// --------------------------------------------- 
     174 
     175/** 
     176* updateDir() 
     177*/ 
     178 
     179function updateDir(selection)  
     180        { 
     181 
     182        var newDir = selection.options[selection.selectedIndex].value; 
     183 
     184        _imgManager.ddt._ddt( "manager.js","184", "updateDir(): newDir is '" + newDir + "'" ); 
     185 
     186        changeDir(newDir); 
    26187        } 
    27188 
    28         //initialise the form 
    29         init = function ()  
    30         { 
    31                 __dlg_init(); 
    32  
    33                 __dlg_translate('ImageManager'); 
    34  
    35                 var uploadForm = document.getElementById('uploadForm'); 
    36                 if(uploadForm) uploadForm.target = 'imgManager'; 
    37  
    38                 var param = window.dialogArguments; 
    39                 if (param)  
    40                 { 
    41                         document.getElementById("f_url").value = param["f_url"]; 
    42                         document.getElementById("f_alt").value = param["f_alt"]; 
    43                         document.getElementById("f_border").value = param["f_border"]; 
    44                         document.getElementById("f_vert").value = param["f_vert"]; 
    45                         document.getElementById("f_horiz").value = param["f_horiz"]; 
    46                         document.getElementById("f_width").value = param["f_width"]; 
    47                         document.getElementById("f_height").value = param["f_height"]; 
    48                         setAlign(param["f_align"]); 
    49                 } 
    50  
    51                 document.getElementById("f_url").focus(); 
     189// --------------------------------------------- 
     190 
     191/** 
     192* goUpDir() 
     193*/ 
     194 
     195function goUpDir()  
     196        { 
     197 
     198        _imgManager.ddt._ddt( "manager.js","198", "goUpDir(): top" ); 
     199 
     200        var selection = document.getElementById('dirPath'); 
     201        var currentDir = selection.options[selection.selectedIndex].text; 
     202 
     203        if(currentDir.length < 2) 
     204                        return false; 
     205 
     206        var dirs = currentDir.split('/'); 
     207                 
     208        var search = ''; 
     209 
     210        for(var i = 0; i < dirs.length - 2; i++) 
     211                { 
     212                search += dirs[i]+'/'; 
     213                } 
     214 
     215        for(var i = 0; i < selection.length; i++) 
     216                { 
     217                var thisDir = selection.options[i].text; 
     218                if(thisDir == search) 
     219                        { 
     220                        selection.selectedIndex = i; 
     221                        var newDir = selection.options[i].value; 
     222                        changeDir(newDir); 
     223                        break; 
     224                        } 
     225                } 
     226        }  // end of goUpDir() 
     227 
     228// ---------------------------------------------- 
     229 
     230/** 
     231* changeDir() 
     232*/ 
     233 
     234function changeDir(newDir)  
     235        { 
     236 
     237        _imgManager.ddt._ddt( "manager.js","237", "changeDir(): newDir is '" + newDir + "'" ); 
     238 
     239        if (typeof imgManager != 'undefined') 
     240                { 
     241 
     242                _imgManager.ddt._ddt( "manager.js","242", "changeDir(): imgManager is defined" ); 
     243 
     244                imgManager.changeDir(newDir); 
     245                } 
    52246        } 
    53247 
    54  
    55         function onCancel()  
    56         { 
    57                 __dlg_close(null); 
    58                 return false; 
    59         }; 
    60  
    61         function onOK()  
    62         { 
    63                 // pass data back to the calling window 
    64                 var fields = ["f_url", "f_alt", "f_align", "f_border", "f_horiz", "f_vert", "f_height", "f_width"]; 
    65                 var param = new Object(); 
    66                 for (var i in fields)  
    67                 { 
    68                         var id = fields[i]; 
    69                         var el = document.getElementById(id); 
    70                         if(id == "f_url" && el.value.indexOf('://') < 0 ) 
    71                                 { 
    72  
    73                                 if ( el.value == "" ) 
    74                                         { 
    75                                         alert( "No Image selected." ); 
    76                                         return( false ); 
    77                                         } 
    78  
    79                                 param[id] = makeURL(base_url,el.value); 
    80                                 } 
    81                         else 
    82                                 param[id] = el.value; 
    83                 } 
    84                 __dlg_close(param); 
    85                 return false; 
    86         }; 
    87  
    88         //similar to the Files::makeFile() in Files.php 
    89         function makeURL(pathA, pathB)  
    90         { 
    91                 if(pathA.substring(pathA.length-1) != '/') 
    92                         pathA += '/'; 
    93  
    94                 if(pathB.charAt(0) == '/');      
    95                         pathB = pathB.substring(1); 
    96  
    97                 return pathA+pathB; 
    98         } 
    99  
    100  
    101         function updateDir(selection)  
    102         { 
    103                 var newDir = selection.options[selection.selectedIndex].value; 
    104                 changeDir(newDir); 
    105         } 
    106  
    107         function goUpDir()  
    108         { 
    109                 var selection = document.getElementById('dirPath'); 
    110                 var currentDir = selection.options[selection.selectedIndex].text; 
    111                 if(currentDir.length < 2) 
    112                         return false; 
    113                 var dirs = currentDir.split('/'); 
     248// ----------------------------------------------- 
     249 
     250/** 
     251* toggleContrains() 
     252*/ 
     253 
     254function toggleConstrains(constrains)  
     255        { 
     256 
     257        _imgManager.ddt._ddt( "manager.js","257", "toggleConstrains(): top" ); 
     258 
     259        var lockImage = document.getElementById('imgLock'); 
     260        var constrains = document.getElementById('constrain_prop'); 
     261 
     262        if(constrains.checked)  
     263                { 
     264                lockImage.src = "img/locked.gif";        
     265                checkConstrains('width')  
     266                } 
     267        else 
     268                { 
     269                lockImage.src = "img/unlocked.gif";      
     270                } 
     271        } // end of toggleConstrains() 
     272 
     273// --------------------------------------------------- 
     274 
     275/** 
     276* checkConstrains() 
     277*/ 
     278 
     279function checkConstrains(changed)  
     280        { 
     281 
     282        _imgManager.ddt._ddt( "manager.js","282", "checkConstrains(): top" ); 
     283 
     284        //alert(document.form1.constrain_prop); 
     285 
     286        var constrains = document.getElementById('constrain_prop'); 
    114287                 
    115                 var search = ''; 
    116  
    117                 for(var i = 0; i < dirs.length - 2; i++) 
    118                 { 
    119                         search += dirs[i]+'/'; 
    120                 } 
    121  
    122                 for(var i = 0; i < selection.length; i++) 
    123                 { 
    124                         var thisDir = selection.options[i].text; 
    125                         if(thisDir == search) 
    126                         { 
    127                                 selection.selectedIndex = i; 
    128                                 var newDir = selection.options[i].value; 
    129                                 changeDir(newDir); 
    130                                 break; 
    131                         } 
    132                 } 
    133         } 
    134  
    135         function changeDir(newDir)  
    136         { 
    137                 if(typeof imgManager != 'undefined') 
    138                         imgManager.changeDir(newDir); 
    139         } 
    140  
    141         function toggleConstrains(constrains)  
    142         { 
    143                 var lockImage = document.getElementById('imgLock'); 
    144                 var constrains = document.getElementById('constrain_prop'); 
    145  
    146                 if(constrains.checked)  
    147                 { 
    148                         lockImage.src = "img/locked.gif";        
    149                         checkConstrains('width')  
    150                 } 
    151                 else 
    152                 { 
    153                         lockImage.src = "img/unlocked.gif";      
    154                 } 
    155         } 
    156  
    157         function checkConstrains(changed)  
    158         { 
    159                 //alert(document.form1.constrain_prop); 
    160                 var constrains = document.getElementById('constrain_prop'); 
    161                  
    162                 if(constrains.checked)  
    163                 { 
    164                         var obj = document.getElementById('orginal_width'); 
    165                         var orginal_width = parseInt(obj.value); 
    166                         var obj = document.getElementById('orginal_height'); 
    167                         var orginal_height = parseInt(obj.value); 
    168  
    169                         var widthObj = document.getElementById('f_width'); 
    170                         var heightObj = document.getElementById('f_height'); 
     288        if(constrains.checked)  
     289                { 
     290                var obj = document.getElementById('orginal_width'); 
     291                var orginal_width = parseInt(obj.value); 
     292                var obj = document.getElementById('orginal_height'); 
     293                var orginal_height = parseInt(obj.value); 
     294 
     295                var widthObj = document.getElementById('f_width'); 
     296                var heightObj = document.getElementById('f_height'); 
    171297                         
    172                         var width = parseInt(widthObj.value); 
    173                         var height = parseInt(heightObj.value); 
    174  
    175                         if(orginal_width > 0 && orginal_height > 0)  
    176                         { 
    177                                 if(changed == 'width' && width > 0) { 
    178                                         heightObj.value = parseInt((width/orginal_width)*orginal_height); 
    179                                 } 
    180  
    181                                 if(changed == 'height' && height > 0) { 
    182                                         widthObj.value = parseInt((height/orginal_height)*orginal_width); 
     298                var width = parseInt(widthObj.value); 
     299                var height = parseInt(heightObj.value); 
     300 
     301                if(orginal_width > 0 && orginal_height > 0)  
     302                        { 
     303                        if(changed == 'width' && width > 0)  
     304                          { 
     305                                heightObj.value = parseInt((width/orginal_width)*orginal_height); 
     306                          } 
     307 
     308                        if(changed == 'height' && height > 0)  
     309                          { 
     310                                widthObj.value = parseInt((height/orginal_height)*orginal_width); 
    183311                                } 
    184312                        }                        
    185313                } 
     314        } // end of checkContrains() 
     315 
     316// -------------------------------------------------------------------- 
     317 
     318/** 
     319* showMessage() 
     320*/ 
     321 
     322function showMessage(newMessage)  
     323        { 
     324 
     325        _imgManager.ddt._ddt( "manager.js","325", "showMessage(): top with message '" + newMessage + "'" ); 
     326 
     327        var message = document.getElementById('message'); 
     328        var messages = document.getElementById('messages'); 
     329 
     330        if (message.firstChild) 
     331                message.removeChild(message.firstChild); 
     332 
     333        message.appendChild(document.createTextNode(i18n(newMessage))); 
     334                 
     335        messages.style.display = "block"; 
    186336        } 
    187337 
    188         function showMessage(newMessage)  
    189         { 
    190                 var message = document.getElementById('message'); 
    191                 var messages = document.getElementById('messages'); 
    192                 if(message.firstChild) 
    193                         message.removeChild(message.firstChild); 
    194  
    195                 message.appendChild(document.createTextNode(i18n(newMessage))); 
     338// --------------------------------------------------------------------- 
     339 
     340/** 
     341* addEvent() 
     342*/ 
     343 
     344function addEvent(obj, evType, fn) 
     345        {  
     346 
     347        _imgManager.ddt._ddt( "manager.js","347", "addEvent() : top" ); 
     348 
     349        if (obj.addEventListener)  
     350                {  
     351                obj.addEventListener(evType, fn, true);  
     352                return true;  
     353                } 
     354        else if (obj.attachEvent)  
     355                {   
     356                var r = obj.attachEvent("on"+evType, fn);   
     357                return r;   
     358                }  
     359        else  
     360                {   
     361                return false;  
     362                }  
     363        }  // end of addEvent()  
     364 
     365// ---------------------------------------------- 
     366 
     367/** 
     368* doUpload() 
     369*/ 
     370 
     371function doUpload()  
     372        { 
     373        _imgManager.ddt._ddt( "manager.js","373", "doUpload(): top" ); 
    196374                 
    197                 messages.style.display = "block"; 
     375        var uploadForm = document.getElementById('uploadForm'); 
     376 
     377        if(uploadForm) 
     378                { 
     379                showMessage('Uploading'); 
     380                } 
    198381        } 
    199382 
    200         function addEvent(obj, evType, fn) 
    201         {  
    202                 if (obj.addEventListener) { obj.addEventListener(evType, fn, true); return true; }  
    203                 else if (obj.attachEvent) {  var r = obj.attachEvent("on"+evType, fn);  return r;  }  
    204                 else {  return false; }  
    205         }  
    206  
    207         function doUpload()  
    208         { 
    209                  
    210                 var uploadForm = document.getElementById('uploadForm'); 
    211                 if(uploadForm) 
    212                         showMessage('Uploading'); 
     383// ----------------------------------------------------- 
     384 
     385/** 
     386* refresh() 
     387*/ 
     388 
     389function refresh() 
     390        { 
     391        _imgManager.ddt._ddt( "manager.js","391", "refresh(): top" ); 
     392 
     393        var selection = document.getElementById('dirPath'); 
     394        updateDir(selection); 
    213395        } 
    214396 
    215         function refresh() 
    216         { 
    217                 var selection = document.getElementById('dirPath'); 
    218                 updateDir(selection); 
    219         } 
    220  
    221  
    222         function newFolder()  
    223         { 
    224                 var selection = document.getElementById('dirPath'); 
    225                 var dir = selection.options[selection.selectedIndex].value; 
    226  
    227                 Dialog("newFolder.html", function(param)  
    228                 { 
     397// ---------------------------------------------------- 
     398 
     399/** 
     400* newFolder() 
     401*/ 
     402 
     403function newFolder()  
     404        { 
     405 
     406        _imgManager.ddt._ddt( "manager.js","406", "newFolder(): top" ); 
     407 
     408        var selection = document.getElementById('dirPath'); 
     409        var dir = selection.options[selection.selectedIndex].value; 
     410 
     411        // the popup dialog also needs access to the editor instance. See the last 
     412        // parm. 
     413 
     414        Dialog("newFolder.html",  
     415                function(param)  
     416                        { 
     417 
     418                        _imgManager.ddt._ddt( "manager.js","418", "Dialog() newFolder function parm: top" ); 
     419 
    229420                        if (!param) // user must have pressed Cancel 
    230421                                return false; 
    231422                        else 
    232                         { 
     423                                { 
    233424                                var folder = param['f_foldername']; 
     425 
    234426                                if(folder == thumbdir) 
    235                                 { 
     427                                        { 
    236428                                        alert(i18n('Invalid folder name, please choose another folder name.')); 
    237429                                        return false; 
    238                                 } 
     430                                        } 
    239431 
    240432                                if (folder && folder != '' && typeof imgManager != 'undefined')  
    241433                                        imgManager.newFolder(dir, encodeURI(folder));  
    242                         } 
    243                 }, null); 
    244         } 
    245  
    246         addEvent(window, 'load', init); 
     434                                } 
     435                        }, null, _imgManager._editor);  // end of Dialog() function parm 
     436 
     437        }       // end of newFolder() 
     438 
     439// ------------------------------------------------------------- 
     440// once the window loads fire the init() function defined above 
     441 
     442_imgManager.ddt._ddt( "manager.js","442", "bottom, adding event to window onload" ); 
     443 
     444addEvent(window, 'load', init); 
     445 
     446// end. 
  • branches/unified_backend/plugins/ImageManager/backend.php

    r48 r121  
    1 <? 
     1<?php 
    22 
    33/** 
     
    88* 
    99* Unified backend sponsored by DTLink Software, http://www.dtlink.com 
    10 * Implementation by Yermo Lamers, http://www.formvista.com 
     10* Implementation by Yermo Lamers, http://www.formvista.com/contact.html 
    1111* 
    1212* (c) DTLink, LLC 2005. 
     
    4141*/ 
    4242 
    43 include_once( "ddt.php" ); 
     43include_once( "../ddt/ddt.php" ); 
    4444 
    4545// uncomment to turn on debugging 
    4646// _ddtOn(); 
    4747 
     48// --------------------------------------------------------------- 
     49 
     50/** 
     51* ImageManager backend callback 
     52* 
     53* After including this file, the unified backend.php script 
     54* will call this function 
     55*/ 
     56 
     57function imagemanager_callback( $formVars ) 
     58{ 
     59 
     60global $IMConfig; 
     61 
    4862_ddt( __FILE__, __LINE__, "backend.php: top with query '" . $_SERVER["PHP_SELF"] . "' string '" . $_SERVER["QUERY_STRING"] . "'" ); 
    49  
    50 $formVars = empty($_POST) ? $_GET : $_POST; 
    5163 
    5264// make sure the request is for us (this gives us the ability to eventually organize 
     
    122134return false ; 
    123135 
     136}       // end of ImageManager_plugin 
     137 
    124138// END 
    125139 
  • branches/unified_backend/plugins/ImageManager/config.inc.php

    r60 r121  
    1414//      . unified backend. 
    1515// . created a set of defaults that make sense for bundling with Xinha. 
    16  
    17 // ------------------------------------------------------------------------- 
     16// 
     17// 2005-05-01 YmL: 
     18//      . modified for master unified backend.  
     19// . config values can be overridden by the calling page (makes integration 
     20//        easier. 
     21// ------------------------------------------------------------------------- 
     22 
     23/** 
     24* Xinha PHP backend config file. 
     25* 
     26* probably already included. We assume we are in the xinha/plugins/ImageManager 
     27* directory 
     28*/ 
     29 
     30if ( ! defined( "XINHA_INSTALL_ROOT" ) ) 
     31        { 
     32        include_once( "../../backends/backend_conf.php" ); 
     33        } 
    1834 
    1935/** 
     
    2541*/ 
    2642 
    27 $IMConfig['backend_url'] = "backend.php?__plugin=ImageManager&"; 
     43if ( @$IMConfig['backend_url' ] == NULL ) 
     44        { 
     45        $IMConfig['backend_url'] = XINHA_INSTALL_URL . "/backends/backend.php?__plugin=ImageManager&"; 
     46        } 
    2847 
    2948/** 
     
    3655*/ 
    3756 
    38 $IMConfig['base_dir'] = getcwd(); 
    39 $IMConfig['base_url'] = ''; 
     57if ( @$IMConfig[ 'base_dir' ] == NULL ) 
     58        { 
     59        $IMConfig['base_dir'] = XINHA_INSTALL_ROOT . "/plugins/ImageManager/"; 
     60        $IMConfig['base_url'] = XINHA_INSTALL_URL . "/plugins/ImageManager/"; 
     61        } 
    4062 
    4163// ------------------------------------------------------------ 
     
    5173* Able to create directories is nice, but not necessary. 
    5274* 
    53 * CHANGE THIS: for out-of-the-box demo purposes we're setting this to ./demo_images 
    54 * which has some graphics in it. 
     75* For out-of-the-box demo purposes we're setting this to  
     76* xinha/examples/images which has some graphics in it. 
    5577*/ 
    5678 
    5779// $IMConfig['images_dir'] = "/some/path/to/images/directory; 
    5880 
    59 $IMConfig['images_dir'] = "demo_images"; 
     81if ( @$IMConfig['images_dir'] == NULL ) 
     82        { 
     83        $IMConfig['images_dir'] = XINHA_INSTALL_ROOT . "/examples/images"; 
     84        } 
    6085 
    6186// ------------------------------------------------------------------------- 
     
    7095* for this directory (i.e. disable PHP, Perl, CGI). We only want to store assets 
    7196* in this directory and its subdirectories. 
    72 * 
    73 * CHANGE THIS: You need to change this to match the url where you have Xinha 
    74 * installed. If the images show up blank chances are this is not set correctly. 
    75 */ 
    76  
    77 // $IMConfig['images_url'] = "/url/to/above"; 
    78  
    79 // try to figure out the URL of the sample images directory. For your installation 
    80 // you will probably want to keep images in another directory. 
    81  
    82 $IMConfig['images_url'] = str_replace( "backend.php", "", $_SERVER["PHP_SELF"] ) . "demo_images"; 
     97*/ 
     98 
     99if ( @$IMConfig['images_url'] == NULL ) 
     100        { 
     101        $IMConfig['images_url'] = XINHA_INSTALL_URL . "/examples/images"; 
     102        } 
    83103 
    84104// ------------------------------------------------------------------------- 
     
    97117*/ 
    98118 
    99 $IMConfig['safe_mode'] = false; 
     119if ( @$IMConfig['safe_mode'] == NULL ) 
     120        { 
     121        $IMConfig['safe_mode'] = false; 
     122        } 
    100123 
    101124// ------------------------------------------------------------------------- 
     
    155178*/ 
    156179 
    157 $IMConfig['thumbnail_dir'] = '.thumbs'; 
     180if ( @$IMConfig[ 'thumbnail_dir' ] == NULL ) 
     181        { 
     182        $IMConfig['thumbnail_dir'] = '.thumbs'; 
     183        } 
    158184 
    159185// ------------------------------------------------------------------------- 
     
    176202*/ 
    177203 
    178 $IMConfig['allow_new_dir'] = true; 
     204if ( @$IMConfig[ 'allow_new_dir' ] === NULL ) 
     205        { 
     206        $IMConfig['allow_new_dir'] = false; 
     207        } 
    179208 
    180209// ------------------------------------------------------------------------- 
     
    192221*/ 
    193222 
    194 $IMConfig['allow_upload'] = true; 
     223if ( @$IMConfig['allow_upload'] === NULL ) 
     224        { 
     225        $IMConfig['allow_upload'] = false; 
     226        } 
    195227 
    196228// ------------------------------------------------------------------------- 
     
    210242*/ 
    211243 
    212 $IMConfig['validate_images'] = true; 
     244if ( @$IMConfig[ 'validate_images' ] === NULL ) 
     245        { 
     246        $IMConfig['validate_images'] = true; 
     247        } 
    213248 
    214249// ------------------------------------------------------------------------- 
     
    221256*/ 
    222257 
    223 $IMConfig['default_thumbnail'] = 'img/default.gif'; 
     258if ( @$IMConfig['default_thumbnail'] == NULL ) 
     259        { 
     260        $IMConfig['default_thumbnail'] = 'img/default.gif'; 
     261        } 
    224262 
    225263// ------------------------------------------------------------------------- 
     
    229267*/ 
    230268 
    231 $IMConfig['thumbnail_width'] = 96; 
    232 $IMConfig['thumbnail_height'] = 96; 
     269if ( @$IMConfig['thumbnail_width'] == NULL ) 
     270        { 
     271        $IMConfig['thumbnail_width'] = 96; 
     272        $IMConfig['thumbnail_height'] = 96; 
     273        } 
    233274 
    234275// ------------------------------------------------------------------------- 
     
    240281*/ 
    241282 
    242 $IMConfig['tmp_prefix'] = '.editor_'; 
    243  
     283if ( @$IMConfig['tmp_prefix'] == NULL ) 
     284        { 
     285        $IMConfig['tmp_prefix'] = '.editor_'; 
     286        } 
     287 
     288// used to verify that the config has been loaded. 
    244289 
    245290define( "IM_CONFIG_LOADED", "yes" ); 
    246291 
    247 // bring in the debugging library 
    248  
    249 include_once( "ddt.php" ); 
     292// bring in the debugging library. 
     293 
     294include_once( XINHA_INSTALL_ROOT . "/ddt/ddt.php" ); 
    250295 
    251296// uncomment to send debug messages to a local file 
    252 _setDebugLog( "/tmp/debug_log.txt" ); 
    253  
    254 // turn debugging on everywhere. 
    255 _ddtOn(); 
     297// _setDebugLog( "/tmp/debug_log.txt" ); 
     298 
     299// uncomment to turn on debugging messages. 
     300//_ddtOn(); 
    256301 
    257302// END 
  • branches/unified_backend/plugins/ImageManager/editor.php

    r60 r121  
    1 <? 
     1<?php 
    22/** 
    33 * The PHP Image Editor user interface. 
     
    2121        <title></title> 
    2222<script type="text/javascript"> 
    23 _backend_url = "<? print $IMConfig['backend_url']; ?>"; 
     23_backend_url = "<?php print $IMConfig['backend_url']; ?>"; 
     24 
     25// This page is opened by a call to Dialog() in ImageManager/images.php in the  
     26// editImage() js function. (That Dialog() call is defined in ImageManager/assets/dialog.js 
     27// 
     28// The Dialog() call accepts an optional fourth parameter, the editor instance 
     29// that is raising this dialog. From there we can pull out the ImageManager instance and 
     30// get access to the ddt instance. This has an added benefit allowing us to 
     31// put all the previously free standing manager functions into the image manager class. 
     32 
     33_imgManager = window.opener.Dialog._editor.plugins[ "ImageManager" ].instance; 
     34 
     35_imgManager.ddt._ddt( "editor.php", "38", "top of editor.php file." ); 
     36 
    2437</script> 
    25         <link href="<? print $IMConfig['base_url'];?>assets/editor.css" rel="stylesheet" type="text/css" />      
    26 <script type="text/javascript" src="<? print $IMConfig['base_url'];?>assets/slider.js"></script> 
    27 <script type="text/javascript" src="<? print $IMConfig['base_url'];?>assets/popup.js"></script> 
     38        <link href="<?php print $IMConfig['base_url'];?>assets/editor.css" rel="stylesheet" type="text/css" />   
     39<script type="text/javascript" src="<?php print $IMConfig['base_url'];?>assets/slider.js"></script> 
     40<script type="text/javascript" src="<?php print $IMConfig['base_url'];?>assets/popup.js"></script> 
    2841<script type="text/javascript"> 
    2942/*<![CDATA[*/ 
     
    3447/*]]>*/ 
    3548</script> 
    36 <script type="text/javascript" src="<? print $IMConfig['base_url'];?>assets/editor.js"></script> 
     49<script type="text/javascript" src="<?php print $IMConfig['base_url'];?>assets/editor.js"></script> 
    3750</head> 
    3851 
    3952<body> 
    4053<div id="indicator"> 
    41 <img src="<? print $IMConfig['base_url'];?>img/spacer.gif" id="indicator_image" height="20" width="20" alt="" /> 
     54<img src="<?php print $IMConfig['base_url'];?>img/spacer.gif" id="indicator_image" height="20" width="20" alt="" /> 
    4255</div> 
    4356<div id="tools"> 
     
    4861                        <label for="cw">Width:</label><input type="text" id="cw" class="textInput" onchange="updateMarker('crop')"/> 
    4962                        <label for="ch">Height:</label><input type="text" id="ch" class="textInput" onchange="updateMarker('crop')"/> 
    50                         <img src="<? print $IMConfig['base_url'];?>img/div.gif" height="30" width="2" class="div" alt="|" /> 
     63                        <img src="<?php print $IMConfig['base_url'];?>img/div.gif" height="30" width="2" class="div" alt="|" /> 
    5164                </div>   
    52                 <a href="javascript: editor.doSubmit('crop');" class="buttons" title="OK"><img src="<? print $IMConfig['base_url'];?>img/btn_ok.gif" height="30" width="30" alt="OK" /></a> 
    53                 <a href="javascript: editor.reset();" class="buttons" title="Cancel"><img src="<? print $IMConfig['base_url'];?>img/btn_cancel.gif" height="30" width="30" alt="Cancel" /></a>           
     65                <a href="javascript: editor.doSubmit('crop');" class="buttons" title="OK"><img src="<?php print $IMConfig['base_url'];?>img/btn_ok.gif" height="30" width="30" alt="OK" /></a> 
     66                <a href="javascript: editor.reset();" class="buttons" title="Cancel"><img src="<?php print $IMConfig['base_url'];?>img/btn_cancel.gif" height="30" width="30" alt="Cancel" /></a>                
    5467        </div>   
    5568        <div id="tools_scale" style="display:none;"> 
    5669                <div id="tool_inputs"> 
    5770                        <label for="sw">Width:</label><input type="text" id="sw" class="textInput" onchange="checkConstrains('width')"/> 
    58                         <a href="javascript:toggleConstraints();" title="Lock"><img src="<? print $IMConfig['base_url'];?>img/islocked2.gif" id="scaleConstImg" height="14" width="8" alt="Lock" class="div" /></a><label for="sh">Height:</label> 
     71                        <a href="javascript:toggleConstraints();" title="Lock"><img src="<?php print $IMConfig['base_url'];?>img/islocked2.gif" id="scaleConstImg" height="14" width="8" alt="Lock" class="div" /></a><label for="sh">Height:</label> 
    5972                        <input type="text" id="sh" class="textInput" onchange="checkConstrains('height')"/> 
    6073                        <input type="checkbox" id="constProp" value="1" checked="checked" onclick="toggleConstraints()"/> 
    6174                        <label for="constProp">Constrain Proportions</label> 
    62                         <img src="<? print $IMConfig['base_url'];?>img/div.gif" height="30" width="2" class="div" alt="|" /> 
     75                        <img src="<?php print $IMConfig['base_url'];?>img/div.gif" height="30" width="2" class="div" alt="|" /> 
    6376                </div>   
    64                 <a href="javascript: editor.doSubmit('scale');" class="buttons" title="OK"><img src="<? print $IMConfig['base_url'];?>img/btn_ok.gif" height="30" width="30" alt="OK" /></a> 
    65                 <a href="javascript: editor.reset();" class="buttons" title="Cancel"><img src="<? print $IMConfig['base_url'];?>img/btn_cancel.gif" height="30" width="30" alt="Cancel" /></a>           
     77                <a href="javascript: editor.doSubmit('scale');" class="buttons" title="OK"><img src="<?php print $IMConfig['base_url'];?>img/btn_ok.gif" height="30" width="30" alt="OK" /></a> 
     78                <a href="javascript: editor.reset();" class="buttons" title="Cancel"><img src="<?php print $IMConfig['base_url'];?>img/btn_cancel.gif" height="30" width="30" alt="Cancel" /></a>                
    6679        </div>   
    6780        <div id="tools_rotate" style="display:none;"> 
     
    8295         </select> 
    8396                        <label for="ra">Angle:</label><input type="text" id="ra" class="textInput" /> 
    84                         <img src="<? print $IMConfig['base_url'];?>img/div.gif" height="30" width="2" class="div" alt="|" /> 
     97                        <img src="<?php print $IMConfig['base_url'];?>img/div.gif" height="30" width="2" class="div" alt="|" /> 
    8598                </div>   
    86                 <a href="javascript: editor.doSubmit('rotate');" class="buttons" title="OK"><img src="<? print $IMConfig['base_url'];?>img/btn_ok.gif" height="30" width="30" alt="OK" /></a> 
    87                 <a href="javascript: editor.reset();" class="buttons" title="Cancel"><img src="<? print $IMConfig['base_url'];?>img/btn_cancel.gif" height="30" width="30" alt="Cancel" /></a>           
     99                <a href="javascript: editor.doSubmit('rotate');" class="buttons" title="OK"><img src="<?php print $IMConfig['base_url'];?>img/btn_ok.gif" height="30" width="30" alt="OK" /></a> 
     100                <a href="javascript: editor.reset();" class="buttons" title="Cancel"><img src="<?php print $IMConfig['base_url'];?>img/btn_cancel.gif" height="30" width="30" alt="Cancel" /></a>                
    88101        </div>           
    89102        <div id="tools_measure" style="display:none;"> 
     
    91104                        <label>X:</label><input type="text" class="measureStats" id="sx" /> 
    92105                        <label>Y:</label><input type="text" class="measureStats" id="sy" /> 
    93                         <img src="<? print $IMConfig['base_url'];?>img/div.gif" height="30" width="2" class="div" alt="|" /> 
     106                        <img src="<?php print $IMConfig['base_url'];?>img/div.gif" height="30" width="2" class="div" alt="|" /> 
    94107                        <label>W:</label><input type="text" class="measureStats" id="mw" /> 
    95108                        <label>H:</label><input type="text" class="measureStats" id="mh" /> 
    96                         <img src="<? print $IMConfig['base_url'];?>img/div.gif" height="30" width="2" class="div" alt="|" /> 
     109                        <img src="<?php print $IMConfig['base_url'];?>img/div.gif" height="30" width="2" class="div" alt="|" /> 
    97110                        <label>A:</label><input type="text" class="measureStats" id="ma" />              
    98111                        <label>D:</label><input type="text" class="measureStats" id="md" />              
    99                         <img src="<? print $IMConfig['base_url'];?>img/div.gif" height="30" width="2" class="div" alt="|" /> 
     112                        <img src="<?php print $IMConfig['base_url'];?>img/div.gif" height="30" width="2" class="div" alt="|" /> 
    100113                        <button type="button" onclick="editor.reset();" >Clear</button> 
    101114                </div>   
     
    103116        <div id="tools_save" style="display:none;"> 
    104117                <div id="tool_inputs"> 
    105                         <label for="save_filename">Filename:</label><input type="text" id="save_filename" value="<? echo $editor->getDefaultSaveFile();?>"/> 
     118                        <label for="save_filename">Filename:</label><input type="text" id="save_filename" value="<?php echo $editor->getDefaultSaveFile();?>"/> 
    106119                        <select name="format" id="save_format" style="margin-left: 10px; vertical-align: middle;" onchange="updateFormat(this)"> 
    107120            <option value="" selected>Image Format</option> 
     
    111124            <option value="jpeg,35">JPEG Low</option> 
    112125            <option value="png">PNG</option> 
    113                         <? if($editor->isGDGIFAble() != -1) { ?> 
     126                        <?php if($editor->isGDGIFAble() != -1) { ?> 
    114127            <option value="gif">GIF</option> 
    115                         <? } ?> 
     128                        <?php } ?> 
    116129         </select> 
    117130                        <label>Quality:</label> 
     
    120133                                <td> 
    121134                                        <div id="slidercasing">  
    122                                 <div id="slidertrack" style="width:100px"><img src="<? print $IMConfig['base_url'];?>img/spacer.gif" width="1" height="1" border="0" alt="track"></div> 
    123             <div id="sliderbar" style="left:85px" onmousedown="captureStart();"><img src="<? print $IMConfig['base_url'];?>img/spacer.gif" width="1" height="1" border="0" alt="track"></div> 
     135                                <div id="slidertrack" style="width:100px"><img src="<?php print $IMConfig['base_url'];?>img/spacer.gif" width="1" height="1" border="0" alt="track"></div> 
     136            <div id="sliderbar" style="left:85px" onmousedown="captureStart();"><img src="<?php print $IMConfig['base_url'];?>img/spacer.gif" width="1" height="1" border="0" alt="track"></div> 
    124137                        </div>   
    125138                                </td> 
     
    127140                        </table>                                 
    128141                        <input type="text" id="quality" onchange="updateSlider(this.value)" style="width: 2em;" value="85"/> 
    129                         <img src="<? print $IMConfig['base_url'];?>img/div.gif" height="30" width="2" class="div" alt="|" /> 
     142                        <img src="<?php print $IMConfig['base_url'];?>img/div.gif" height="30" width="2" class="div" alt="|" /> 
    130143                </div>   
    131                 <a href="javascript: editor.doSubmit('save');" class="buttons" title="OK"><img src="<? print $IMConfig['base_url'];?>img/btn_ok.gif" height="30" width="30" alt="OK" /></a> 
    132                 <a href="javascript: editor.reset();" class="buttons" title="Cancel"><img src="<? print $IMConfig['base_url'];?>img/btn_cancel.gif" height="30" width="30" alt="Cancel" /></a>           
     144                <a href="javascript: editor.doSubmit('save');" class="buttons" title="OK"><img src="<?php print $IMConfig['base_url'];?>img/btn_ok.gif" height="30" width="30" alt="OK" /></a> 
     145                <a href="javascript: editor.reset();" class="buttons" title="Cancel"><img src="<?php print $IMConfig['base_url'];?>img/btn_cancel.gif" height="30" width="30" alt="Cancel" /></a>                
    133146        </div>   
    134147</div> 
    135148<div id="toolbar"> 
    136 <a href="javascript:toggle('crop')" id="icon_crop" title="Crop"><img src="<? print $IMConfig['base_url'];?>img/crop.gif" height="20" width="20" alt="Crop" /><span>Crop</span></a> 
    137 <a href="javascript:toggle('scale')" id="icon_scale" title="Resize"><img src="<? print $IMConfig['base_url'];?>img/scale.gif" height="20" width="20" alt="Resize" /><span>Resize</span></a> 
    138 <a href="javascript:toggle('rotate')" id="icon_rotate" title="Rotate"><img src="<? print $IMConfig['base_url'];?>img/rotate.gif" height="20" width="20" alt="Rotate" /><span>Rotate</span></a> 
    139 <a href="javascript:toggle('measure')" id="icon_measure" title="Measure"><img src="<? print $IMConfig['base_url'];?>img/measure.gif" height="20" width="20" alt="Measure" /><span>Measure</span></a> 
    140 <a href="javascript: toggleMarker();" title="Marker"><img id="markerImg" src="<? print $IMConfig['base_url'];?>img/t_black.gif" height="20" width="20" alt="Marker" /><span>Marker</span></a> 
    141 <a href="javascript:toggle('save')" id="icon_save" title="Save"><img src="<? print $IMConfig['base_url'];?>img/save.gif" height="20" width="20" alt="Save" /><span>Save</span></a> 
     149<a href="javascript:toggle('crop')" id="icon_crop" title="Crop"><img src="<?php print $IMConfig['base_url'];?>img/crop.gif" height="20" width="20" alt="Crop" /><span>Crop</span></a> 
     150<a href="javascript:toggle('scale')" id="icon_scale" title="Resize"><img src="<?php print $IMConfig['base_url'];?>img/scale.gif" height="20" width="20" alt="Resize" /><span>Resize</span></a> 
     151<a href="javascript:toggle('rotate')" id="icon_rotate" title="Rotate"><img src="<?php print $IMConfig['base_url'];?>img/rotate.gif" height="20" width="20" alt="Rotate" /><span>Rotate</span></a> 
     152<a href="javascript:toggle('measure')" id="icon_measure" title="Measure"><img src="<?php print $IMConfig['base_url'];?>img/measure.gif" height="20" width="20" alt="Measure" /><span>Measure</span></a> 
     153<a href="javascript: toggleMarker();" title="Marker"><img id="markerImg" src="<?php print $IMConfig['base_url'];?>img/t_black.gif" height="20" width="20" alt="Marker" /><span>Marker</span></a> 
     154<a href="javascript:toggle('save')" id="icon_save" title="Save"><img src="<?php print $IMConfig['base_url'];?>img/save.gif" height="20" width="20" alt="Save" /><span>Save</span></a> 
    142155</div> 
    143156<div id="contents"> 
    144 <iframe src="<? print $IMConfig['backend_url']; ?>__function=editorFrame&img=<? if(isset($_GET['img'])) echo rawurlencode($_GET['img']); ?>" name="editor" id="editor"  scrolling="auto" title="Image Editor" frameborder="0"></iframe> 
     157<iframe src="<?php print $IMConfig['backend_url']; ?>__function=editorFrame&img=<?php if(isset($_GET['img'])) echo rawurlencode($_GET['img']); ?>" name="editor" id="editor"  scrolling="auto" title="Image Editor" frameborder="0"></iframe> 
    145158</div> 
    146159<div id="bottom"></div> 
  • branches/unified_backend/plugins/ImageManager/image-manager.js

    r60 r121  
    1 /** 
    2  * The ImageManager plugin javascript. 
    3  * @author $Author: Wei Zhuo $ 
    4  * @version $Id: image-manager.js 26 2004-03-31 02:35:21Z Wei Zhuo $ 
    5  * @package ImageManager 
    6  */ 
    7  
    8 /** 
    9  * To Enable the plug-in add the following line before HTMLArea is initialised. 
    10  * 
    11  * HTMLArea.loadPlugin("ImageManager"); 
    12  * 
    13  * Then configure the config.inc.php file, that is all. 
    14  * For up-to-date documentation, please visit http://www.zhuo.org/htmlarea/ 
    15  */ 
    16  
    17 /** 
    18  * It is pretty simple, this file over rides the HTMLArea.prototype._insertImage 
    19  * function with our own, only difference is the popupDialog url 
    20  * point that to the php script. 
    21  */ 
    22  
    23 function ImageManager(editor) 
    24 { 
    25  
    26 }; 
    27  
    28 ImageManager._pluginInfo = { 
     1 
     2// tabs: 3 
     3 
     4/** 
     5* @fileoverview  The ImageManager plugin javascript. 
     6* 
     7* This plugin implements a client side image manager and editor. 
     8* 
     9* @version $Id: image-manager.js 26 2004-03-31 02:35:21Z Wei Zhuo $ 
     10* @package ImageManager 
     11* @author $Author: Wei Zhuo $ 
     12* @author Yermo Lamers http://www.formvista.com (unified backend modifications) 
     13*/ 
     14 
     15/** 
     16* To Enable the plug-in add the following line before HTMLArea is initialised. 
     17* 
     18* HTMLArea.loadPlugin("ImageManager"); 
     19* 
     20* Then configure the config.inc.php file, that is all. 
     21* For up-to-date documentation, please visit http://www.zhuo.org/htmlarea/ 
     22*/ 
     23 
     24// ----------------------------------------------------------------- 
     25 
     26/** 
     27* pluginInfo for about box. 
     28*/ 
     29 
     30ImageManager._pluginInfo =  
     31        { 
    2932        name          : "ImageManager", 
    3033        version       : "1.0", 
     
    3235        developer_url : "http://www.zhuo.org/htmlarea/", 
    3336        license       : "htmlArea" 
    34 }; 
    35  
    36 // default Xinha layout. plugins are beneath the Xinha directory. 
    37 // Note the trailing &. Makes forming our URL's easier.  
    38 // 
    39 // To change the backend, just set this config variable in the calling page. 
    40 // The images_url config option is used to strip out the directory info when 
    41 // images are selected from the document. 
     37        }; 
     38 
     39/** 
     40* ImageManager plugin configuration 
     41* 
     42* default Xinha layout. plugins are beneath the Xinha directory. 
     43* all plugin requests are routed through a single entry point. 
     44* 
     45* Note the trailing &. Makes forming our URL's easier.  
     46* 
     47* To change the backend, just set this config variable in the calling page. 
     48* The images_url config option is used to strip out the directory info when 
     49* images are selected from the document. 
     50*/ 
    4251 
    4352HTMLArea.Config.prototype.ImageManager = 
    44 { 
    45   'backend' : _editor_url + 'plugins/ImageManager/backend.php?__plugin=ImageManager&', 
    46   'images_url' : _editor_url + 'plugins/ImageManager/demo_images' 
    47 } 
    48  
    49 // Over ride the _insertImage function in htmlarea.js. 
    50 // Open up the ImageManger script instead. 
    51  
    52 HTMLArea.prototype._insertImage = function(image) { 
     53        { 
     54 
     55        // the backend URL may already include variables. 
     56 
     57        'backend' : _editor_backend + ( _editor_backend.match(/.*\?.*/) ? "&" : "?" ) + '__plugin=ImageManager&', 
     58        'images_url' : _editor_url + 'examples/images' 
     59 
     60        } 
     61 
     62/** 
     63* It is pretty simple, this file over rides the HTMLArea.prototype._insertImage 
     64* function with our own, only difference is the popupDialog url 
     65* point that to the php script. 
     66* 
     67* @class Image Manager Plugin. 
     68*/ 
     69 
     70function ImageManager(editor) 
     71        { 
     72 
     73        this.editor = editor; 
     74 
     75        // [STRIP 
     76        // create a ddt debug trace object. There may be multiple editors on  
     77        // the page each with an ImageManager .. to distinguish which instance 
     78        // is generating the message we tack on the name of the textarea. 
     79 
     80        this.ddt = new DDT( editor._textArea + ":ImageManager Plugin" ); 
     81 
     82        // uncomment to turn on debugging messages. 
     83  
     84        this.ddt._ddtOn(); 
     85 
     86        this.ddt._ddt( "image-manager.js","86", "ImageManager(): constructor" ); 
     87 
     88        // STRIP] 
     89 
     90        }; 
     91 
     92// ---------------------------------------------------------------- 
     93 
     94/** 
     95* Override the _insertImage function in htmlarea.js. 
     96* 
     97* If no image is selected, the image parameter will be null. If  
     98* an image is selected (right click->image properties for instance) 
     99* then image will contain the selected image. 
     100* 
     101* @todo figure out how to get to editor object from Dialog function. 
     102*/ 
     103 
     104HTMLArea.prototype._insertImage = function(image)  
     105        { 
     106 
     107        this.ddt._ddt( "image-manager.js","107", "_insertImage(): top" ); 
    53108 
    54109        var editor = this;      // for nested functions 
    55110        var outparam = null; 
    56         if (typeof image == "undefined") { 
     111 
     112        if (typeof image == "undefined")  
     113                { 
     114                this.ddt._ddt( "image-manager.js","114", "_insertImage(): no image." ); 
    57115                image = this.getParentElement(); 
     116 
    58117                if (image && !/^img$/i.test(image.tagName)) 
    59118                        image = null; 
    60         } 
     119                } 
    61120 
    62121        // the selection will have the absolute url to the image.  
     
    81140 
    82141                        var images_url = editor.config.ImageManager.images_url.replace( /https?:\/\/[^\/]*/, "" ); 
    83  
    84                         // alert( "images_url is '" + images_url + "'" ); 
    85  
    86142                        var image_regex = new RegExp( images_url ); 
    87  
    88                         // alert(" regex is '" + image_regex.source + "'" ); 
    89  
    90143                        image_src = image_src.replace( image_regex, "" ); 
    91144 
    92                         // alert( "new source is " + image_src ); 
     145                        this.ddt._ddt( "image-manager.js","145", "_insertImage(): new source is " + image_src ); 
    93146                        } 
    94147         
     
    112165        // actual config variable in each place .. for now this is good enough. 
    113166 
    114         // alert( "backend is '" + editor.config.ImageManager.backend + "'" ); 
     167        this.ddt._ddt( "image-manager.js","167", "_insertImage(): backend is '" + editor.config.ImageManager.backend + "'" ); 
    115168 
    116169        var manager = editor.config.ImageManager.backend + '__function=manager'; 
    117170 
    118         Dialog(manager, function(param) { 
    119                 if (!param) {   // user must have pressed Cancel 
    120                         return false; 
    121                 } 
    122                 var img = image; 
    123                 if (!img) { 
    124                         var sel = editor._getSelection(); 
    125                         var range = editor._createRange(sel);                    
    126                         editor._doc.execCommand("insertimage", false, param.f_url); 
    127                         if (HTMLArea.is_ie) { 
    128                                 img = range.parentElement(); 
    129                                 // wonder if this works... 
    130                                 if (img.tagName.toLowerCase() != "img") { 
    131                                         img = img.previousSibling; 
     171        // NOTE the extremely long function as parameter #2 to Dialog() here. 
     172        // javascript scoping rules seem really messy. editor is available within 
     173        // this function ..  
     174 
     175        Dialog( manager,  
     176                function(param)  
     177                        { 
     178 
     179      // [STRIP 
     180                        // 
     181      // we want to use the ImageManager DDT instance to output these 
     182                        // debug messages (so we can turn off all ImageManager plugin debug messages 
     183                        // from one spot). To get that object we need to go through the 
     184                        // editor object to the plugins array (see htlarea.js HTMLArea() constructor line 
     185                        //  ~2559 as of this writing) to the named plugin (ImageManager), to the plugin 
     186                        // instance to the ddt instance. 
     187 
     188                        var ddt = editor.plugins[ 'ImageManager'].instance.ddt; 
     189 
     190                        // STRIP] 
     191 
     192                        ddt._ddt( "image-manager.js","192", "Dialog() parm: top" ); 
     193 
     194                        if (!param)  
     195                                {        // user must have pressed Cancel 
     196                                return false; 
    132197                                } 
    133                         } else { 
    134                                 img = range.startContainer.previousSibling; 
    135                         } 
    136                 } else {                         
    137                         img.src = param.f_url; 
    138                 } 
     198 
     199                        var img = image; 
     200 
     201                        if (!img)  
     202                                { 
     203                                var sel = editor._getSelection(); 
     204                                var range = editor._createRange(sel);                    
     205 
     206                                ddt._ddt( "image-manager.js","206", "_insertImage(): execing insertImage" ); 
     207 
     208                                editor._doc.execCommand("insertimage", false, param.f_url); 
     209 
     210                                if (HTMLArea.is_ie)  
     211                                        { 
     212                                        img = range.parentElement(); 
     213 
     214                                        // wonder if this works... 
     215 
     216                                        if (img.tagName.toLowerCase() != "img")  
     217                                                { 
     218                                                img = img.previousSibling; 
     219                                                } 
     220                                        }  
     221                                else  
     222                                        { 
     223                                        img = range.startContainer.previousSibling; 
     224                                        } 
     225                                }  
     226                        else  
     227                                {                        
     228                                img.src = param.f_url; 
     229                                } 
    139230                 
    140                 for (field in param) { 
    141                         var value = param[field]; 
    142                         switch (field) { 
    143                             case "f_alt"    : img.alt    = value; break; 
    144                             case "f_border" : img.border = parseInt(value || "0"); break; 
    145                             case "f_align"  : img.align  = value; break; 
    146                             case "f_vert"   : img.vspace = parseInt(value || "0"); break; 
    147                             case "f_horiz"  : img.hspace = parseInt(value || "0"); break; 
    148                                 case "f_width"  : img.width = parseInt(value || "0"); break; 
    149                                 case "f_height"  : img.height = parseInt(value || "0"); break; 
    150                         } 
    151                 } 
    152                  
    153                  
    154         }, outparam); 
    155 }; 
    156  
    157  
     231                        for (field in param)  
     232                                { 
     233                                var value = param[field]; 
     234 
     235                                switch (field)  
     236                                        { 
     237                                   case "f_alt"    : img.alt     = value; break; 
     238                                   case "f_border" : img.border = parseInt(value || "0"); break; 
     239                                   case "f_align"  : img.align   = value; break; 
     240                                   case "f_vert"   : img.vspace = parseInt(value || "0"); break; 
     241                                   case "f_horiz"  : img.hspace = parseInt(value || "0"); break; 
     242                                        case "f_width"  : img.width = parseInt(value || "0"); break; 
     243                                        case "f_height"  : img.height = parseInt(value || "0"); break; 
     244                                        } 
     245                                } 
     246 
     247      ddt._ddt( "image-manager.js","247", "end of Dialog() parm function" ); 
     248                                         
     249                        }, outparam, editor);   // end of Dialog() parm. 
     250 
     251        };      // end of _insertImage(); 
     252 
     253// END 
  • branches/unified_backend/plugins/ImageManager/images.php

    r60 r121  
    88 
    99require_once('config.inc.php'); 
    10 require_once('ddt.php'); 
     10require_once(XINHA_INSTALL_ROOT . '/ddt/ddt.php'); 
    1111require_once('Classes/ImageManager.php'); 
    1212 
     
    4242$manager = new ImageManager($IMConfig); 
    4343 
    44  
    4544//get the list of files and directories 
    4645$list = $manager->getFiles($relative); 
    47  
    4846 
    4947/* ================= OUTPUT/DRAW FUNCTIONS ======================= */ 
     
    6260                <td> 
    6361 
    64                 <? _ddt( __FILE__, __LINE__, "drawFiles(): relative is '" . $file['relative'] . "' thumbnail '" . $manager->getThumbnail($file['relative']) . "'" ); ?> 
     62                <?php _ddt( __FILE__, __LINE__, "drawFiles(): relative is '" . $file['relative'] . "' thumbnail '" . $manager->getThumbnail($file['relative']) . "'" ); ?> 
    6563 
    6664                <table width="100" cellpadding="0" cellspacing="0"><tr><td class="block"> 
    6765 
    68                 <a href="javascript:;" onclick="selectImage('<? echo $file['relative'];?>', '<? echo $entry; ?>', <? echo $file['image'][0];?>, <? echo $file['image'][1]; ?>);"title="<? echo $entry; ?> - <? echo Files::formatSize($file['stat']['size']); ?>"><img src="<? print $manager->getThumbnail($file['relative']); ?>" alt="<? echo $entry; ?> - <? echo Files::formatSize($file['stat']['size']); ?>"/></a> 
     66                <a href="javascript:;" onclick="selectImage('<?php echo $file['relative'];?>', '<?php echo $entry; ?>', <?php echo $file['image'][0];?>, <?php echo $file['image'][1]; ?>);"title="<?php echo $entry; ?> - <?php echo Files::formatSize($file['stat']['size']); ?>"><img src="<?php print $manager->getThumbnail($file['relative']); ?>" alt="<?php echo $entry; ?> - <?php echo Files::formatSize($file['stat']['size']); ?>"/></a> 
    6967                </td></tr><tr><td class="edit"> 
    70                         <a href="<? print $IMConfig['backend_url']; ?>__function=images&dir=<? echo $relative; ?>&amp;delf=<? echo rawurlencode($file['relative']);?>" title="Trash" onclick="return confirmDeleteFile('<? echo $entry; ?>');"><img src="<? print $IMConfig['base_url'];?>img/edit_trash.gif" height="15" width="15" alt="Trash"/></a><a href="javascript:;" title="Edit" onclick="editImage('<? echo rawurlencode($file['relative']);?>');"><img src="<? print $IMConfig['base_url'];?>img/edit_pencil.gif" height="15" width="15" alt="Edit"/></a> 
    71                 <? if($file['image']){ echo $file['image'][0].'x'.$file['image'][1]; } else echo $entry;?> 
     68                        <a href="<?php echo $IMConfig['backend_url']; ?>__function=images&dir=<?php echo $relative; ?>&amp;delf=<?php echo rawurlencode($file['relative']);?>" title="Trash" onclick="return confirmDeleteFile('<?php echo $entry; ?>');"><img src="<?php print $IMConfig['base_url'];?>img/edit_trash.gif" height="15" width="15" alt="Trash"/></a><a href="javascript:;" title="Edit" onclick="editImage('<?php echo rawurlencode($file['relative']);?>');"><img src="<?php print $IMConfig['base_url'];?>img/edit_pencil.gif" height="15" width="15" alt="Edit"/></a> 
     69                <?php if($file['image']){ echo $file['image'][0].'x'.$file['image'][1]; } else echo $entry;?> 
    7270                </td></tr></table></td>  
    73           <?  
     71          <?php  
    7472        }//foreach 
    7573}//function drawFiles 
     
    7775 
    7876/** 
    79  * Draw the directory. 
    80  */ 
     77* Draw the directory. 
     78*/ 
     79 
    8180function drawDirs($list, &$manager)  
    8281{ 
     
    8786        { ?> 
    8887                <td><table width="100" cellpadding="0" cellspacing="0"><tr><td class="block"> 
    89                 <a href="images.php?dir=<? echo rawurlencode($path); ?>" onclick="updateDir('<? echo $path; ?>')" title="<? echo $dir['entry']; ?>"><img src="<? print $IMConfig['base_url'];?>img/folder.gif" height="80" width="80" alt="<? echo $dir['entry']; ?>" /></a> 
     88                <a href="<?php print $IMConfig['backend_url']; ?>__function=images&dir=<?php echo rawurlencode($path); ?>" onclick="updateDir('<?php echo $path; ?>')" title="<?php echo $dir['entry']; ?>"><img src="<?php print $IMConfig['base_url'];?>img/folder.gif" height="80" width="80" alt="<?php echo $dir['entry']; ?>" /></a> 
    9089                </td></tr><tr> 
    9190                <td class="edit"> 
    92                         <a href="images.php?dir=<? echo $relative; ?>&amp;deld=<? echo rawurlencode($path); ?>" title="Trash" onclick="return confirmDeleteDir('<? echo $dir['entry']; ?>', <? echo $dir['count']; ?>);"><img src="<? print $IMConfig['base_url'];?>img/edit_trash.gif" height="15" width="15" alt="Trash"/></a> 
    93                         <? echo $dir['entry']; ?> 
     91                        <a href="<?php print $IMConfig['backend_url']; ?>__function=editor&dir=<?php echo $relative; ?>&amp;deld=<?php echo rawurlencode($path); ?>" title="Trash" onclick="return confirmDeleteDir('<?php echo $dir['entry']; ?>', <?php echo $dir['count']; ?>);"><img src="<?php print $IMConfig['base_url'];?>img/edit_trash.gif" height="15" width="15" alt="Trash"/></a> 
     92                        <?php echo $dir['entry']; ?> 
    9493                </td> 
    9594                </tr></table></td> 
    96           <?  
     95          <?php  
    9796        } //foreach 
    9897}//function drawDirs 
     
    121120<table width="100%"> 
    122121  <tr> 
    123     <td class="error">Invalid base directory: <? echo $manager->config['images_dir']; ?></td> 
     122    <td class="error">Invalid base directory: <?php echo $manager->config['images_dir']; ?></td> 
    124123  </tr> 
    125124</table> 
     
    134133        <title>Image List</title> 
    135134  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    136         <link href="<? print $IMConfig['base_url'];?>assets/imagelist.css" rel="stylesheet" type="text/css" /> 
     135        <link href="<?php print $IMConfig['base_url'];?>assets/imagelist.css" rel="stylesheet" type="text/css" /> 
    137136<script type="text/javascript"> 
    138 _backend_url = "<? print $IMConfig['backend_url']; ?>"; 
     137_backend_url = "<?php print $IMConfig['backend_url']; ?>"; 
     138 
     139// This page is a frame inside manager.php. 
     140// 
     141// our parent frame (manager.php) has an _imgManager reference that we need to  
     142// import here. _imgManager has an .editor member that allows us to get to the editor 
     143// instance we're working with if we need it. 
     144 
     145_imgManager = top._imgManager; 
     146 
     147_imgManager.ddt._ddt( "images.php", "38", "top of file after _imgManager from top frame." ); 
     148 
    139149</script> 
    140150 
    141 <script type="text/javascript" src="<? print $IMConfig['base_url'];?>assets/dialog.js"></script> 
     151<script type="text/javascript" src="<?php print $IMConfig['base_url'];?>assets/dialog.js"></script> 
    142152<script type="text/javascript"> 
    143153/*<![CDATA[*/ 
     
    147157 
    148158        function hideMessage() 
    149         { 
     159                { 
     160 
     161                _imgManager.ddt._ddt( "images.php", "38", "hideMessage(): top" ); 
     162 
    150163                var topDoc = window.top.document; 
    151164                var messages = topDoc.getElementById('messages'); 
    152165                if(messages) 
    153166                        messages.style.display = "none"; 
    154         } 
     167                } 
    155168 
    156169        init = function() 
    157         { 
     170                { 
     171 
     172                _imgManager.ddt._ddt( "images.php", "38", "init(): top" ); 
     173 
    158174                hideMessage(); 
    159175                var topDoc = window.top.document; 
    160176 
    161 <?  
     177<?php  
    162178        //we need to refesh the drop directory list 
    163179        //save the current dir, delete all select options 
     
    167183                $dirs = $manager->getDirs(); 
    168184?> 
     185 
     186                _imgManager.ddt._ddt( "images.php", "38", "init(): refreshDir section" ); 
     187 
    169188                var selection = topDoc.getElementById('dirPath'); 
    170189                var currentDir = selection.options[selection.selectedIndex].text; 
    171190 
    172191                while(selection.length > 0) 
    173                 {       selection.remove(0); } 
     192                        {        
     193                        selection.remove(0);  
     194                        } 
    174195                 
    175                 selection.options[selection.length] = new Option("/","<? echo rawurlencode('/'); ?>");   
    176                 <? foreach($dirs as $relative=>$fullpath) { ?> 
    177                 selection.options[selection.length] = new Option("<? echo $relative; ?>","<? echo rawurlencode($relative); ?>");                 
    178                 <? } ?> 
     196                selection.options[selection.length] = new Option("/","<?php echo rawurlencode('/'); ?>");        
     197 
     198                <?php foreach($dirs as $relative=>$fullpath) { ?> 
     199                        selection.options[selection.length] = new Option("<?php echo $relative; ?>","<?php echo rawurlencode($relative); ?>");           
     200                <?php } ?> 
    179201                 
    180202                for(var i = 0; i < selection.length; i++) 
     
    187209                        } 
    188210                }                
    189 <? } ?> 
     211<?php } ?> 
    190212        }        
    191213 
    192214        function editImage(image)  
    193         { 
    194                 var url = "<? print $IMConfig['backend_url']; ?>__function=editor&img="+image; 
    195                 Dialog(url, function(param)  
    196                 { 
    197                         if (!param) // user must have pressed Cancel 
    198                                 return false; 
    199                         else 
    200                         { 
    201                                 return true; 
    202                         } 
    203                 }, null);                
    204         } 
     215                { 
     216 
     217                _imgManager.ddt._ddt( "images.php", "38", "editImage(): top with image '" + image + "'" ); 
     218 
     219                var url = "<?php echo $IMConfig['backend_url']; ?>__function=editor&img="+image; 
     220 
     221                // we have to propagate the editor object through. 
     222 
     223                Dialog(url,  
     224                        function(param)  
     225                                { 
     226                                if (!param) // user must have pressed Cancel 
     227                                        return false; 
     228                                else 
     229                                        { 
     230                                        return true; 
     231                                        } 
     232                                }, null, _imgManager.editor);            
     233 
     234                } // end of editImage() 
    205235 
    206236/*]]>*/ 
    207237</script> 
    208 <script type="text/javascript" src="<? print $IMConfig['base_url'];?>assets/images.js"></script> 
     238<script type="text/javascript" src="<?php print $IMConfig['base_url'];?>assets/images.js"></script> 
    209239</head> 
    210240 
    211241<body> 
    212 <? if ($manager->isValidBase() == false) { drawErrorBase($manager); }  
     242<?php if ($manager->isValidBase() == false) { drawErrorBase($manager); }  
    213243        elseif(count($list[0]) > 0 || count($list[1]) > 0) { ?> 
    214244<table> 
    215245        <tr> 
    216         <? drawDirs($list[0], $manager); ?> 
    217         <? drawFiles($list[1], $manager); ?> 
     246        <?php drawDirs($list[0], $manager); ?> 
     247        <?php drawFiles($list[1], $manager); ?> 
    218248        </tr> 
    219249</table> 
    220 <? } else { drawNoResults(); } ?> 
     250<?php } else { drawNoResults(); } ?> 
    221251</body> 
    222252</html> 
  • branches/unified_backend/plugins/ImageManager/manager.php

    r60 r121  
    11<? 
    22/** 
    3  * The main GUI for the ImageManager. 
    4  * @author $Author: Wei Zhuo $ 
    5  * @version $Id: manager.php 26 2004-03-31 02:35:21Z Wei Zhuo $ 
    6  * @package ImageManager 
    7  */ 
     3* The main GUI for the ImageManager. 
     4* @author $Author: Wei Zhuo $ 
     5* @version $Id: manager.php 26 2004-03-31 02:35:21Z Wei Zhuo $ 
     6* @package ImageManager 
     7*/ 
    88 
    9         require_once('config.inc.php'); 
    10         require_once('ddt.php'); 
    11         require_once('Classes/ImageManager.php'); 
     9require_once('config.inc.php'); 
     10require_once(XINHA_INSTALL_ROOT . '/ddt/ddt.php'); 
     11require_once('Classes/ImageManager.php'); 
    1212         
    13         $manager = new ImageManager($IMConfig); 
    14         $dirs = $manager->getDirs(); 
     13$manager = new ImageManager($IMConfig); 
     14$dirs = $manager->getDirs(); 
    1515 
    1616?> 
     
    2222<script type="text/javascript"> 
    2323 
    24 <? // temporary. An ImageManager rewrite will take care of this kludge. ?> 
     24<?php // temporary. An ImageManager rewrite will take care of this kludge. ?> 
    2525 
    26 _backend_url = "<? print $IMConfig['backend_url']; ?>"; 
     26_backend_url = "<?php print $IMConfig['backend_url']; ?>"; 
     27 
     28// This page is opened by a call to Dialog() in xinha/dialog.js. Subsequent 
     29// dialogs are opened using the version in ImageManager/assets/dialog.js. 
     30// 
     31// The Dialog() call accepts an optional fourth parameter, the editor instance 
     32// that is raising this dialog. From there we can pull out the ImageManager instance and 
     33// get access to the ddt instance. This has an added benefit allowing us to 
     34// put all the previously free standing manager functions into the image manager class. 
     35 
     36_imgManager = window.opener.Dialog._editor.plugins[ "ImageManager" ].instance; 
     37 
     38_imgManager.ddt._ddt( "manager.php", "38", "top of file after getting imgManager reference." ); 
     39 
    2740</script> 
    28   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    29  <link href="<? print $IMConfig['base_url'];?>assets/manager.css" rel="stylesheet" type="text/css" />    
    30 <script type="text/javascript" src="<? print $IMConfig['base_url'];?>assets/popup.js"></script> 
    31 <script type="text/javascript" src="<? print $IMConfig['base_url'];?>assets/dialog.js"></script> 
     41 
     42<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     43<link href="<?php print $IMConfig['base_url'];?>assets/manager.css" rel="stylesheet" type="text/css" />  
     44<script type="text/javascript" src="<?php print $IMConfig['base_url'];?>assets/popup.js"></script> 
     45<script type="text/javascript" src="<?php print $IMConfig['base_url'];?>assets/dialog.js"></script> 
    3246<script type="text/javascript"> 
    3347/*<![CDATA[*/ 
    3448        window.resizeTo(600, 460); 
    3549 
    36         if(window.opener) 
     50        if (window.opener) 
    3751                HTMLArea = window.opener.HTMLArea; 
    3852 
    39         var thumbdir = "<? echo $IMConfig['thumbnail_dir']; ?>"; 
    40         var base_url = "<? echo $manager->getImagesURL(); ?>"; 
     53        var thumbdir = "<?php echo $IMConfig['thumbnail_dir']; ?>"; 
     54        var base_url = "<?php echo $manager->getImagesURL(); ?>"; 
     55 
     56        _imgManager.ddt._ddt( "manager.php", "38", "thumbdir is '" + thumbdir + "' base_url is '" + base_url + "'" ); 
     57 
     58        // manager.js relies on the existence of _imgManager in this scope. 
    4159/*]]>*/ 
    4260</script> 
    43 <script type="text/javascript" src="<? print $IMConfig['base_url'];?>assets/manager.js"></script> 
     61 
     62<script type="text/javascript" src="<?php print $IMConfig['base_url'];?>assets/manager.js"></script> 
    4463</head> 
    4564<body> 
    4665<div class="title">Insert Image</div> 
    47 <form action="<? print $IMConfig['backend_url'] ?>" id="uploadForm" method="post" enctype="multipart/form-data"> 
     66<form action="<?php print $IMConfig['backend_url'] ?>" id="uploadForm" method="post" enctype="multipart/form-data"> 
    4867 
    49 <? // we have to propagate our values through forms ?> 
     68<?php // we have to propagate our values through forms ?> 
    5069 
    5170<input type="hidden" name="__plugin" value="ImageManager"> 
     
    5776        <select name="dir" class="dirWidth" id="dirPath" onchange="updateDir(this)"> 
    5877        <option value="/">/</option> 
    59 <? foreach($dirs as $relative=>$fullpath) { ?> 
    60                 <option value="<? echo rawurlencode($relative); ?>"><? echo $relative; ?></option> 
    61 <? } ?> 
     78<?php foreach($dirs as $relative=>$fullpath) { ?> 
     79                <option value="<?php echo rawurlencode($relative); ?>"><?php echo $relative; ?></option> 
     80<?php } ?> 
    6281        </select> 
    63         <a href="#" onclick="javascript: goUpDir();" title="Directory Up"><img src="<? print $IMConfig['base_url']; ?>img/btnFolderUp.gif" height="15" width="15" alt="Directory Up" /></a> 
    64 <? if($IMConfig['safe_mode'] == false && $IMConfig['allow_new_dir']) { ?> 
    65         <a href="#" onclick="newFolder();" title="New Folder"><img src="<? print $IMConfig['base_url']; ?>img/btnFolderNew.gif" height="15" width="15" alt="New Folder" /></a> 
    66 <? } ?> 
    67         <div id="messages" style="display: none;"><span id="message"></span><img SRC="<? print $IMConfig['base_url']; ?>img/dots.gif" width="22" height="12" alt="..." /></div> 
    68         <iframe src="<? print $IMConfig['backend_url']; ?>__function=images" name="imgManager" id="imgManager" class="imageFrame" scrolling="auto" title="Image Selection" frameborder="0"></iframe> 
     82        <a href="#" onclick="javascript: goUpDir();" title="Directory Up"><img src="<?php print $IMConfig['base_url']; ?>img/btnFolderUp.gif" height="15" width="15" alt="Directory Up" /></a> 
     83<?php if($IMConfig['safe_mode'] == false && $IMConfig['allow_new_dir']) { ?> 
     84        <a href="#" onclick="newFolder();" title="New Folder"><img src="<?php print $IMConfig['base_url']; ?>img/btnFolderNew.gif" height="15" width="15" alt="New Folder" /></a> 
     85<?php } ?> 
     86        <div id="messages" style="display: none;"><span id="message"></span><img SRC="<?php print $IMConfig['base_url']; ?>img/dots.gif" width="22" height="12" alt="..." /></div> 
     87        <iframe src="<?php print $IMConfig['backend_url']; ?>__function=images" name="imgManager" id="imgManager" class="imageFrame" scrolling="auto" title="Image Selection" frameborder="0"></iframe> 
    6988</div> 
    7089</fieldset> 
     
    7796                        <td align="right"><label for="f_width">Width</label></td> 
    7897                        <td><input type="text" id="f_width" class="smallWidth" value="" onchange="javascript:checkConstrains('width');"/></td> 
    79                         <td rowspan="2" align="right"><img src="<? print $IMConfig['base_url']; ?>img/locked.gif" id="imgLock" width="25" height="32" alt="Constrained Proportions" /></td> 
     98                        <td rowspan="2" align="right"><img src="<?php print $IMConfig['base_url']; ?>img/locked.gif" id="imgLock" width="25" height="32" alt="Constrained Proportions" /></td> 
    8099                        <td rowspan="3" align="right">&nbsp;</td> 
    81100                        <td align="right"><label for="f_vert">V Space</label></td> 
     
    91110                </tr> 
    92111                <tr> 
    93 <? if($IMConfig['allow_upload'] == true) { ?> 
     112<?php if($IMConfig['allow_upload'] == true) { ?> 
    94113                        <td align="right"><label for="upload">Upload</label></td> 
    95114                        <td> 
     
    101120                </table> 
    102121                        </td> 
    103 <? } else { ?> 
     122<?php } else { ?> 
    104123                        <td colspan="2"></td> 
    105 <? } ?> 
     124<?php } ?> 
    106125                        <td align="right"><label for="f_align">Align</label></td> 
    107126                        <td colspan="2"> 
  • branches/unified_backend/plugins/Linker/dTree/dtree.js

    r20 r121  
    1 /*--------------------------------------------------| 
    2  
    3 | dTree 2.05 | www.destroydrop.com/javascript/tree/ | 
    4  
    5 |---------------------------------------------------| 
    6  
    7 | Copyright (c) 2002-2003 Geir Landr?               | 
    8  
    9 |                                                   | 
    10  
    11 | This script can be used freely as long as all     | 
    12  
    13 | copyright messages are intact.                    | 
    14  
    15 |                                                   | 
    16  
    17 | Updated: 17.04.2003                               | 
    18  
    19 |--------------------------------------------------*/ 
    20  
    21  
    22  
    23 // Node object 
    24  
    25 function Node(id, pid, name, url, title, target, icon, iconOpen, open) { 
    26  
     1/** 
     2* @fileoverview dTree 2.05 | www.destroydrop.com/javascript/tree/  
     3* 
     4* @copyright 2002-2003 Geir Landr?                
     5*                                                    
     6* This script can be used freely as long as all      
     7* copyright messages are intact.                     
     8*                                                    
     9* Updated: 17.04.2003                                
     10* 
     11* Modification by Yermo Lamers http://www.formvista.com/contact.html 
     12* 
     13* . added clear_s() to clear selection. 
     14* . set useCookies to false. 
     15* . added JSDoc headers. 
     16*/ 
     17 
     18/** 
     19* Node object 
     20* 
     21*/ 
     22 
     23function Node(id, pid, name, url, title, target, icon, iconOpen, open)  
     24        { 
    2725  this.id = id; 
    28  
    2926  this.pid = pid; 
    30  
    3127  this.name = name; 
    32  
    3328  this.url = url; 
    34  
    3529  this.title = title; 
    36  
    3730  this.target = target; 
    38  
    3931  this.icon = icon; 
    40  
    4132  this.iconOpen = iconOpen; 
    42  
    4333  this._io = open || false; 
    44  
    4534  this._is = false; 
    46  
    4735  this._ls = false; 
    48  
    4936  this._hc = false; 
    50  
    5137  this._ai = 0; 
    52  
    5338  this._p; 
    54  
    55 }; 
    56  
    57  
    58  
    59 // Tree object 
    60  
    61 function dTree(objName, baseDir) { 
    62  
    63   this.config = { 
    64  
     39        }; 
     40 
     41/** 
     42* Tree object 
     43*/ 
     44 
     45function dTree(objName, baseDir)  
     46        { 
     47  this.config =  
     48                { 
    6549    target                                      : null, 
    66  
    6750    folderLinks                 : true, 
    68  
    6951    useSelection                : true, 
    70  
    71     useCookies                  : true, 
    72  
     52    useCookies                  : false, 
    7353    useLines                            : true, 
    74  
    7554    useIcons                            : true, 
    76  
    7755    useStatusText               : false, 
    78  
    7956    closeSameLevel      : false, 
    80  
    8157    inOrder                                     : false 
    82  
    83   } 
    84  
    85   this.icon = { 
    86  
     58          } 
     59 
     60  this.icon =  
     61                { 
    8762    root                                : baseDir + 'img/base.gif', 
    88  
    8963    folder                      : baseDir + 'img/folder.gif', 
    90  
    9164    folderOpen  : baseDir + 'img/folderopen.gif', 
    92  
    9365    node                                : baseDir + 'img/page.gif', 
    94  
    9566    empty                               : baseDir + 'img/empty.gif', 
    96  
    9767    line                                : baseDir + 'img/line.gif', 
    98  
    9968    join                                : baseDir + 'img/join.gif', 
    100  
    10169    joinBottom  : baseDir + 'img/joinbottom.gif', 
    102  
    10370    plus                                : baseDir + 'img/plus.gif', 
    104  
    10571    plusBottom  : baseDir + 'img/plusbottom.gif', 
    106  
    10772    minus                               : baseDir + 'img/minus.gif', 
    108  
    10973    minusBottom : baseDir + 'img/minusbottom.gif', 
    110  
    11174    nlPlus                      : baseDir + 'img/nolines_plus.gif', 
    112  
    11375    nlMinus                     : baseDir + 'img/nolines_minus.gif' 
    114  
    115   }; 
     76          }; 
    11677 
    11778  this.obj = objName; 
     
    12990  this.completed = false; 
    13091 
    131 }; 
    132  
    133  
    134  
    135 // Adds a new node to the node array 
    136  
    137 dTree.prototype.add = function(id, pid, name, url, title, target, icon, iconOpen, open) { 
    138  
     92        }; 
     93 
     94/** 
     95* Adds a new node to the node array 
     96*/ 
     97 
     98dTree.prototype.add = function(id, pid, name, url, title, target, icon, iconOpen, open)  
     99        { 
    139100  this.aNodes[this.aNodes.length] = new Node(id, pid, name, url, title, target, icon, iconOpen, open); 
    140  
    141 }; 
    142  
    143  
    144  
    145 // Open/close all nodes 
    146  
    147 dTree.prototype.openAll = function() { 
    148  
     101        }; 
     102 
     103/** 
     104* Open all nodes 
     105*/ 
     106 
     107dTree.prototype.openAll = function()  
     108        { 
    149109  this.oAll(true); 
    150  
    151 }; 
    152  
    153 dTree.prototype.closeAll = function() { 
    154  
     110        }; 
     111 
     112/** 
     113* close all nodes 
     114*/ 
     115 
     116dTree.prototype.closeAll = function()  
     117        { 
    155118  this.oAll(false); 
    156  
    157 }; 
    158  
    159  
    160  
    161 // Outputs the tree to the page 
    162  
    163 dTree.prototype.toString = function() { 
     119        }; 
     120 
     121/** 
     122* returns HTML string representation of tree 
     123*/ 
     124 
     125dTree.prototype.toString = function()  
     126        { 
    164127  this.setCS_All(); 
     128 
    165129  var str = '<div class="dtree">\n'; 
    166130 
    167   if (document.getElementById) { 
    168  
    169     if (this.config.useCookies) this.selectedNode = this.getSelected(); 
     131  if (document.getElementById)  
     132                { 
     133    if (this.config.useCookies)  
     134                        this.selectedNode = this.getSelected(); 
    170135 
    171136    str += this.addNode(this.root); 
    172137 
    173   } else str += 'Browser not supported.'; 
     138          }  
     139        else  
     140                { 
     141                str += 'Browser not supported.'; 
     142                } 
    174143 
    175144  str += '</div>'; 
    176145 
    177   if (!this.selectedFound) this.selectedNode = null; 
     146  if (!this.selectedFound)  
     147                this.selectedNode = null; 
    178148 
    179149  this.completed = true; 
     
    181151  return str; 
    182152 
    183 }; 
    184  
    185  
    186  
    187 // Creates the tree structure 
    188  
    189 dTree.prototype.addNode = function(pNode) { 
     153        };      // end of toString() 
     154 
     155/** 
     156* Creates the HTML tree structure in a string. 
     157* 
     158* @todo the name of this method is confusing. 
     159*/ 
     160 
     161dTree.prototype.addNode = function(pNode)  
     162        { 
    190163 
    191164  var str = ''; 
     
    195168  if (this.config.inOrder) n = pNode._ai; 
    196169 
    197   for (n; n<this.aNodes.length; n++) { 
    198  
    199     if (this.aNodes[n].pid == pNode.id) { 
     170  for (n; n<this.aNodes.length; n++)  
     171                { 
     172 
     173    if (this.aNodes[n].pid == pNode.id)  
     174                        { 
    200175 
    201176      var cn = this.aNodes[n]; 
    202  
    203177      cn._p = pNode; 
    204  
    205178      cn._ai = n; 
    206179 
    207180      // this.setCS(cn); 
    208181 
    209       if (!cn.target && this.config.target) cn.target = this.config.target; 
    210  
    211       if (cn._hc && !cn._io && this.config.useCookies) cn._io = this.isOpen(cn.id); 
    212  
    213       if (!this.config.folderLinks && cn._hc) cn.url = null; 
    214  
    215       if (this.config.useSelection && cn.id == this.selectedNode && !this.selectedFound) { 
    216  
    217           cn._is = true; 
    218  
    219           this.selectedNode = n; 
    220  
    221           this.selectedFound = true; 
    222  
    223       } 
     182      if (!cn.target && this.config.target)  
     183                                cn.target = this.config.target; 
     184 
     185      if (cn._hc && !cn._io && this.config.useCookies)  
     186                                cn._io = this.isOpen(cn.id); 
     187 
     188      if (!this.config.folderLinks && cn._hc)  
     189                                cn.url = null; 
     190 
     191      if (this.config.useSelection && cn.id == this.selectedNode && !this.selectedFound)  
     192                                { 
     193        cn._is = true; 
     194        this.selectedNode = n; 
     195        this.selectedFound = true; 
     196              } 
    224197 
    225198      str += this.node(cn, n); 
     
    227200      if (cn._ls) break; 
    228201 
    229     } 
    230  
    231   } 
     202            } 
     203 
     204        } 
     205 
     206        return str; 
     207 
     208        }; 
     209 
     210/** 
     211* Creates the node icon, url and text and returns the HTML string. 
     212*/ 
     213 
     214dTree.prototype.node = function(node, nodeId)  
     215        { 
     216 
     217  var str = '<div class="dTreeNode">' + this.indent(node, nodeId); 
     218 
     219  if (this.config.useIcons)  
     220                { 
     221 
     222    if (!node.icon)  
     223                        node.icon = (this.root.id == node.pid) ? this.icon.root : ((node._hc) ? this.icon.folder : this.icon.node); 
     224 
     225    if (!node.iconOpen)  
     226                        node.iconOpen = (node._hc) ? this.icon.folderOpen : this.icon.node; 
     227 
     228    if (this.root.id == node.pid)  
     229                        { 
     230      node.icon = this.icon.root; 
     231      node.iconOpen = this.icon.root; 
     232            } 
     233 
     234    str += '<img id="i' + this.obj + nodeId + '" src="' + ((node._io) ? node.iconOpen : node.icon) + '" alt="" />'; 
     235 
     236          } 
     237 
     238  if (node.url)  
     239                { 
     240 
     241    str += '<a id="s' + this.obj + nodeId + '" class="' + ((this.config.useSelection) ? ((node._is ? 'nodeSel' : 'node')) : 'node') + '" href="' + node.url + '"'; 
     242 
     243    if (node.title)  
     244                        str += ' title="' + node.title + '"'; 
     245 
     246    if (node.target)  
     247                        str += ' target="' + node.target + '"'; 
     248 
     249    if (this.config.useStatusText)  
     250                        str += ' onmouseover="window.status=\'' + node.name + '\';return true;" onmouseout="window.status=\'\';return true;" '; 
     251 
     252    if (this.config.useSelection && ((node._hc && this.config.folderLinks) || !node._hc)) 
     253                        { 
     254      str += ' onclick="javascript: ' + this.obj + '.s(' + nodeId + ');"'; 
     255                        } 
     256 
     257    str += '>'; 
     258 
     259          } 
     260  else if ((!this.config.folderLinks || !node.url) && node._hc && node.pid != this.root.id) 
     261                { 
     262    str += '<a href="javascript: ' + this.obj + '.o(' + nodeId + ');" class="node">'; 
     263                } 
     264 
     265  str += node.name; 
     266 
     267  if (node.url || ((!this.config.folderLinks || !node.url) && node._hc)) str += '</a>'; 
     268 
     269  str += '</div>'; 
     270 
     271  if (node._hc)  
     272                { 
     273    str += '<div id="d' + this.obj + nodeId + '" class="clip" style="display:' + ((this.root.id == node.pid || node._io) ? 'block' : 'none') + ';">'; 
     274    str += this.addNode(node); 
     275    str += '</div>'; 
     276          } 
     277 
     278  this.aIndent.pop(); 
    232279 
    233280  return str; 
    234281 
    235 }; 
    236  
    237  
    238  
    239 // Creates the node icon, url and text 
    240  
    241 dTree.prototype.node = function(node, nodeId) { 
    242  
    243   var str = '<div class="dTreeNode">' + this.indent(node, nodeId); 
    244  
    245   if (this.config.useIcons) { 
    246  
    247     if (!node.icon) node.icon = (this.root.id == node.pid) ? this.icon.root : ((node._hc) ? this.icon.folder : this.icon.node); 
    248  
    249     if (!node.iconOpen) node.iconOpen = (node._hc) ? this.icon.folderOpen : this.icon.node; 
    250  
    251     if (this.root.id == node.pid) { 
    252  
    253       node.icon = this.icon.root; 
    254  
    255       node.iconOpen = this.icon.root; 
    256  
    257     } 
    258  
    259     str += '<img id="i' + this.obj + nodeId + '" src="' + ((node._io) ? node.iconOpen : node.icon) + '" alt="" />'; 
    260  
    261   } 
    262  
    263   if (node.url) { 
    264  
    265     str += '<a id="s' + this.obj + nodeId + '" class="' + ((this.config.useSelection) ? ((node._is ? 'nodeSel' : 'node')) : 'node') + '" href="' + node.url + '"'; 
    266  
    267     if (node.title) str += ' title="' + node.title + '"'; 
    268  
    269     if (node.target) str += ' target="' + node.target + '"'; 
    270  
    271     if (this.config.useStatusText) str += ' onmouseover="window.status=\'' + node.name + '\';return true;" onmouseout="window.status=\'\';return true;" '; 
    272  
    273     if (this.config.useSelection && ((node._hc && this.config.folderLinks) || !node._hc)) 
    274  
    275       str += ' onclick="javascript: ' + this.obj + '.s(' + nodeId + ');"'; 
    276  
    277     str += '>'; 
    278  
    279   } 
    280  
    281   else if ((!this.config.folderLinks || !node.url) && node._hc && node.pid != this.root.id) 
    282  
    283     str += '<a href="javascript: ' + this.obj + '.o(' + nodeId + ');" class="node">'; 
    284  
    285   str += node.name; 
    286  
    287   if (node.url || ((!this.config.folderLinks || !node.url) && node._hc)) str += '</a>'; 
    288  
    289   str += '</div>'; 
    290  
    291   if (node._hc) { 
    292  
    293     str += '<div id="d' + this.obj + nodeId + '" class="clip" style="display:' + ((this.root.id == node.pid || node._io) ? 'block' : 'none') + ';">'; 
    294  
    295     str += this.addNode(node); 
    296  
    297     str += '</div>'; 
    298  
    299   } 
    300  
    301   this.aIndent.pop(); 
     282        };      // end of node() 
     283 
     284/** 
     285* Adds the empty and line icons and returns HTML string 
     286*/ 
     287 
     288dTree.prototype.indent = function(node, nodeId)  
     289        { 
     290 
     291  var str = ''; 
     292 
     293  if (this.root.id != node.pid)  
     294                { 
     295 
     296    for (var n=0; n<this.aIndent.length; n++) 
     297                        { 
     298      str += '<img src="' + ( (this.aIndent[n] == 1 && this.config.useLines) ? this.icon.line : this.icon.empty ) + '" alt="" />'; 
     299                        } 
     300 
     301    (node._ls) ? this.aIndent.push(0) : this.aIndent.push(1); 
     302 
     303    if (node._hc)  
     304                        { 
     305 
     306      str += '<a href="javascript: ' + this.obj + '.o(' + nodeId + ');"><img id="j' + this.obj + nodeId + '" src="'; 
     307 
     308      if (!this.config.useLines)  
     309                                str += (node._io) ? this.icon.nlMinus : this.icon.nlPlus; 
     310      else  
     311                                str += ( (node._io) ? ((node._ls && this.config.useLines) ? this.icon.minusBottom : this.icon.minus) : ((node._ls && this.config.useLines) ? this.icon.plusBottom : this.icon.plus ) ); 
     312 
     313      str += '" alt="" /></a>'; 
     314 
     315            }  
     316                else  
     317                        { 
     318                        str += '<img src="' + ( (this.config.useLines) ? ((node._ls) ? this.icon.joinBottom : this.icon.join ) : this.icon.empty) + '" alt="" />'; 
     319                        } 
     320 
     321          } 
    302322 
    303323  return str; 
    304324 
    305 }; 
    306  
    307  
    308  
    309 // Adds the empty and line icons 
    310  
    311 dTree.prototype.indent = function(node, nodeId) { 
    312  
    313   var str = ''; 
    314  
    315   if (this.root.id != node.pid) { 
    316  
    317     for (var n=0; n<this.aIndent.length; n++) 
    318  
    319       str += '<img src="' + ( (this.aIndent[n] == 1 && this.config.useLines) ? this.icon.line : this.icon.empty ) + '" alt="" />'; 
    320  
    321     (node._ls) ? this.aIndent.push(0) : this.aIndent.push(1); 
    322  
    323     if (node._hc) { 
    324  
    325       str += '<a href="javascript: ' + this.obj + '.o(' + nodeId + ');"><img id="j' + this.obj + nodeId + '" src="'; 
    326  
    327       if (!this.config.useLines) str += (node._io) ? this.icon.nlMinus : this.icon.nlPlus; 
    328  
    329       else str += ( (node._io) ? ((node._ls && this.config.useLines) ? this.icon.minusBottom : this.icon.minus) : ((node._ls && this.config.useLines) ? this.icon.plusBottom : this.icon.plus ) ); 
    330  
    331       str += '" alt="" /></a>'; 
    332  
    333     } else str += '<img src="' + ( (this.config.useLines) ? ((node._ls) ? this.icon.joinBottom : this.icon.join ) : this.icon.empty) + '" alt="" />'; 
    334  
    335   } 
    336  
    337   return str; 
    338  
    339 }; 
    340  
    341  
    342  
    343 // Checks if a node has any children and if it is the last sibling 
    344  
    345 dTree.prototype.setCS = function(node) { 
     325        };      // end of indent() 
     326 
     327/** 
     328* Checks if a node has any children and if it is the last sibling 
     329*/ 
     330 
     331dTree.prototype.setCS = function(node)  
     332        { 
    346333 
    347334  var lastId; 
    348335 
    349   for (var n=0; n<this.aNodes.length; n++) { 
    350  
    351     if (this.aNodes[n].pid == node.id) node._hc = true; 
    352  
    353     if (this.aNodes[n].pid == node.pid) lastId = this.aNodes[n].id; 
    354  
    355   } 
    356  
    357   if (lastId==node.id) node._ls = true; 
    358  
    359 }; 
     336  for (var n=0; n<this.aNodes.length; n++)  
     337                { 
     338 
     339    if (this.aNodes[n].pid == node.id)  
     340                        node._hc = true; 
     341 
     342    if (this.aNodes[n].pid == node.pid)  
     343                        lastId = this.aNodes[n].id; 
     344 
     345          } 
     346 
     347  if (lastId==node.id)  
     348                node._ls = true; 
     349 
     350        }; 
     351 
     352/** 
     353* setCS_All() 
     354*/ 
    360355 
    361356dTree.prototype.setCS_All = function() 
    362 { 
     357        { 
    363358  var ids = { }; // ID => { _hc: haschildren, _ls_is: lastsibling} 
    364359 
    365360  for(var n = 0; n < this.aNodes.length; n++) 
    366   { 
     361        { 
    367362    var node = this.aNodes[n]; 
    368363    if(!ids[node.pid]) 
    369     { 
     364        { 
    370365      ids[node.pid] = { _hc: true, _ls_is: node.id }; 
    371     } 
     366            } 
    372367    else 
    373     { 
     368          { 
    374369      ids[node.pid]._hc    = true; 
    375370      ids[node.pid]._ls_is = node.id; 
    376     } 
     371        } 
    377372 
    378373    if(!ids[node.id]) 
    379     { 
     374            { 
    380375      ids[node.id] = { _hc: false, _ls_is: null } 
    381     } 
    382   } 
     376          } 
     377          } 
    383378 
    384379  for(var n = 0; n < this.aNodes.length; n++) 
    385   { 
     380        { 
    386381    var node = this.aNodes[n]; 
    387382    node._ls = ids[node.pid]._ls_is == node.id ? true : false; 
    388383    node._hc = ids[node.id]._hc; 
    389   } 
    390 } 
    391  
    392 // Returns the selected node 
    393  
    394 dTree.prototype.getSelected = function() { 
     384          } 
     385 
     386        }       // end of setCS_All() 
     387 
     388/** 
     389* Returns the selected node 
     390*/ 
     391 
     392dTree.prototype.getSelected = function()  
     393        { 
    395394 
    396395  var sn = this.getCookie('cs' + this.obj); 
    397  
    398396  return (sn) ? sn : null; 
    399397 
    400 }; 
    401  
    402  
    403  
    404 // Highlights the selected node 
    405  
    406 dTree.prototype.s = function(id) { 
    407  
    408   if (!this.config.useSelection) return; 
     398        }; 
     399 
     400/** 
     401* Clears selection. 
     402*/ 
     403 
     404dTree.prototype.clear_s = function()  
     405  { 
     406 
     407  var n=0; 
     408 
     409  for (n; n<this.aNodes.length; n++)  
     410    { 
     411 
     412    eOld = document.getElementById("s" + this.obj + n); 
     413 
     414    if ( eOld ) 
     415                        { 
     416                eOld.className = "node"; 
     417                  } 
     418                } 
     419 
     420  this.selectedNode = null; 
     421 
     422  }     // end of clear_s() 
     423 
     424/** 
     425* Highlights the selected node 
     426*/ 
     427 
     428dTree.prototype.s = function(id)  
     429        { 
     430 
     431  if (!this.config.useSelection)  
     432                return; 
    409433 
    410434  var cn = this.aNodes[id]; 
    411435 
    412   if (cn._hc && !this.config.folderLinks) return; 
    413  
    414   if (this.selectedNode != id) { 
    415  
    416     if (this.selectedNode || this.selectedNode==0) { 
    417  
     436  if (cn._hc && !this.config.folderLinks)  
     437                return; 
     438 
     439  if (this.selectedNode != id)  
     440                { 
     441 
     442    if (this.selectedNode || this.selectedNode==0)  
     443                        { 
    418444      eOld = document.getElementById("s" + this.obj + this.selectedNode); 
    419  
    420445      eOld.className = "node"; 
    421  
    422     } 
     446            } 
    423447 
    424448    eNew = document.getElementById("s" + this.obj + id); 
     
    428452    this.selectedNode = id; 
    429453 
    430     if (this.config.useCookies) this.setCookie('cs' + this.obj, cn.id); 
    431  
    432   } 
    433  
    434 }; 
    435  
    436  
    437  
    438 // Toggle Open or close 
    439  
    440 dTree.prototype.o = function(id) { 
     454    if (this.config.useCookies)  
     455                        this.setCookie('cs' + this.obj, cn.id); 
     456 
     457          } 
     458 
     459        }; // end of s() 
     460 
     461/** 
     462* Toggle Open or close 
     463*/ 
     464 
     465dTree.prototype.o = function(id)  
     466        { 
    441467 
    442468  var cn = this.aNodes[id]; 
     
    450476  if (this.config.useCookies) this.updateCookie(); 
    451477 
    452 }; 
    453  
    454  
    455  
    456 // Open or close all nodes 
    457  
    458 dTree.prototype.oAll = function(status) { 
    459  
    460   for (var n=0; n<this.aNodes.length; n++) { 
    461  
    462     if (this.aNodes[n]._hc && this.aNodes[n].pid != this.root.id) { 
    463  
     478        }; 
     479 
     480/** 
     481* Open or close all nodes 
     482*/ 
     483 
     484dTree.prototype.oAll = function(status)  
     485        { 
     486 
     487  for (var n=0; n<this.aNodes.length; n++)  
     488                { 
     489 
     490    if (this.aNodes[n]._hc && this.aNodes[n].pid != this.root.id)  
     491                        { 
    464492      this.nodeStatus(status, n, this.aNodes[n]._ls) 
    465  
    466493      this.aNodes[n]._io = status; 
    467  
    468     } 
    469  
    470   } 
    471  
    472   if (this.config.useCookies) this.updateCookie(); 
    473  
    474 }; 
    475  
    476  
    477  
    478 // Opens the tree to a specific node 
    479  
    480 dTree.prototype.openTo = function(nId, bSelect, bFirst) { 
    481  
    482   if (!bFirst) { 
    483  
    484     for (var n=0; n<this.aNodes.length; n++) { 
    485  
    486       if (this.aNodes[n].id == nId) { 
    487  
     494            } 
     495        } 
     496 
     497  if (this.config.useCookies)  
     498                this.updateCookie(); 
     499 
     500        }; 
     501 
     502/** 
     503* Opens the tree to a specific node 
     504*/ 
     505 
     506dTree.prototype.openTo = function(nId, bSelect, bFirst)  
     507        { 
     508 
     509  if (!bFirst)  
     510                { 
     511 
     512    for (var n=0; n<this.aNodes.length; n++)  
     513                        { 
     514 
     515      if (this.aNodes[n].id == nId)  
     516                                { 
    488517        nId=n; 
    489  
    490518        break; 
    491  
    492       } 
    493  
    494     } 
    495  
    496   } 
     519              } 
     520          } 
     521          } 
    497522 
    498523  var cn=this.aNodes[nId]; 
    499524 
    500   if (cn.pid==this.root.id || !cn._p) return; 
     525  if (cn.pid==this.root.id || !cn._p)  
     526                return; 
    501527 
    502528  cn._io = true; 
    503  
    504529  cn._is = bSelect; 
    505530 
    506   if (this.completed && cn._hc) this.nodeStatus(true, cn._ai, cn._ls); 
    507  
    508   if (this.completed && bSelect) this.s(cn._ai); 
    509  
    510   else if (bSelect) this._sn=cn._ai; 
     531  if (this.completed && cn._hc)  
     532                this.nodeStatus(true, cn._ai, cn._ls); 
     533 
     534  if (this.completed && bSelect)  
     535                this.s(cn._ai); 
     536  else if (bSelect)  
     537                this._sn=cn._ai; 
    511538 
    512539  this.openTo(cn._p._ai, false, true); 
    513540 
    514 }; 
    515  
    516  
    517  
    518 // Closes all nodes on the same level as certain node 
    519  
    520 dTree.prototype.closeLevel = function(node) { 
    521  
    522   for (var n=0; n<this.aNodes.length; n++) { 
    523  
    524     if (this.aNodes[n].pid == node.pid && this.aNodes[n].id != node.id && this.aNodes[n]._hc) { 
    525  
     541        };      // end of openTo() 
     542 
     543/** 
     544* Closes all nodes on the same level as certain node 
     545*/ 
     546 
     547dTree.prototype.closeLevel = function(node)  
     548        { 
     549 
     550  for (var n=0; n<this.aNodes.length; n++)  
     551                { 
     552 
     553    if (this.aNodes[n].pid == node.pid && this.aNodes[n].id != node.id && this.aNodes[n]._hc)  
     554                        { 
    526555      this.nodeStatus(false, n, this.aNodes[n]._ls); 
    527  
    528556      this.aNodes[n]._io = false; 
    529  
    530557      this.closeAllChildren(this.aNodes[n]); 
    531558 
    532     } 
    533  
    534   } 
    535  
    536 } 
    537  
    538  
    539  
    540 // Closes all children of a node 
    541  
    542 dTree.prototype.closeAllChildren = function(node) { 
    543  
    544   for (var n=0; n<this.aNodes.length; n++) { 
    545  
    546     if (this.aNodes[n].pid == node.id && this.aNodes[n]._hc) { 
    547  
    548       if (this.aNodes[n]._io) this.nodeStatus(false, n, this.aNodes[n]._ls); 
     559            } 
     560 
     561        } 
     562 
     563        }       // end of closeLevel() 
     564 
     565/** 
     566* Closes all children of a node 
     567*/ 
     568 
     569dTree.prototype.closeAllChildren = function(node)  
     570        { 
     571 
     572  for (var n=0; n<this.aNodes.length; n++)  
     573                { 
     574 
     575    if (this.aNodes[n].pid == node.id && this.aNodes[n]._hc)  
     576                        { 
     577 
     578      if (this.aNodes[n]._io)  
     579                                this.nodeStatus(false, n, this.aNodes[n]._ls); 
    549580 
    550581      this.aNodes[n]._io = false; 
     
    552583      this.closeAllChildren(this.aNodes[n]); 
    553584 
    554     } 
    555  
    556   } 
    557  
    558 } 
    559  
    560  
    561  
    562 // Change the status of a node(open or closed) 
    563  
    564 dTree.prototype.nodeStatus = function(status, id, bottom) { 
     585            } 
     586 
     587        } 
     588 
     589        }       // end of closeAllChildren() 
     590 
     591/** 
     592* Change the status of a node(open or closed) 
     593*/ 
     594 
     595dTree.prototype.nodeStatus = function(status, id, bottom)  
     596        { 
    565597 
    566598  eDiv  = document.getElementById('d' + this.obj + id); 
    567  
    568599  eJoin = document.getElementById('j' + this.obj + id); 
    569600 
    570   if (this.config.useIcons) { 
    571  
     601  if (this.config.useIcons)  
     602                { 
    572603    eIcon       = document.getElementById('i' + this.obj + id); 
    573  
    574604    eIcon.src = (status) ? this.aNodes[id].iconOpen : this.aNodes[id].icon; 
    575  
    576   } 
     605          } 
    577606 
    578607  eJoin.src = (this.config.useLines)? 
     
    584613  eDiv.style.display = (status) ? 'block': 'none'; 
    585614 
    586 }; 
    587  
    588  
    589  
    590  
    591  
    592 // [Cookie] Clears a cookie 
    593  
    594 dTree.prototype.clearCookie = function() { 
     615        }; 
     616 
     617/** 
     618* retrieves the element for a node 
     619*/ 
     620 
     621dTree.prototype.getNodeElement = function( n ) 
     622        { 
     623        return document.getElementById("s" + this.obj + n); 
     624        } 
     625 
     626/** 
     627* [Cookie] Clears a cookie 
     628*/ 
     629 
     630dTree.prototype.clearCookie = function()  
     631        { 
    595632 
    596633  var now = new Date(); 
    597  
    598634  var yesterday = new Date(now.getTime() - 1000 * 60 * 60 * 24); 
    599  
    600635  this.setCookie('co'+this.obj, 'cookieValue', yesterday); 
    601  
    602636  this.setCookie('cs'+this.obj, 'cookieValue', yesterday); 
    603637 
    604 }; 
    605  
    606  
    607  
    608 // [Cookie] Sets value in a cookie 
    609  
    610 dTree.prototype.setCookie = function(cookieName, cookieValue, expires, path, domain, secure) { 
     638        }; 
     639 
     640/** 
     641* [Cookie] Sets value in a cookie 
     642*/ 
     643 
     644dTree.prototype.setCookie = function(cookieName, cookieValue, expires, path, domain, secure)  
     645        { 
    611646 
    612647  document.cookie = 
    613  
    614648    escape(cookieName) + '=' + escape(cookieValue) 
    615  
    616649    + (expires ? '; expires=' + expires.toGMTString() : '') 
    617  
    618650    + (path ? '; path=' + path : '') 
    619  
    620651    + (domain ? '; domain=' + domain : '') 
    621  
    622652    + (secure ? '; secure' : ''); 
    623  
    624 }; 
    625  
    626  
    627  
    628 // [Cookie] Gets a value from a cookie 
    629  
    630 dTree.prototype.getCookie = function(cookieName) { 
     653        }; 
     654 
     655/** 
     656* [Cookie] Gets a value from a cookie 
     657*/ 
     658 
     659dTree.prototype.getCookie = function(cookieName)  
     660        { 
    631661 
    632662  var cookieValue = ''; 
    633  
    634663  var posName = document.cookie.indexOf(escape(cookieName) + '='); 
    635664 
    636   if (posName != -1) { 
     665  if (posName != -1)  
     666                { 
    637667 
    638668    var posValue = posName + (escape(cookieName) + '=').length; 
    639  
    640669    var endPos = document.cookie.indexOf(';', posValue); 
    641  
    642     if (endPos != -1) cookieValue = unescape(document.cookie.substring(posValue, endPos)); 
    643  
    644     else cookieValue = unescape(document.cookie.substring(posValue)); 
    645  
    646   } 
     670    if (endPos != -1)  
     671                        cookieValue = unescape(document.cookie.substring(posValue, endPos)); 
     672    else  
     673                        cookieValue = unescape(document.cookie.substring(posValue)); 
     674          } 
    647675 
    648676  return (cookieValue); 
    649677 
    650 }; 
    651  
    652  
    653  
    654 // [Cookie] Returns ids of open nodes as a string 
    655  
    656 dTree.prototype.updateCookie = function() { 
    657  
     678        }; 
     679 
     680/** 
     681* [Cookie] Returns ids of open nodes as a string 
     682*/ 
     683 
     684dTree.prototype.updateCookie = function()  
     685        { 
    658686  var str = ''; 
    659  
    660   for (var n=0; n<this.aNodes.length; n++) { 
    661  
    662     if (this.aNodes[n]._io && this.aNodes[n].pid != this.root.id) { 
    663  
    664       if (str) str += '.'; 
    665  
     687  for (var n=0; n<this.aNodes.length; n++)  
     688                { 
     689    if (this.aNodes[n]._io && this.aNodes[n].pid != this.root.id)  
     690                        { 
     691      if (str)  
     692                                str += '.'; 
    666693      str += this.aNodes[n].id; 
    667  
    668     } 
    669  
    670   } 
    671  
     694            } 
     695 
     696          } 
    672697  this.setCookie('co' + this.obj, str); 
    673698 
    674 }; 
    675  
    676  
    677  
    678 // [Cookie] Checks if a node id is in a cookie 
    679  
    680 dTree.prototype.isOpen = function(id) { 
     699        }; 
     700 
     701/** 
     702* [Cookie] Checks if a node id is in a cookie 
     703*/ 
     704 
     705dTree.prototype.isOpen = function(id)  
     706        { 
    681707 
    682708  var aOpen = this.getCookie('co' + this.obj).split('.'); 
    683709 
    684710  for (var n=0; n<aOpen.length; n++) 
    685  
    686     if (aOpen[n] == id) return true; 
     711                { 
     712    if (aOpen[n] == id)  
     713                        return true; 
     714                } 
    687715 
    688716  return false; 
    689717 
    690 }; 
    691  
    692  
    693  
    694 // If Push and pop is not implemented by the browser 
    695  
    696 if (!Array.prototype.push) { 
    697  
    698   Array.prototype.push = function array_push() { 
    699  
     718        }; 
     719 
     720/** 
     721* If Push and pop is not implemented by the browser 
     722*/ 
     723 
     724if (!Array.prototype.push)  
     725        { 
     726 
     727  Array.prototype.push = function array_push()  
     728                { 
    700729    for(var i=0;i<arguments.length;i++) 
    701  
     730                        { 
    702731      this[this.length]=arguments[i]; 
     732                        } 
    703733 
    704734    return this.length; 
    705735 
    706   } 
    707  
    708 }; 
    709  
    710 if (!Array.prototype.pop) { 
    711  
    712   Array.prototype.pop = function array_pop() { 
    713  
     736          } 
     737 
     738        }; 
     739 
     740if (!Array.prototype.pop)  
     741        { 
     742 
     743  Array.prototype.pop = function array_pop()  
     744                { 
    714745    lastElement = this[this.length-1]; 
    715  
    716746    this.length = Math.max(this.length-1,0); 
    717  
    718747    return lastElement; 
    719748 
    720   } 
    721  
    722 }; 
    723  
     749          } 
     750 
     751        }; 
     752 
     753// END 
  • branches/unified_backend/plugins/Linker/linker.js

    r57 r121  
    11/** htmlArea - James' Fork - Linker Plugin **/ 
     2 
     3// tabs: 3 
     4 
     5/** 
     6* @fileoverview  The Linker plugin 
     7* 
     8* This plugin implements a client side tree view of server side filesystem. 
     9* 
     10* @package Xinha 
     11* @subpackage linker 
     12* @author James Sleeman 
     13* @author Yermo Lamers http://www.formvista.com/contact.html (unified backend modifications) 
     14*/ 
     15 
     16/** 
     17* linker plugin info for about box. 
     18*/ 
     19 
    220Linker._pluginInfo = 
    321{ 
     
    1230}; 
    1331 
     32/** 
     33* dtree style sheet 
     34*/ 
     35 
    1436HTMLArea.loadStyle('dTree/dtree.css', 'Linker'); 
     37 
     38/** 
     39* linker configuration 
     40*/ 
    1541 
    1642HTMLArea.Config.prototype.Linker = 
    1743{ 
    18   'backend' : _editor_url + 'plugins/Linker/scan.php', 
     44        'backend' : _editor_backend + ( _editor_backend.match(/.*\?.*/) ? "&" : "?" ) + '__plugin=Linker&', 
    1945  'files' : null 
    2046} 
    2147 
     48// ------------------------------------------------------------------------ 
     49 
     50/** 
     51* Inline Dialog for Linker 
     52*/ 
     53 
     54Linker.Dialog_dTrees = [ ]; 
     55 
     56// ------------------------------------------------------------------------ 
     57 
     58/** 
     59* @class Linker 
     60* 
     61* Linker constructor  
     62*/ 
    2263 
    2364function Linker(editor, args) 
    24 { 
     65        { 
     66 
    2567  this.editor  = editor; 
    2668  this.lConfig = editor.config.Linker; 
    2769 
     70        // [STRIP 
     71        // create a ddt debug trace object. There may be multiple editors on  
     72        // the page each with a Linker .. to distinguish which instance 
     73        // is generating the message we tack on the name of the textarea. 
     74 
     75        this.ddt = new DDT( editor._textArea + ":Linker Plugin" ); 
     76 
     77        // uncomment to turn on debugging messages. 
     78  
     79        this.ddt._ddtOn(); 
     80 
     81        this.ddt._ddt( "linker.js","81", "Linker(): constructor" ); 
     82 
     83        // STRIP] 
     84 
    2885  var linker = this; 
    29   if(editor.config.btnList.createlink) 
    30   { 
     86 
     87        // if there is already a createLink button override it's definition. 
     88 
     89  if (editor.config.btnList.createlink) 
     90          { 
    3191    editor.config.btnList.createlink[3] 
    32       =  function(e, objname, obj) { linker._createLink(linker._getSelectedAnchor()); }; 
    33   } 
     92      =  function(e, objname, obj)  
     93                                                {  
     94                                                linker._createLink(linker._getSelectedAnchor());  
     95                                                }; 
     96        } 
    3497  else 
    35   { 
     98          { 
    3699    editor.config.registerButton( 
    37100                                 'createlink', 'Insert/Modify Hyperlink', [_editor_url + "images/ed_buttons_main.gif",6,1], false, 
    38101                                 function(e, objname, obj) { linker._createLink(linker._getSelectedAnchor()); } 
    39102                                 ); 
    40   } 
     103        } 
    41104 
    42105  // See if we can find 'createlink' 
    43106  var t = editor.config.toolbar; 
    44107  var done = false; 
     108 
    45109  for(var i = 0; i < t.length && !done; i++) 
    46   { 
     110          { 
    47111    for(var x = 0; x < t[i].length && !done; x++) 
    48     { 
     112          { 
    49113      if(t[i][x] == 'createlink') 
    50       { 
     114          { 
    51115        done = true; 
    52       } 
    53     } 
    54   } 
    55  
    56   if(!done) 
    57   { 
     116        } 
     117            } 
     118          } 
     119 
     120  if ( !done ) 
     121        { 
    58122    t[t.length-1].push('createlink'); 
    59   } 
    60 } 
     123          } 
     124 
     125        }       // end of Linker Constructor. 
     126 
     127// ------------------------------------------------------------------------ 
     128 
     129/** 
     130* localization 
     131*/ 
    61132 
    62133Linker.prototype._lc = function(string) 
    63 { 
     134        { 
     135 
     136        this.ddt._ddt( "linker.js","136", "_lc(): top with string '" + string + "'" ); 
     137 
    64138  return HTMLArea._lc(string, 'Linker'); 
    65 } 
     139        } 
     140 
     141// ------------------------------------------------------------------------ 
     142 
     143/** 
     144* _createLink() 
     145*/ 
    66146 
    67147Linker.prototype._createLink = function(a) 
    68 { 
     148        { 
     149 
    69150  if(!a && this.editor._selectionEmpty(this.editor._getSelection())) 
    70   {        
     151          {        
    71152    alert(this._lc("You must select some text before making a new link.")); 
    72153    return false; 
    73   } 
     154          } 
     155 
     156        this.ddt._ddt( "linker.js","156", "_createLink(): top" ); 
     157 
     158        // for use in populating the dialog pane. 
    74159 
    75160  var inputs = 
    76   { 
     161          { 
    77162    type:     'url', 
    78163    href:     'http://www.example.com/', 
     
    84169    subject:  '', 
    85170    body:     '' 
    86   } 
    87  
    88   if(a && a.tagName.toLowerCase() == 'a') 
    89   { 
     171          } 
     172 
     173  if (a && a.tagName.toLowerCase() == 'a') 
     174        { 
     175 
     176                // m is an array of matches here. Email address followed by ? 
     177 
    90178    var m = a.href.match(/^mailto:(.*@[^?&]*)(\?(.*))?$/); 
    91     if(m) 
    92     { 
    93       // Mailto 
     179 
     180    if (m) 
     181        { 
     182      // it's a Mailto link 
     183 
    94184      inputs.type = 'mailto'; 
     185 
    95186      inputs.to = m[1]; 
    96       if(m[3]) 
    97       { 
     187 
     188                        this.ddt._ddt( "linker.js","188", "_createLink(): m[1] is '" + m[1] + "' m[3] is '" + m[3] + "'" ); 
     189 
     190      if (m[3]) 
     191              { 
    98192        var args  = m[3].split('&'); 
    99193        for(var x = 0; x<args.length; x++) 
    100         { 
     194              { 
    101195          var j = args[x].match(/(subject|body)=(.*)/); 
    102196          if(j) 
    103           { 
     197              { 
    104198            inputs[j[1]] = decodeURIComponent(j[2]); 
    105           } 
    106         } 
    107       } 
    108     } 
     199            } 
     200                } 
     201              } 
     202          } 
    109203    else 
    110     { 
    111  
    112  
    113       if(a.getAttribute('onclick')) 
    114       { 
     204        { 
     205 
     206      if (a.getAttribute('onclick')) 
     207              { 
     208 
     209                                this.ddt._ddt( "linker.js","209", "_createLink(): link is a popup window style link" ); 
     210 
    115211        var m = a.getAttribute('onclick').match(/window\.open\(\s*this\.href\s*,\s*'([a-z0-9_]*)'\s*,\s*'([a-z0-9_=,]*)'\s*\)/i); 
    116212 
    117213        // Popup Window 
     214 
    118215        inputs.href   = a.href ? a.href : ''; 
    119216        inputs.target = 'popup'; 
     
    121218        inputs.p_options = [ ]; 
    122219 
    123  
    124220        var args = m[2].split(','); 
     221 
     222                                this.ddt._ddt( "linker.js","222", "_createLink(): m[1] is '" + m[1] + "' m[2] is '" + m[2] + "'" ); 
     223 
    125224        for(var x = 0; x < args.length; x++) 
    126         { 
    127           var i = args[x].match(/(width|height)=([0-9]+)/); 
     225              { 
     226                var i = args[x].match(/(width|height)=([0-9]+)/); 
    128227          if(i) 
    129           { 
    130             inputs['p_' + i[1]] = parseInt(i[2]); 
    131           } 
     228                  { 
     229              inputs['p_' + i[1]] = parseInt(i[2]); 
     230            } 
    132231          else 
    133           { 
     232                { 
    134233            inputs.p_options.push(args[x]); 
    135           } 
    136         } 
    137       } 
     234                } 
     235                } 
     236        } 
    138237      else 
    139       { 
    140         // Normal 
    141         inputs.href   = a.href; 
     238        { 
     239        // Normal link 
     240 
     241                                this.ddt._ddt( "linker.js","241", "_createLink(): it's a normal link" ); 
     242 
     243                                // we're loading a link back into the dialog. There's a good chance, if it's 
     244                                // a local link that it contains a fully qualified URL (including http://host/) 
     245                                // 
     246                                // For display in the dialog, remove the host and protocol heading.  
     247                                // 
     248                                // If a user views the source (in FireFox) they will see the fully qualified 
     249                                // links, however there get rewritten before submit. 
     250 
     251                                if ( a.hostname == this.editor._doc.location.hostname ) 
     252                                        { 
     253                                        var someString = new String( a.href ); 
     254                                        inputs.href = someString.replace(/.*?\/\/.*?(\/.*)$/, "$1"); 
     255 
     256                                        this.ddt._ddt( "linker.js","256", "_createLink(): local link modified to '" + inputs.href + "'" ); 
     257                                        } 
     258                                else 
     259                                        { 
     260 
     261                                        // fix MSIE adding http://null/ ... 
     262 
     263                                        var someString = new String( a.href ); 
     264                inputs.href   = someString.replace(/https?:\/\/null\//g, "/"); 
     265 
     266                                        this.ddt._ddt( "linker.js","266", "_createLink(): MSIE hack link modified to '" + inputs.href + "'" ); 
     267 
     268                                        } 
     269 
    142270        inputs.target = a.target; 
    143       } 
    144     } 
    145   } 
     271 
     272        } 
     273        } 
     274 
     275        }       // end of if a was an "a href" object 
     276 
     277        // kludge to pass ourselves into the closure below. 
    146278 
    147279  var linker = this; 
     
    151283  // complete.  I guess because we are defocusing the iframe when we click stuff in the 
    152284  // linker dialog. 
     285        // 
     286        // NOTE that this.a = a means that linker.a == a.  
    153287 
    154288  this.a = a; // Why doesn't a get into the closure below, but if I set it as a property then it's fine? 
    155289 
     290        // this function gets invoked when the ok button is clicked in the panel. 
     291        // Note that in-line function definitions like this are called "closures" that 
     292        // freeze the state of all variables that were around when the function is defined. 
     293        // This is why the function below, which will be called much later, will have 
     294        // the linker variable defined above ...  
     295 
    156296  var doOK = function() 
    157   { 
     297          { 
     298 
     299                linker.ddt._ddt( "linker.js","299", "doOK(): top with link '" + ( linker.a ? linker.a : "none" ) + "'" ); 
     300 
    158301    //if(linker.a) alert(linker.a.tagName); 
     302 
    159303    var a = linker.a; 
    160304 
    161305    var values = linker._dialog.hide(); 
     306 
     307                linker.ddt._ddt( "linker.js","307", "doOK(): values.type is '" + values.type + "'" ); 
     308 
    162309    var atr = 
    163     { 
     310        { 
    164311      href: '', 
    165312      target:'', 
    166313      title:'', 
    167314      onclick:'' 
    168     } 
    169  
    170     if(values.type == 'url') 
    171     { 
    172      if(values.href) 
    173      { 
    174        atr.href = values.href; 
    175        atr.target = values.target; 
    176        if(values.target == 'popup') 
    177        { 
    178  
    179          if(values.p_width) 
    180          { 
    181            values.p_options.push('width=' + values.p_width); 
    182          } 
    183          if(values.p_height) 
    184          { 
    185            values.p_options.push('height=' + values.p_height); 
    186          } 
    187          atr.onclick = 'try{if(document.designMode && document.designMode == \'on\') return false;}catch(e){} window.open(this.href, \'' + (values.p_name.replace(/[^a-z0-9_]/i, '_')) + '\', \'' + values.p_options.join(',') + '\');return false;'; 
    188        } 
    189      } 
    190     } 
    191     else 
    192     { 
    193       if(values.to) 
    194       { 
     315            } 
     316 
     317                if (values.type == 'url') 
     318                { 
     319 
     320                        linker.ddt._ddt( "linker.js","320", "doOK(): type is a url" ); 
     321 
     322                        if(values.href) 
     323                { 
     324 
     325                                linker.ddt._ddt( "linker.js","325", "doOK(): values.href is '" + values.href + "'" ); 
     326 
     327                                atr.href = values.href; 
     328                                atr.target = values.target; 
     329 
     330                                if (values.target == 'popup') 
     331                                        { 
     332 
     333                                        linker.ddt._ddt( "linker.js","333", "doOK(): target is a popup" ); 
     334 
     335                                        if (values.p_width) 
     336                                                { 
     337                                                values.p_options.push('width=' + values.p_width); 
     338                                                } 
     339 
     340                                        if(values.p_height) 
     341                                                { 
     342              values.p_options.push('height=' + values.p_height); 
     343                                                } 
     344 
     345                                        atr.onclick = 'try{if(document.designMode && document.designMode == \'on\') return false;}catch(e){} window.open(this.href, \'' + (values.p_name.replace(/[^a-z0-9_]/i, '_')) + '\', \'' + values.p_options.join(',') + '\');return false;'; 
     346         
     347                                        } 
     348 
     349                                }       // end of if values.href. 
     350                        } 
     351    else        // it's not a url. 
     352            { 
     353 
     354      if (values.to) 
     355            { 
     356 
     357                                linker.ddt._ddt( "linker.js","357", "doOK(): it's a mailto with '" + values.to + "'" ); 
     358 
    195359        atr.href = 'mailto:' + values.to + '?'; 
    196         if(values.subject) atr.href += 'subject=' + encodeURIComponent(values.subject); 
    197         if(values.body)    atr.href += (values.subject ? '&' : '') + 'body=' + encodeURIComponent(values.body); 
    198       } 
    199     } 
    200  
    201     if(a && a.tagName.toLowerCase() == 'a') 
    202     { 
     360        if (values.subject) atr.href += 'subject=' + encodeURIComponent(values.subject); 
     361        if (values.body)    atr.href += (values.subject ? '&' : '') + 'body=' + encodeURIComponent(values.body); 
     362          } 
     363            } 
     364 
     365    if (a && a.tagName.toLowerCase() == 'a') 
     366            { 
     367 
    203368      if(!atr.href) 
    204       { 
     369        { 
    205370        if(confirm(linker._dialog._lc('Are you sure you wish to remove this link?'))) 
    206         { 
     371                { 
    207372          var p = a.parentNode; 
    208373          while(a.hasChildNodes()) 
    209           { 
     374                { 
    210375            p.insertBefore(a.removeChild(a.childNodes[0]), a); 
    211           } 
     376                  } 
    212377          p.removeChild(a); 
    213         } 
    214       } 
     378              } 
     379          } 
     380 
    215381      // Update the link 
     382 
    216383      for(var i in atr) 
    217       { 
     384              { 
     385                                linker.ddt._ddt( "linker.js","385", "doOK(): attribute '" + i + "' == '" + atr[i] + "'" ); 
    218386        a.setAttribute(i, atr[i]); 
    219       } 
    220     } 
     387            } 
     388            } 
    221389    else 
    222     { 
     390          { 
    223391      if(!atr.href) return true; 
    224392 
    225393      // Insert a link, we let the browser do this, we figure it knows best 
     394                        // 
     395                        // YmL: Not sure why but we're inserting a unique link (generated) then  
     396                        // we search for the link below and update it's parameters. Not sure why the 
     397                        // original author didn't just insert the link directly. 
     398 
    226399      var tmp = HTMLArea.uniq('http://www.example.com/Link'); 
    227       linker.editor._doc.execCommand('createlink', false, tmp); 
     400 
     401                        linker.ddt._ddt( "linker.js","401", "doOK(): else case with tmp '" + tmp + "'" ); 
     402 
     403                        linker.editor._doc.execCommand('createlink', false, tmp); 
    228404 
    229405      // Fix them up 
     406 
    230407      var anchors = linker.editor._doc.getElementsByTagName('a'); 
    231408      for(var i = 0; i < anchors.length; i++) 
    232       { 
     409        { 
    233410        var a = anchors[i]; 
     411 
     412                                // have we found the temporary link we made above? 
     413 
    234414        if(a.href == tmp) 
    235         { 
    236           // Found one. 
     415                { 
     416 
     417                                        // copy over the attributes 
     418 
     419                                        linker.ddt._ddt( "linker.js","419", "doOK(): found a '" + a + "'" ); 
     420 
    237421          for(var i in atr) 
    238           { 
     422                { 
    239423            a.setAttribute(i, atr[i]); 
    240           } 
    241         } 
    242       } 
    243     } 
    244   } 
     424                                                linker.ddt._ddt( "linker.js","424", "doOK(): attribute '" + i + "' == '" + atr[i] + "' on a '" + a + "'" ); 
     425                  } 
     426 
     427                                        // at one point we tried fixing up the links in FireFox to turn them into 
     428                                        // absolute URLs right here (instead of fully qualified ) but on view source 
     429                                        // they would get changed back to fully qualified. This is because 
     430                                        // HTMLArea.fixRelativeLinks() gets called at that point. 
     431                                        // 
     432                                        // We chop off the protocol and host before we put the link into the dialog.   
     433                                        // (see upper section of _createLink()) 
     434                                        // 
     435                                        // Also the links get modified onSubmit to remove the absolute pathnames. 
     436                                        // (see htmlarea.js) 
     437 
     438              }  // end of if a href == tmp 
     439 
     440          }  // end of for loop 
     441 
     442            }  // end of else 
     443 
     444                linker.ddt._ddt( "linker.js","444", "doOK(): bottom" ); 
     445 
     446                }       // end of function doOK(); 
     447 
     448        this.ddt._ddt( "linker.js","448", "_createLink(): before calling _dialog.show()" ); 
    245449 
    246450  this._dialog.show(inputs, doOK); 
    247451 
    248 } 
     452        }       // end of _createLink() 
     453 
     454// --------------------------------------------------------------- 
     455 
     456/** 
     457* _getSelectedAnchor() 
     458*/ 
    249459 
    250460Linker.prototype._getSelectedAnchor = function() 
    251 { 
     461        { 
     462 
     463        this.ddt._ddt( "linker.js","463", "_getSelectedAnchor(): top" ); 
     464 
    252465  var sel  = this.editor._getSelection(); 
    253466  var rng  = this.editor._createRange(sel); 
    254467  var a    = this.editor._activeElement(sel); 
     468 
    255469  if(a != null && a.tagName.toLowerCase() == 'a') 
    256   { 
     470          { 
     471                this.ddt._ddt( "linker.js","471", "_getSelectedAnchor(): returning link '" + a + "'" ); 
    257472    return a; 
    258   } 
     473          } 
    259474  else 
    260   { 
     475        { 
    261476    a = this.editor._getFirstAncestor(sel, 'a'); 
    262477    if(a != null) 
    263     { 
     478        { 
     479                        this.ddt._ddt( "linker.js","479", "_getSelectedAnchor(): returning first ancestor '" + a + "'" ); 
    264480      return a; 
    265     } 
    266   } 
     481            } 
     482        } 
     483 
     484        this.ddt._ddt( "linker.js","484", "_getSelectedAnchor(): bottom returning null" ); 
     485 
    267486  return null; 
    268 } 
     487 
     488        }       // end of _getSelectedAnchor() 
     489 
     490// ---------------------------------------------------------------------------- 
     491 
     492/** 
     493* onGenerate(): top 
     494*/ 
    269495 
    270496Linker.prototype.onGenerate = function() 
    271 { 
     497        { 
     498        this.ddt._ddt( "linker.js","498", "onGenerate(): top" ); 
     499 
    272500  this._dialog = new Linker.Dialog(this); 
    273 } 
    274 // Inline Dialog for Linker 
    275  
    276 Linker.Dialog_dTrees = [ ]; 
    277  
     501        } 
     502 
     503// ------------------------------------------------------------------------ 
     504 
     505/** 
     506* Dialog() - constructor 
     507*/ 
    278508 
    279509Linker.Dialog = function (linker) 
    280 { 
     510        { 
     511 
     512        linker.ddt._ddt( "linker.js","512", "Dialog(): top" ); 
     513 
    281514  var  lDialog = this; 
    282515  this.Dialog_nxtid = 0; 
     
    290523 
    291524  // load the dTree script 
     525 
     526        linker.ddt._ddt( "linker.js","526", "Dialog(): calling _prepareDialog()" ); 
     527 
    292528  this._prepareDialog(); 
    293  
    294 } 
     529        } 
     530 
     531// ------------------------------------------------------------------- 
     532 
     533/** 
     534* _prepareDialog() 
     535*/ 
    295536 
    296537Linker.Dialog.prototype._prepareDialog = function() 
    297 { 
     538        { 
     539 
    298540  var lDialog = this; 
    299541  var linker = this.linker; 
    300542 
    301   // We load some stuff up int he background, recalling this function 
     543        linker.ddt._ddt( "linker.js","543", "_prepareDialog(): top" ); 
     544 
     545  // We load some stuff up in the background, recalling this function 
    302546  // when they have loaded.  This is to keep the editor responsive while 
    303547  // we prepare the dialog. 
     548 
    304549  if(typeof dTree == 'undefined') 
    305   { 
    306     HTMLArea._loadback(_editor_url + 'plugins/Linker/dTree/dtree.js', 
    307                        function() {lDialog._prepareDialog(); } 
     550        { 
     551 
     552                linker.ddt._ddt( "linker.js","552", "_prepareDialog(): dtree not loaded. Calling _loadback()" ); 
     553 
     554    HTMLArea._loadback( _editor_url + 'plugins/Linker/dTree/dtree.js', 
     555                       function()  
     556                                                                                                { 
     557 
     558                                                                                                lDialog.linker.ddt._ddt( "linker.js","558",  "_loadback(): calling _prepareDialog"  ); 
     559 
     560                                                                                                lDialog._prepareDialog();  
     561                                                                                                } 
    308562                      ); 
    309563    return; 
    310   } 
    311  
    312   if(this.files == false) 
    313   { 
     564          }     // end of if the dTree was not loaded. 
     565 
     566  if( this.files == false) 
     567          { 
     568 
     569                linker.ddt._ddt( "linker.js","569", "_prepareDialog(): file list not loaded from backend" ); 
     570 
    314571    if(linker.lConfig.backend) 
    315     { 
    316         //get files from backend 
    317         HTMLArea._getback(linker.lConfig.backend, 
    318                           function(txt) { 
    319                             try { 
    320                                 eval('lDialog.files = '+txt); 
    321                             } catch(Error) { 
    322                                 lDialog.files = [ {url:'',title:Error.toString()} ]; 
    323                             } 
    324                             lDialog._prepareDialog(); }); 
    325     } 
     572            { 
     573 
     574                        linker.ddt._ddt( "linker.js","574", "_prepareDialog(): backend defined. loading files using _getback()" ); 
     575 
     576                        //get files from backend 
     577                        HTMLArea._getback( linker.lConfig.backend + "__function=scan", 
     578                                                function(txt)  
     579                                                        { 
     580 
     581                                                        linker.ddt._ddt( "linker.js","581",  "linker.js", "_getback(): got back txt '" + txt + "'"  ); 
     582 
     583                                                        try  
     584                                                                { 
     585                                                                eval('lDialog.files = ' + txt); 
     586                                                                }  
     587                                                        catch(Error)  
     588                                                                { 
     589                                                                lDialog.files = [ {url:'',title:Error.toString()} ]; 
     590 
     591                                                                alert( "ERROR in file list return '" + txt + "'" ); 
     592 
     593                                                                } 
     594 
     595                                                        lDialog._prepareDialog();  
     596 
     597                                                        });     // end of _getback() call 
     598            } 
    326599    else if(linker.lConfig.files != null) 
    327     { 
    328         //get files from plugin-config 
    329         lDialog.files = linker.lConfig.files; 
    330         lDialog._prepareDialog(); 
    331     } 
     600            { 
     601 
     602                        linker.ddt._ddt( "linker.js","602", "_prepareDialog(): pulling files from plugin-config" ); 
     603 
     604                        //get files from plugin-config 
     605                        lDialog.files = linker.lConfig.files; 
     606                        lDialog._prepareDialog(); 
     607                        } 
     608 
    332609    return; 
    333   } 
     610 
     611          } // end of if files hadn't been loaded. 
     612 
    334613  var files = this.files; 
    335614 
    336615  if(this.html == false) 
    337   { 
    338     HTMLArea._getback(_editor_url + 'plugins/Linker/dialog.html', function(txt) { lDialog.html = txt; lDialog._prepareDialog(); }); 
     616          { 
     617 
     618                linker.ddt._ddt( "linker.js","618", "_prepareDialog(): dialog html file not yet loaded" ); 
     619 
     620    HTMLArea._getback( linker.lConfig.backend + '&__function=dialog',  
     621                                function(txt)  
     622                                        {  
     623                                        lDialog.html = txt;  
     624                                        lDialog._prepareDialog();  
     625                                        }); 
     626 
    339627    return; 
    340   } 
     628          } 
     629 
    341630  var html = this.html; 
    342631 
    343632  // Now we have everything we need, so we can build the dialog. 
     633 
     634        linker.ddt._ddt( "linker.js","634", "_prepareDialog(): creating Dialog object" ); 
     635 
    344636  var dialog = this.dialog = new HTMLArea.Dialog(linker.editor, this.html, 'Linker'); 
    345637  var dTreeName = HTMLArea.uniq('dTree_'); 
    346638 
     639        linker.ddt._ddt( "linker.js","639", "_prepareDialog(): building dTree" ); 
     640 
    347641  this.dTree = new dTree(dTreeName, _editor_url + 'plugins/Linker/dTree/'); 
    348642  eval(dTreeName + ' = this.dTree'); 
    349643 
     644        // add the root node of the tree holding the name of the site. 
     645 
    350646  this.dTree.add(this.Dialog_nxtid++, -1, document.location.host, null, document.location.host); 
    351647  this.makeNodes(files, 0); 
     
    353649  // Put it in 
    354650  var ddTree = this.dialog.getElementById('dTree'); 
     651 
    355652  //ddTree.innerHTML = this.dTree.toString(); 
     653 
    356654  ddTree.innerHTML = ''; 
    357655  ddTree.style.position = 'absolute'; 
     
    362660  this.dTree._linker_premade = this.dTree.toString(); 
    363661 
     662        // to see the HTML of the generated tree uncomment the following. 
     663        //       
     664        // linker.ddt._ddt( "linker.js","664", "_prepareDialog(): dTree string is '" + this.dTree.toString().replace( /[<]/g, '&lt;' ).replace( /[>]/g, '&gt;' ) + "'" ); 
     665 
    364666  var options = this.dialog.getElementById('options'); 
    365667  options.style.position = 'absolute'; 
     
    372674  this.dialog.onresize = function() 
    373675    { 
    374       options.style.height = ddTree.style.height = (dialog.height - dialog.getElementById('h1').offsetHeight) + 'px'; 
    375       ddTree.style.width  = (dialog.width  - 322 ) + 'px'; 
     676                options.style.height = ddTree.style.height = (dialog.height - dialog.getElementById('h1').offsetHeight) + 'px'; 
     677                ddTree.style.width  = (dialog.width  - 322 ) + 'px'; 
    376678    } 
    377679 
    378680  this.ready = true; 
    379 } 
     681 
     682        }       // end of _prepareDialog() 
     683 
     684// ----------------------------------------------------------------------------- 
     685 
     686/** 
     687* makeNodes() 
     688*/ 
    380689 
    381690Linker.Dialog.prototype.makeNodes = function(files, parent) 
    382 { 
     691        { 
     692 
     693  var linker = this.linker; 
     694 
     695        linker.ddt._ddt( "linker.js","695", "makeNodes(): top" ); 
     696 
    383697  for(var i = 0; i < files.length; i++) 
    384   { 
     698          { 
     699 
     700                // either it's a leaf node (file) or an array (subdirectory) 
     701 
    385702    if(typeof files[i] == 'string') 
    386     { 
     703        { 
     704 
     705                        linker.ddt._ddt( "linker.js","705", "makeNodes(): adding node for file '" + files[i] + "'" ); 
     706 
    387707      this.dTree.add(Linker.nxtid++, parent, 
    388708                     files[i].replace(/^.*\//, ''), 
    389709                     'javascript:document.getElementsByName(\'' + this.dialog.id.href + '\')[0].value=decodeURIComponent(\'' + encodeURIComponent(files[i]) + '\');document.getElementsByName(\'' + this.dialog.id.type + '\')[0].click();document.getElementsByName(\'' + this.dialog.id.href + '\')[0].focus();void(0);', 
    390710                     files[i]); 
    391     } 
     711 
     712 
     713 
     714            } 
    392715    else if(files[i].length) 
    393     { 
     716          { 
     717 
     718                        linker.ddt._ddt( "linker.js","718", "makeNodes(): adding node for file '" + files[i][0] + "'" ); 
     719 
    394720      var id = this.Dialog_nxtid++; 
    395721      this.dTree.add(id, parent, files[i][0].replace(/^.*\//, ''), null, files[i][0]); 
    396722      this.makeNodes(files[i][1], id); 
    397     } 
     723        } 
    398724    else if(typeof files[i] == 'object') 
    399     { 
    400       if(files[i].children) { 
     725                        { 
     726 
     727                        // this section handles the title: and url: style of scan.php output. 
     728 
     729      if(files[i].children)  
     730                                { 
    401731        var id = this.Dialog_nxtid++; 
    402       } else { 
     732        }  
     733                        else  
     734                                { 
    403735        var id = Linker.nxtid++; 
    404       } 
    405  
    406       if(files[i].title) var title = files[i].title; 
     736        } 
     737 
     738                        var name = files[i].url; 
     739 
     740      if ( files[i].title) var title = files[i].title; 
    407741      else if(files[i].url) var title = files[i].url.replace(/^.*\//, ''); 
    408742      else var title = "no title defined"; 
    409743      if(files[i].url) var link = 'javascript:document.getElementsByName(\'' + this.dialog.id.href + '\')[0].value=decodeURIComponent(\'' + encodeURIComponent(files[i].url) + '\');document.getElementsByName(\'' + this.dialog.id.type + '\')[0].click();document.getElementsByName(\'' + this.dialog.id.href + '\')[0].focus();void(0);'; 
    410744      else var link = ''; 
     745 
     746                        linker.ddt._ddt( "linker.js","746", "makeNodes(): adding node id '" + id + "' parent '" + parent + "' title '" + title + "' link '" + link + "' name '" + name + "'" ); 
    411747       
    412       this.dTree.add(id, parent, title, link, title); 
    413       if(files[i].children) { 
     748      this.dTree.add(id, parent, title, link, name); 
     749      if(files[i].children)  
     750                                { 
    414751        this.makeNodes(files[i].children, id); 
    415       } 
    416     } 
    417   } 
    418 } 
     752        } 
     753        } 
     754        } 
     755 
     756        linker.ddt._ddt( "linker.js","756", "makeNodes(): bottom" ); 
     757 
     758        }       // end of makeNodes() 
     759 
     760// -------------------------------------------------------------------- 
     761 
     762/** 
     763* copy of linker lc  
     764*/ 
    419765 
    420766Linker.Dialog.prototype._lc = Linker.prototype._lc; 
    421767 
     768// -------------------------------------------------------------------- 
     769 
     770/** 
     771* show() 
     772*/ 
     773 
    422774Linker.Dialog.prototype.show = function(inputs, ok, cancel) 
    423 { 
    424   if(!this.ready) 
    425   { 
     775        { 
     776 
     777        var linker = this.linker; 
     778 
     779        linker.ddt._ddt( "linker.js","779", "show(): top" ); 
     780 
     781        // if we are not ready pause a bit and come back. This can be confusing for 
     782        // the end user if it takes a really long time to build the linker list.  
     783        // 
     784        // FIXME: put in some kind of "please wait - building list" message. 
     785        // 
     786        // To avoid an endless loop situation, limit the number of times we wait. 
     787 
     788        if ( typeof this.wait_count == 'undefined' ) 
     789                { 
     790                this.wait_count = 1; 
     791                } 
     792        else 
     793                { 
     794                this.wait_count++; 
     795                } 
     796 
     797        if ( this.wait_count > 100 ) 
     798                { 
     799                alert( "Linker plugin has waited too long for the directory listing. Please check your javascript console for possible errors" ); 
     800                return false; 
     801                } 
     802 
     803        // this.ready gets set in _prepareDialog() when it's finished doing it's thing. 
     804        // Unfortunately it can take a very long time depending on the size of the 
     805        // directory structure. 
     806 
     807  if (!this.ready) 
     808        { 
     809 
     810                linker.ddt._ddt( "linker.js","810", "show(): we are not ready. setting a 100 timeout wait count is '" + this.wait_count + "'" ); 
     811 
    426812    var lDialog = this; 
    427     window.setTimeout(function() {lDialog.show(inputs,ok,cancel);},100); 
     813    window.setTimeout( 
     814                                function()  
     815                                        { 
     816                                        lDialog.show(inputs,ok,cancel); 
     817                                        },100); 
     818 
    428819    return; 
    429   } 
     820          } 
    430821 
    431822  if(this.ddTree.innerHTML == '') 
    432   { 
     823          { 
    433824    this.ddTree.innerHTML = this.dTree._linker_premade; 
    434   } 
     825          } 
    435826 
    436827  if(inputs.type=='url') 
    437   { 
     828          { 
    438829    this.dialog.getElementById('urltable').style.display = ''; 
    439830    this.dialog.getElementById('mailtable').style.display = 'none'; 
    440   } 
     831        } 
    441832  else 
    442   { 
     833          { 
    443834    this.dialog.getElementById('urltable').style.display = 'none'; 
    444835    this.dialog.getElementById('mailtable').style.display = ''; 
    445   } 
     836        } 
    446837 
    447838  if(inputs.target=='popup') 
    448   { 
     839          { 
    449840    this.dialog.getElementById('popuptable').style.display = ''; 
    450   } 
     841        } 
    451842  else 
    452   { 
     843          { 
    453844    this.dialog.getElementById('popuptable').style.display = 'none'; 
    454   } 
     845        } 
    455846 
    456847  // Connect the OK and Cancel buttons 
     848 
    457849  var dialog = this.dialog; 
    458850  var lDialog = this; 
    459   if(ok) 
    460   { 
     851  if (ok) 
     852        { 
    461853    this.dialog.getElementById('ok').onclick = ok; 
    462   } 
     854          } 
    463855  else 
    464   { 
     856        { 
    465857    this.dialog.getElementById('ok').onclick = function() {lDialog.hide();}; 
    466   } 
     858          } 
    467859 
    468860  if(cancel) 
    469   { 
     861        { 
    470862    this.dialog.getElementById('cancel').onclick = cancel; 
    471   } 
     863          } 
    472864  else 
    473   { 
     865        { 
    474866    this.dialog.getElementById('cancel').onclick = function() { lDialog.hide()}; 
    475   } 
     867          } 
     868 
     869  // highlight the currently selected item, if one has been selected. 
     870  // unfortunately this means we have to loop through the dTree looking 
     871  // for a match on the target url. 
     872 
     873  var n=0; 
     874 
     875        linker.ddt._ddt( "linker.js","875", "show(): clearing selection" ); 
     876 
     877  this.dTree.clear_s(); 
     878 
     879  for (n; n<this.dTree.aNodes.length; n++)  
     880    { 
     881 
     882                linker.ddt._ddt( "linker.js","882", "show(): checking tree node '" + this.dTree.aNodes[n].title + "' against '" + inputs.href + "'" ); 
     883 
     884                if (this.dTree.aNodes[n].title == inputs.href)  
     885                        { 
     886                        linker.ddt._ddt( "linker.js","886", "show(): found selection at node '" + n + "'. selecting" ); 
     887 
     888                        this.dTree.s( n ); 
     889 
     890                        // it's possible that the sected link is in a collapsed subdirectory so open 
     891                        // the tree to the selected node. 
     892 
     893                        this.dTree.openTo( n, true, true ); 
     894 
     895                        // we would like to be able to scroll to the currently selected 
     896                        // node because it may be well below the visible portion of the  
     897                        // div. (see the id="[dTree]" in dialog.html to see where the tree 
     898                        // is displayed in the dialog. 
     899                        // 
     900                        // I've add a getNodeElement() method to dTree.js to return the <a>  
     901                        // element of the given node. Gecko and MSIE support a scrollIntoView() 
     902                        // method that should, in theory, scroll to make the given item visible. 
     903                        // 
     904                        // However, this has to be done after the dialog is displayed so we keep  
     905                        // the selectednode and call scrollIntoView() after the resizing. 
     906 
     907                        var selectedNode = this.dTree.getNodeElement(n); 
     908 
     909                        linker.ddt._ddt( "linker.js","909", "show(): select Node tagName is '" + selectedNode.tagName + "'" ); 
     910 
     911                        } 
     912                } 
    476913 
    477914  // Show the dialog 
     915 
    478916  this.linker.editor.disableToolbar(['fullscreen','linker']); 
    479917 
     
    481919 
    482920  // Init the sizes 
     921 
    483922  this.dialog.onresize(); 
    484 } 
     923 
     924        // scrollIntoView() is supported by MSIE 4+ and Gecko. It is not, according to the 
     925        // documentation I have, part of the DOM spec. 
     926 
     927        if ( selectedNode ) 
     928                selectedNode.scrollIntoView(); 
     929                 
     930        linker.ddt._ddt( "linker.js","930", "show(): bottom" ); 
     931 
     932        }       // end of show() 
     933 
     934// ------------------------------------------------------------------- 
     935 
     936/** 
     937* hide() 
     938*/ 
    485939 
    486940Linker.Dialog.prototype.hide = function() 
    487 { 
     941        { 
     942 
     943        var linker = this.linker; 
     944 
     945        linker.ddt._ddt( "linker.js","945", "hide(): top" ); 
     946 
    488947  this.linker.editor.enableToolbar(); 
    489948  return this.dialog.hide(); 
    490 } 
    491  
     949 
     950        }       // end of hide() 
     951 
     952// ----------------------------------------------------------- 
     953 
     954/** 
     955* scrollToElement() 
     956* 
     957* @todo THIS DOES NOT WORK. IT'S RIPPED OFF FROM htmlarea.js AND IS SETUP FOR A WINDOW 
     958*  
     959* this.ddtTree is a div that contains a tree. How to scroll to the right position in the 
     960* tree since the <div> tag doesn't seem to have an analog to the 'scrollTo()' method?? 
     961*/ 
     962 
     963Linker.Dialog.prototype.scrollToElement = function(e) 
     964  { 
     965 
     966        var linker = this.linker; 
     967 
     968  linker.ddt._ddt( "linker.js","968", "scrollToElement(): top" ); 
     969 
     970  if(HTMLArea.is_gecko) 
     971    { 
     972    var top  = 0; 
     973    var left = 0; 
     974 
     975    while(e) 
     976      { 
     977      top  += e.offsetTop; 
     978      left += e.offsetLeft; 
     979      if(e.offsetParent && e.offsetParent.tagName.toLowerCase() != 'body') 
     980        { 
     981        e = e.offsetParent; 
     982        } 
     983      else 
     984        { 
     985        e = null; 
     986        } 
     987      } 
     988 
     989    // this._iframe.contentWindow.scrollTo(left, top); 
     990 
     991          //linker.ddt._ddtDumpObject( "linker.js","6740", "scrollToElement(): before calling scrollTo top '" + top + "' left '" + left + "'", this.ddTree ); 
     992 
     993    linker.ddt._ddt( "linker.js","993", "Type of ddtTree is '" + this.ddTree.tagName + "'" ); 
     994 
     995    } 
     996  } // end of scrollToElement() 
     997 
     998// END 
     999 
  • branches/unified_backend/plugins/Linker/scan.php

    r57 r121  
    11<?php 
    22 
    3     // /home/username/foo/public_html/ 
    4     $dir          = $_SERVER['DOCUMENT_ROOT']; 
    5     $include      = '/\.(php|shtml|html|htm|shtm|cgi|txt|doc|pdf|rtf|xls|csv)$/'; 
    6     $exclude      = ''; 
    7     $dirinclude   = ''; 
    8     $direxclude   = '/(^|\/)[._]|htmlarea/'; // Exclude the htmlarea tree by default 
    9  
    10     $hash = ''; 
    11     foreach(explode(',', 'dir,include,exclude,dirinclude,direxclude') as $k) 
    12     { 
    13       if(isset($_REQUEST[$k])) 
    14       { 
    15         if(get_magic_quotes_gpc()) 
    16         { 
    17           $_REQUEST[$k] = stripslashes($_REQUEST[$k]); 
    18         } 
    19         $hash .= $k . '=' . $_REQUEST[$k]; 
    20         $$k = $_REQUEST[$k]; 
     3/** 
     4* scan.php Linker backend 
     5* 
     6* @author James Sleeman 
     7* @author Yermo Lamers http://www.formvista.com/contact.html unified backend modifications. 
     8* @copyright Gogo Code http://code.gogo.co.nz 
     9*/ 
     10 
     11/** 
     12* Xinha PHP backend master config file 
     13* 
     14* we assume the current working directory is plugins/Linker 
     15*/ 
     16 
     17require_once( "../../backends/backend_conf.php" ); 
     18 
     19/** 
     20* debugging library 
     21*/ 
     22 
     23require_once( "../../ddt/ddt.php" ); 
     24 
     25// by default we'll point linker at the examples document directory  
     26 
     27$dir          = XINHA_INSTALL_ROOT . "/examples";  
     28 
     29$include      = '/\.(php|shtml|html|htm|shtm|cgi|txt|doc|pdf|rtf|xls|csv)$/'; 
     30$exclude      = ''; 
     31$dirinclude   = ''; 
     32$direxclude   = '/(^|\/)[._]|htmlarea/'; // Exclude the htmlarea tree by default 
     33 
     34// ------------------------------------------------------------------------------- 
     35 
     36_ddt( __FILE__, __LINE__, "scan.php: top" ); 
     37 
     38$hash = ''; 
     39foreach(explode(',', 'dir,include,exclude,dirinclude,direxclude') as $k) 
     40        { 
     41        if (isset($_REQUEST[$k])) 
     42                { 
     43 
     44                if (get_magic_quotes_gpc()) 
     45                        { 
     46                        $_REQUEST[$k] = stripslashes($_REQUEST[$k]); 
     47                        } 
     48 
     49                $hash .= $k . '=' . $_REQUEST[$k]; 
     50                $$k = $_REQUEST[$k]; 
     51                } 
     52        } 
     53 
     54if ($hash) 
     55        { 
     56        session_start(); 
     57        if (!isset($_SESSION[sha1($hash)])) 
     58                { 
     59                ?> 
     60                [ ]; 
     61                <?php 
     62                exit; 
    2163      } 
    2264    } 
    2365 
    24     if($hash) 
    25     { 
    26       session_start(); 
    27       if(!isset($_SESSION[sha1($hash)])) 
    28       { 
    29         ?> 
    30         [ ]; 
    31         <?php 
    32         exit; 
    33       } 
    34     } 
    35  
    36     function scan($dir, $durl = '') 
    37     { 
    38       global $include, $exclude, $dirinclude, $direxclude; 
    39       static $seen = array(); 
    40  
    41       $files = array(); 
    42  
    43       $dir = realpath($dir); 
    44       if(isset($seen[$dir])) 
    45       { 
    46         return $files; 
    47       } 
    48       $seen[$dir] = TRUE; 
    49       $dh = @opendir($dir); 
    50  
    51  
    52       while($dh && ($file = readdir($dh))) 
    53       { 
    54         if($file !== '.' && $file !== '..') 
    55         { 
    56           $path = realpath($dir . '/' . $file); 
    57           $url  = $durl . '/' . $file; 
    58  
    59           if(($dirinclude && !preg_match($dirinclude, $url)) || ($direxclude && preg_match($direxclude, $url))) continue; 
    60           if(is_dir($path)) 
    61           { 
    62             if($subdir = scan($path, $url)) 
    63             { 
    64               $files[] = array('url'=>$url, 'children'=>$subdir); 
    65             } 
    66           } 
    67           elseif(is_file($path)) 
    68           { 
    69             if(($include && !preg_match($include, $url)) || ($exclude && preg_match($exclude, $url))) continue; 
    70             $files[] = array('url'=>$url); 
    71           } 
    72  
    73         } 
    74       } 
    75       @closedir($dh); 
    76       return dirsort($files); 
    77     } 
    78  
    79     function dirsort($files) 
    80     { 
    81       usort($files, 'dircomp'); 
    82       return $files; 
    83     } 
    84  
    85     function dircomp($a, $b) 
    86     { 
    87       if(is_array($a)) $a = $a[0]; 
    88       if(is_array($b)) $b = $b[0]; 
    89       return strcmp(strtolower($a), strtolower($b)); 
    90     } 
    91  
    92     function to_js($var, $tabs = 0) 
    93     { 
    94       if(is_numeric($var)) 
    95       { 
    96         return $var; 
    97       } 
    98  
    99       if(is_string($var)) 
    100       { 
    101         return "'" . js_encode($var) . "'"; 
    102       } 
    103  
    104       if(is_array($var)) 
    105       { 
    106         $useObject = false; 
    107         foreach(array_keys($var) as $k) { 
    108             if(!is_numeric($k)) $useObject = true; 
    109         } 
    110         $js = array(); 
    111         foreach($var as $k => $v) 
    112         { 
    113           $i = ""; 
    114           if($useObject) { 
    115             if(preg_match('#[a-zA-Z]+[a-zA-Z0-9]*#', $k)) { 
    116               $i .= "$k: "; 
    117             } else { 
    118               $i .= "'$k': "; 
    119             } 
    120           } 
    121           $i .= to_js($v, $tabs + 1); 
    122           $js[] = $i; 
    123         } 
    124         if($useObject) { 
    125             $ret = "{\n" . tabify(implode(",\n", $js), $tabs) . "\n}"; 
    126         } else { 
    127             $ret = "[\n" . tabify(implode(",\n", $js), $tabs) . "\n]"; 
    128         } 
    129         return $ret; 
    130       } 
    131  
    132       return 'null'; 
    133     } 
    134  
    135     function tabify($text, $tabs) 
    136     { 
    137       if($text) 
    138       { 
    139         return str_repeat("  ", $tabs) . preg_replace('/\n(.)/', "\n" . str_repeat("  ", $tabs) . "\$1", $text); 
    140       } 
    141     } 
    142  
    143     function js_encode($string) 
    144     { 
    145       static $strings = "\\,\",',%,&,<,>,{,},@,\n,\r"; 
    146  
    147       if(!is_array($strings)) 
    148       { 
    149         $tr = array(); 
    150         foreach(explode(',', $strings) as $chr) 
    151         { 
    152           $tr[$chr] = sprintf('\x%02X', ord($chr)); 
    153         } 
    154         $strings = $tr; 
    155       } 
    156  
    157       return strtr($string, $strings); 
    158     } 
    159  
    160  
    161     echo to_js(scan($dir)); 
     66// -------------------------------------------------------------- 
     67 
     68/** 
     69* scan a directory 
     70*/ 
     71 
     72function scan($dir, $durl = '') 
     73        { 
     74        global $include, $exclude, $dirinclude, $direxclude; 
     75        static $seen = array(); 
     76 
     77        _ddt( __FILE__, __LINE__, "scan(): to with dir '" . $dir . "' and durl '" . $durl . "'" ); 
     78 
     79        $files = array(); 
     80 
     81        $dir = realpath($dir); 
     82 
     83        if(isset($seen[$dir])) 
     84                { 
     85                return $files; 
     86                } 
     87 
     88        $seen[$dir] = TRUE; 
     89        $dh = @opendir($dir); 
     90 
     91        while($dh && ($file = readdir($dh))) 
     92                { 
     93                if($file !== '.' && $file !== '..') 
     94                        { 
     95                        $path = realpath($dir . '/' . $file); 
     96                        $url  = $durl . '/' . $file; 
     97 
     98                        if(($dirinclude && !preg_match($dirinclude, $url)) || ($direxclude && preg_match($direxclude, $url))) continue; 
     99                        if(is_dir($path)) 
     100                                { 
     101                                if($subdir = scan($path, $url)) 
     102                                        { 
     103                                        $files[] = array('url'=>$url, 'children'=>$subdir); 
     104                                        } 
     105                                } 
     106                        elseif(is_file($path)) 
     107                                { 
     108                                if(($include && !preg_match($include, $url)) || ($exclude && preg_match($exclude, $url))) continue; 
     109                                $files[] = array('url'=>$url); 
     110                                } 
     111 
     112                        } 
     113                } 
     114 
     115        @closedir($dh); 
     116 
     117        return dirsort($files); 
     118 
     119        }       // end of scan() 
     120 
     121// ---------------------------------------------------------------------- 
     122 
     123/** 
     124* sort a directory 
     125*/ 
     126 
     127function dirsort($files) 
     128        { 
     129        usort($files, 'dircomp'); 
     130        return $files; 
     131        } 
     132 
     133// ----------------------------------------------------------------------- 
     134 
     135/** 
     136* compare directory entries 
     137*/ 
     138 
     139function dircomp($a, $b) 
     140        { 
     141 
     142        _ddt( __FILE__, __LINE__, "dircomp(): top" ); 
     143 
     144        if(is_array($a))  
     145                { 
     146                _ddt( __FILE__, __LINE__, "dircomp(): a is a directory" ); 
     147 
     148                foreach ( $a as $name => $value ) 
     149                        _ddt( __FILE__, __LINE__, "dircomp(): $name => $value" ); 
     150 
     151                $a = $a["url"]; 
     152                } 
     153 
     154        if(is_array($b))  
     155                { 
     156                _ddt( __FILE__, __LINE__, "dircomp(): b is a directory" ); 
     157 
     158                $b = $b["url"]; 
     159                } 
     160 
     161        _ddt( __FILE__, __LINE__, "dircomp(): comparing '$a' with '$b'" ); 
     162 
     163        return strcmp(strtolower($a), strtolower($b)); 
     164 
     165        }       // end of dircomp() 
     166 
     167// ---------------------------------------------------------------------- 
     168 
     169/** 
     170* generate javascript array 
     171*/ 
     172 
     173function to_js( $var, $tabs = 0) 
     174        { 
     175 
     176        _ddt( __FILE__, __LINE__, "to_js(): top with var '$var'" ); 
     177 
     178        if(is_numeric($var)) 
     179                { 
     180                return $var; 
     181                } 
     182 
     183        if(is_string($var)) 
     184                { 
     185                return "'" . js_encode($var) . "'"; 
     186                } 
     187 
     188        if(is_array($var)) 
     189                { 
     190                $useObject = false; 
     191                foreach(array_keys($var) as $k)  
     192                        { 
     193                        if(!is_numeric($k)) $useObject = true; 
     194                        } 
     195 
     196                $js = array(); 
     197 
     198                foreach($var as $k => $v) 
     199                        { 
     200                        $i = ""; 
     201 
     202                        if($useObject)  
     203                                { 
     204                                if(preg_match('#[a-zA-Z]+[a-zA-Z0-9]*#', $k))  
     205                                        { 
     206                                        $i .= "$k: "; 
     207                                        }  
     208                                else  
     209                                        { 
     210                                        $i .= "'$k': "; 
     211                                        } 
     212                                } 
     213                         
     214                        $i .= to_js($v, $tabs + 1); 
     215                        $js[] = $i; 
     216                        } 
     217 
     218        if ($useObject)  
     219                        { 
     220                        $ret = "{\n" . tabify(implode(",\n", $js), $tabs) . "\n}"; 
     221                        }  
     222                else  
     223                        { 
     224                        $ret = "[\n" . tabify(implode(",\n", $js), $tabs) . "\n]"; 
     225                        } 
     226                return $ret; 
     227 
     228                } 
     229 
     230        return 'null'; 
     231         
     232        }       // end of to_js() 
     233 
     234// ------------------------------------------------------------------------ 
     235 
     236/** 
     237* tabify() 
     238*/ 
     239 
     240function tabify($text, $tabs) 
     241        { 
     242        if($text) 
     243                { 
     244                return str_repeat("  ", $tabs) . preg_replace('/\n(.)/', "\n" . str_repeat("  ", $tabs) . "\$1", $text); 
     245                } 
     246        } 
     247 
     248// --------------------------------------------------------------------- 
     249 
     250/** 
     251* js_encode() 
     252*/ 
     253 
     254function js_encode($string) 
     255        { 
     256        static $strings = "\\,\",',%,&,<,>,{,},@,\n,\r"; 
     257 
     258        if(!is_array($strings)) 
     259                { 
     260                $tr = array(); 
     261                foreach(explode(',', $strings) as $chr) 
     262                        { 
     263                        $tr[$chr] = sprintf('\x%02X', ord($chr)); 
     264                        } 
     265                $strings = $tr; 
     266                } 
     267 
     268        return strtr($string, $strings); 
     269        } 
     270 
     271/** 
     272* send out the resulting javascript array. 
     273*/ 
     274 
     275$javascript_array = to_js(scan($dir)); 
     276 
     277// if you want to see what's communicated back to the browser uncomment this. You will 
     278// get the output in an error popup. 
     279// 
     280// _ddtOn(); 
     281 
     282_ddt( __FILE__, __LINE__, "scan.php: Resulting array is '" + $javascript_array + "'" ); 
     283 
     284echo $javascript_array; 
     285 
     286// END 
    162287?> 
Note: See TracChangeset for help on using the changeset viewer.