1/** 2 * JavaScript functionalitiy for the media management popup 3 * 4 * @author Andreas Gohr <andi@splitbrain.org> 5 * @author Otto Vainio <plugins@valjakko.net> 6 */ 7linkpage = { 8 keepopen: false, 9 hide: false, 10 11 /** 12 * Attach event handlers to all "folders" below the given element 13 * 14 * @author Andreas Gohr <andi@splitbrain.org> 15 * @author Otto Vainio <plugins@valjakko.net> 16 */ 17 treeattach: function(obj){ 18 if(!obj) return; 19 20 var items = obj.getElementsByTagName('li'); 21 for(var i=0; i<items.length; i++){ 22 var elem = items[i]; 23 24 // attach action to make the +/- clickable 25 var clicky = elem.getElementsByTagName('img')[0]; 26 clicky.style.cursor = 'pointer'; 27 addEvent(clicky,'click',function(event){ return linkpage.toggle(event,this); }); 28 // attach action load folder list via AJAX 29 var link = elem.getElementsByTagName('a')[0]; 30 link.style.cursor = 'pointer'; 31 addEvent(link,'click',function(event){ return linkpage.list(event,this); }); 32 } 33 }, 34 35 /** 36 * Attach the image selector action to all links below the given element 37 * 38 * @author Andreas Gohr <andi@splitbrain.org> 39 * @author Otto Vainio <plugins@valjakko.net> 40 */ 41 selectorattach: function(obj){ 42 if(!obj) return; 43 var items = getElementsByClass('select',obj,'a'); 44 for(var i=0; i<items.length; i++){ 45 var elem = items[i]; 46 elem.style.cursor = 'pointer'; 47 addEvent(elem,'click',function(event){ return linkpage.select(event,this); }); 48 } 49 50 // hide syntax example 51 items = getElementsByClass('example',obj,'div'); 52 for(var i=0; i<items.length; i++){ 53 elem = items[i]; 54 elem.style.display = 'none'; 55 } 56 57 var items = getElementsByClass('newpage__submit',obj,'a'); 58 for(var i=0; i<items.length; i++){ 59 var elem = items[i]; 60// var elem = $('newpage__submit'); 61// if(!elem) return; 62 elem.style.cursor = 'pointer'; 63 addEvent(elem,'click',function(event){ return linkpage.selectnew(event,this); }); 64 } 65// var elem = $('newpage__name'); 66// if(!elem) return; 67// addEvent(elem,'change',linkpage.update); 68 }, 69 70 /** 71 * Creates checkboxes for additional options 72 * 73 * @author Andreas Gohr <andi@splitbrain.org> 74 * @author Otto Vainio <plugins@valjakko.net> 75 */ 76 attachoptions: function(obj){ 77 if(!obj) return; 78 // keep open 79 if(opener){ 80 var kobox = document.createElement('input'); 81 kobox.type = 'checkbox'; 82 kobox.id = 'linkpage__keepopen'; 83 if(DokuCookie.getValue('keepopen')){ 84 kobox.checked = true; 85 kobox.defaultChecked = true; //IE wants this 86 linkpage.keepopen = true; 87 } 88 addEvent(kobox,'click',function(event){ return linkpage.togglekeepopen(event,this); }); 89 90 var kolbl = document.createElement('label'); 91 kolbl.htmlFor = 'linkpage__keepopen'; 92 kolbl.innerHTML = LANG['keepopen']; 93 94 var kobr = document.createElement('br'); 95 96 obj.appendChild(kobox); 97 obj.appendChild(kolbl); 98 obj.appendChild(kobr); 99 } 100 101 }, 102 103 /** 104 * Toggles the keep open state 105 * 106 * @author Andreas Gohr <andi@splitbrain.org> 107 */ 108 togglekeepopen: function(event,cb){ 109 if(cb.checked){ 110 DokuCookie.setValue('keepopen',1); 111 linkpage.keepopen = true; 112 }else{ 113 DokuCookie.setValue('keepopen',''); 114 linkpage.keepopen = false; 115 } 116 }, 117 118 /** 119 * Toggles the hide details state 120 * 121 * @author Andreas Gohr <andi@splitbrain.org> 122 */ 123 togglehide: function(event,cb){ 124 if(cb.checked){ 125 DokuCookie.setValue('hide',1); 126 linkpage.hide = true; 127 }else{ 128 DokuCookie.setValue('hide',''); 129 linkpage.hide = false; 130 } 131 linkpage.updatehide(); 132 }, 133 134 /** 135 * Sets the visibility of the image details accordingly to the 136 * chosen hide state 137 * 138 * @author Andreas Gohr <andi@splitbrain.org> 139 */ 140 updatehide: function(){ 141 var obj = $('linkpage__content'); 142 if(!obj) return; 143 var details = getElementsByClass('detail',obj,'div'); 144 for(var i=0; i<details.length; i++){ 145 if(linkpage.hide){ 146 details[i].style.display = 'none'; 147 }else{ 148 details[i].style.display = ''; 149 } 150 } 151 }, 152 153 /** 154 * Insert the clicked image into the opener's textarea 155 * 156 * @author Andreas Gohr <andi@splitbrain.org> 157 */ 158 select: function(event,link){ 159 var id = link.name.substr(2); 160 var confusesepafield = $('conf__use_sepa'); 161 var confusesepa = confusesepafield.value; 162 var sepa = ''; 163 if (confusesepa==1) 164 { 165 sepa='|'; 166 } 167 if (confusesepa==0) 168 { 169 sepa=''; 170 } 171 172 if(!opener){ 173 // if we don't run in popup display example 174 var ex = $('ex_'+id); 175 if(ex.style.display == ''){ 176 ex.style.display = 'none'; 177 }else{ 178 ex.style.display = ''; 179 } 180 return false; 181 } 182 opener.insertTags('wiki__text','[[:'+id+sepa,']]',''); 183 184 if(!linkpage.keepopen) window.close(); 185 opener.focus(); 186 return false; 187 }, 188 189 selectnew: function(event,link){ 190// var id = link.value; 191 var submit = $('newpage__name'); 192 var id = submit.value; 193 var nsfield = $('newpage__ns'); 194 var confusesepafield = $('conf__use_sepa'); 195 var confusesepa = confusesepafield.value; 196 var sepa = ''; 197 if (confusesepa==1) 198 { 199 sepa='|'; 200 } 201 if (confusesepa==0) 202 { 203 sepa=''; 204 } 205 206 var ns = nsfield.value; 207 if (ns) 208 { 209 ns = ns + ':'; 210 } 211 if(!opener){ 212 // if we don't run in popup display example 213 var ex = $('ex_'+id); 214 if(ex.style.display == ''){ 215 ex.style.display = 'none'; 216 }else{ 217 ex.style.display = ''; 218 } 219 return false; 220 } 221 opener.insertTags('wiki__text','[[:'+ns+id+sepa,']]',''); 222 223 if(!linkpage.keepopen) window.close(); 224 opener.focus(); 225 return false; 226 }, 227 228 /** 229 * list the content of a namespace using AJAX 230 * 231 * @author Andreas Gohr <andi@splitbrain.org> 232 */ 233 list: function(event,link){ 234 // prepare an AJAX call to fetch the subtree 235 236 var ajax = new sack(DOKU_BASE + 'lib/plugins/linkmanager/exe/ajax.php'); 237 ajax.AjaxFailedAlert = ''; 238 ajax.encodeURIString = false; 239 if(ajax.failed) return true; 240 241 cleanMsgArea(); 242 243 var content = $('linkpage__content'); 244 content.innerHTML = '<img src="'+DOKU_BASE+'lib/images/loading.gif" alt="..." class="load" />'; 245 246 ajax.elementObj = content; 247 ajax.afterCompletion = function(){ 248 linkpage.selectorattach(content); 249 linkpage.updatehide(); 250 reinitsort(); 251 }; 252 ajax.runAJAX(link.search.substr(1)+'&call=linkpagelist'); 253 return false; 254 }, 255 256 257 /** 258 * Open or close a subtree using AJAX 259 * 260 * @author Andreas Gohr <andi@splitbrain.org> 261 */ 262 toggle: function(event,clicky){ 263 var listitem = clicky.parentNode; 264 265 // if already open, close by removing the sublist 266 var sublists = listitem.getElementsByTagName('ul'); 267 if(sublists.length){ 268 listitem.removeChild(sublists[0]); 269 clicky.src = DOKU_BASE+'lib/images/plus.gif'; 270 return false; 271 } 272 273 // get the enclosed link (is always the first one) 274 var link = listitem.getElementsByTagName('a')[0]; 275 276 // prepare an AJAX call to fetch the subtree 277 var ajax = new sack(DOKU_BASE + 'lib/plugins/linkmanager/exe/ajax.php'); 278 ajax.AjaxFailedAlert = ''; 279 ajax.encodeURIString = false; 280 if(ajax.failed) return true; 281 282 //prepare the new ul 283 var ul = document.createElement('ul'); 284 //fixme add classname here 285 listitem.appendChild(ul); 286 ajax.elementObj = ul; 287 ajax.afterCompletion = function(){ linkpage.treeattach(ul); }; 288 ajax.runAJAX(link.search.substr(1)+'&call=linkpagens'); 289 clicky.src = DOKU_BASE+'lib/images/minus.gif'; 290 return false; 291 } 292 293}; 294 295addInitEvent(function(){ 296 linkpage.treeattach($('linkpage__tree')); 297 linkpage.selectorattach($('linkpage__content')); 298 linkpage.attachoptions($('linkpage__opts')); 299}); 300 301 302//if(toolbar){ 303if(window.toolbar!=undefined){ 304 toolbar[toolbar.length] = {"type":"mediapopup", 305 "title":"links", 306 "icon":"../../plugins/linkmanager/images/page_link.png", 307 "key":"", 308 "name":"linknameselect", 309 "url":DOKU_BASE+"lib/plugins/linkmanager/exe/filemanager.php?ns=", 310 "options":"width=750,height=500,left=20,top=20,scrollbars=yes,resizable=yes" 311 }; 312} 313 314 315function reinitsort() { 316 sorttable.reinit(); 317} 318