| [ Index ] |
PHP Cross Reference of Drupal 6 (yi-drupal) |
[Summary view] [Print] [Text view]
1 // $Id: functions.js,v 1.1.4.2 2008/12/05 10:59:28 wwalc Exp $ 2 3 function preinit() { 4 // Initialize 5 tinyMCE.setWindowArg('mce_windowresize', false); 6 } 7 8 function init() { 9 window.focus(); 10 loadCategories(null); 11 } 12 13 /** 14 * loadCategories() 15 * @param obj parent Object 16 **/ 17 function loadCategories(obj) { 18 var params = ''; 19 var mid = '0'; 20 var top = 75; 21 var objTop; 22 if (obj != null) { 23 mid = $(obj).get(0).value; 24 25 try 26 { 27 objTop = $(obj).attr('id').match(/_(\d+)_sel/); 28 top += (objTop[1] * 17); 29 } 30 catch (e) { 31 top += 0; 32 } 33 } 34 params = 'ltc-type=linktocontent_menu<c-menu-id=' + mid; 35 36 $('#statusImg').css({top: top + 'px'}).show(); 37 38 $.ajax({ 39 type: "POST", 40 url: _getBaseHref() + 'index.php?q=linktocontent', 41 data: params, 42 error: function(xml, msg, exc) { 43 $('#statusImg').hide(); 44 alert('Error: ' + msg + '\n' + xml.responseText); 45 }, 46 success: function(data){ 47 try { 48 var results = eval('(' + data + ');'); 49 _clearNodeList(); 50 if ((obj == null) || ($(obj).get(0).value > -1)) { 51 if (_fillDropdown(obj, results)) { 52 window.resizeBy(0, 17); 53 } 54 } 55 _fillNodelist(results); 56 } 57 catch (e) { 58 alert('Error on retrieving data from module.\n' + e.name + '\n' + e.message); 59 } 60 finally { 61 $('#statusImg').hide(); 62 } 63 }}); 64 } 65 66 function insertAction() { 67 if (selectedNode == null) { 68 return; 69 } 70 var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id')); 71 var elm = inst.getFocusElement(); 72 73 elm = tinyMCE.getParentElement(elm, "a"); 74 75 tinyMCEPopup.execCommand("mceBeginUndoLevel"); 76 77 // Create new anchor elements 78 var path = selectedNode.cells[0].firstChild.nodeValue; 79 if (elm == null) { 80 var insertText = selectedNode.cells[1].firstChild.nodeValue; 81 if (inst.selection.getSelectedText().length == 0) { 82 tinyMCEPopup.execCommand("mceInsertContent", false, 83 '<a href="' + path + '">' + insertText + '</a>'); 84 } 85 else { 86 tinyMCEPopup.execCommand("mceInsertContent", false, 87 '<a href="' + path + '">' + inst.selection.getSelectedHTML() + '</a>'); 88 } // end (getSelectedText == 0) 89 } 90 else { 91 elm.setAttribute("mce_href", path); 92 // Refresh in old MSIE 93 if (tinyMCE.isMSIE5) 94 elm.outerHTML = elm.outerHTML; 95 } 96 97 tinyMCE._setEventsEnabled(inst.getBody(), false); 98 tinyMCEPopup.execCommand("mceEndUndoLevel"); 99 tinyMCEPopup.close(); 100 } 101 102 function loadScript(url) { 103 $('head', document).append('<script type="text/javascript" src="' + url + '"></script>'); 104 } 105 106 /** 107 * returns the base drupal path 108 * @access public 109 **/ 110 function _getBaseHref() { 111 var url = baseUrl.substring(0, baseUrl.indexOf('modules/')); 112 if (url.indexOf('sites/') > -1) 113 url = url.substring(0, url.indexOf('sites/')); 114 return url; 115 } 116 117 // dropdown functions 118 /** 119 * 120 * @access public 121 * @return void 122 **/ 123 function _createDropdown(obj){ 124 var dropdown; 125 var elemname = ''; 126 if (obj == null) { 127 elemname = 'browse_sel_-1'; 128 } 129 else { 130 elemname = $(obj).parent().attr('id'); 131 _removeDescendant($(obj)); 132 } 133 134 var level = parseInt(elemname.substring(elemname.lastIndexOf("_") + 1, elemname.length)) + 1; 135 136 var elemBase = elemname.substring(0, elemname.lastIndexOf("_") + 1); 137 138 // create surrounding <div> 139 var sel_div = $('<div></div>'); 140 $(sel_div).attr('name', elemBase + level); 141 $(sel_div).attr('id', elemBase + level); 142 $(sel_div).attr('style', 'display: block; margin: 1px 0; padding: 0; border: 0;'); 143 144 // create <select> 145 var select = $('<select></select>'); 146 $(select).attr('size', 1); 147 $(select).attr('name', elemBase + level + '_sel'); 148 $(select).attr('id', elemBase + level + '_sel'); 149 150 // add event handler 151 $(select).change(function() { 152 _removeDescendant($(this).parent()); 153 _clearNodeList(); 154 loadCategories($(this)); 155 }); 156 157 // create image (only if level > 0) 158 if (level > 0) { 159 var img = $('<img />'); 160 $(img).attr('id', elemname.substring(0, elemname.lastIndexOf('_') + 1) + level + '_img'); 161 $(img).attr('alt', ''); 162 $(img).attr('src', 'images/descendant.gif'); 163 // extra margin for IE 164 $(img).css({margin: '0px 2px', border: 0}); 165 $(img).css({marginLeft: String((parseInt(level) - 1) * 14) + 'px', marginRight: '2px'}); 166 $(sel_div).append($(img)); 167 } 168 169 $(sel_div).append($(select)); 170 $(sel_div).hide(); 171 $('#form_browse').append($(sel_div)); 172 $(sel_div).show('slow'); 173 return select; 174 } 175 176 /** 177 * _fillDropdown 178 * @return true if a dropdown was inserted 179 **/ 180 function _fillDropdown(obj, results){ 181 if (results.menus != false) { 182 var select = _createDropdown(obj); 183 $(select).addOption(-1, FCKLang.DlgChooseCategory); 184 for (key in results.menus) { 185 if (results.menus[key].hasChildren) { 186 $(select).addOption(results.menus[key].mid, results.menus[key].title); 187 } 188 } 189 return true; 190 } 191 return false; 192 } 193 194 /** 195 * remove "child" elements 196 **/ 197 function _removeDescendant(elem) { 198 if (elem == null) 199 return; 200 $(elem).next().each( 201 function() { 202 _removeDescendant($(this)); 203 window.resizeBy(0, -17); 204 $(this).hide('slow').remove(); 205 } 206 ); 207 } 208 209 // nodelist functions 210 var selectedNode = null; 211 212 function _fillNodelist(results) { 213 if ((results == null) || (results.menus == null) || (results.menus == false)) 214 return; 215 216 for (key in results.menus) { 217 if (results.menus[key].root) { 218 continue; 219 } 220 _addNodeToList(results.menus[key]); 221 } 222 } 223 224 function _clearNodeList() { 225 $('#nodelist tbody tr').each( 226 function() { 227 $(this).remove(); 228 } 229 ); 230 } 231 232 function selectRow(row) { 233 if (!row) { 234 return; 235 } 236 $('#nodelist tbody tr').each(function() { 237 $(this).css({background: '#ffffff'}); 238 selectedNode = null; 239 }); 240 selectedNode = row; 241 $(row).css({background: '#dadfe9'}); 242 } 243 244 function _addNodeToList(node){ 245 var tr = $('<tr></tr>').appendTo('#nodelist tbody'); 246 tr.hover( 247 function() { 248 if (selectedNode != this) { 249 $(this).css({background: '#cecece'}); 250 } 251 }, 252 function() { 253 if (selectedNode != this) { 254 $(this).css({background: '#ffffff'}); 255 } 256 } 257 ); 258 tr.click(function() { 259 selectRow(this); 260 }); 261 262 $('<td class="nid">' + node.path + '</td>').appendTo(tr); 263 $('<td>' + node.title + '</td>').appendTo(tr); 264 } 265 266 /** 267 * make the nodelist accessible by keyboard 268 **/ 269 $('.accessible').keypress(function(e) { 270 switch (e.keyCode) { 271 case 39: 272 case 40: // move selection down 273 if (selectedNode == null) 274 selectedNode = $('#nodelist tbody tr').get(0); 275 else 276 selectedNode = $(selectedNode).next('tr').get(0); 277 selectRow(selectedNode); 278 break; 279 case 37: 280 case 38: // move selection up 281 if (selectedNode == null) 282 selectedNode = $('#nodelist tbody tr').get($('#nodelist tbody tr').length - 1); 283 else 284 selectedNode = $(selectedNode).prev('tr').get(0); 285 selectRow(selectedNode); 286 break; 287 } 288 }); 289 290 // options 291 $.fn.addOption = function() 292 { 293 if(arguments.length == 0) 294 return this; 295 // select option when added? default is false 296 var selectOption = false; 297 // multiple items 298 var multiple = false; 299 if(typeof arguments[0] == "object") 300 { 301 multiple = true; 302 var items = arguments[0]; 303 } 304 if(arguments.length >= 2) 305 { 306 if(typeof arguments[1] == "boolean") 307 selectOption = arguments[1]; 308 else if(typeof arguments[2] == "boolean") 309 selectOption = arguments[2]; 310 if(!multiple) 311 { 312 var value = arguments[0]; 313 var text = arguments[1]; 314 } 315 } 316 this.each( 317 function() 318 { 319 if(this.nodeName.toLowerCase() != "select") 320 return; 321 if(multiple) 322 { 323 for(v in items) 324 { 325 $(this).addOption(v, items[v], selectOption); 326 } 327 } 328 else 329 { 330 var option = document.createElement("option"); 331 option.value = value; 332 option.text = text; 333 this.options.add(option); 334 } 335 if(selectOption) 336 { 337 this.options[this.options.length-1].selected = true; 338 } 339 } 340 ) 341 return this; 342 } 343 344 $.fn.removeOption = function() 345 { 346 if(arguments.length == 0) 347 return this; 348 if(typeof arguments[0] == "string") 349 var value = arguments[0]; 350 else if(typeof arguments[0] == "number") 351 var index = arguments[0]; 352 else 353 return this; 354 this.each( 355 function() 356 { 357 if(this.nodeName.toLowerCase() != "select") 358 return; 359 if(value) 360 { 361 var optionsLength = this.options.length; 362 for(var i=optionsLength-1; i>=0; i--) 363 { 364 if(this.options[i].value == value) 365 { 366 this.options[i] = null; 367 } 368 } 369 } 370 else 371 { 372 this.remove(index); 373 } 374 } 375 ) 376 return this; 377 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Mon Jul 9 18:01:44 2012 | Cross-referenced by PHPXref 0.7 |