// $Id: functions.js,v 1.1.4.2 2008/12/05 10:59:28 wwalc Exp $ function preinit() { // Initialize tinyMCE.setWindowArg('mce_windowresize', false); } function init() { window.focus(); loadCategories(null); } /** * loadCategories() * @param obj parent Object **/ function loadCategories(obj) { var params = ''; var mid = '0'; var top = 75; var objTop; if (obj != null) { mid = $(obj).get(0).value; try { objTop = $(obj).attr('id').match(/_(\d+)_sel/); top += (objTop[1] * 17); } catch (e) { top += 0; } } params = 'ltc-type=linktocontent_menu<c-menu-id=' + mid; $('#statusImg').css({top: top + 'px'}).show(); $.ajax({ type: "POST", url: _getBaseHref() + 'index.php?q=linktocontent', data: params, error: function(xml, msg, exc) { $('#statusImg').hide(); alert('Error: ' + msg + '\n' + xml.responseText); }, success: function(data){ try { var results = eval('(' + data + ');'); _clearNodeList(); if ((obj == null) || ($(obj).get(0).value > -1)) { if (_fillDropdown(obj, results)) { window.resizeBy(0, 17); } } _fillNodelist(results); } catch (e) { alert('Error on retrieving data from module.\n' + e.name + '\n' + e.message); } finally { $('#statusImg').hide(); } }}); } function insertAction() { if (selectedNode == null) { return; } var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id')); var elm = inst.getFocusElement(); elm = tinyMCE.getParentElement(elm, "a"); tinyMCEPopup.execCommand("mceBeginUndoLevel"); // Create new anchor elements var path = selectedNode.cells[0].firstChild.nodeValue; if (elm == null) { var insertText = selectedNode.cells[1].firstChild.nodeValue; if (inst.selection.getSelectedText().length == 0) { tinyMCEPopup.execCommand("mceInsertContent", false, '' + insertText + ''); } else { tinyMCEPopup.execCommand("mceInsertContent", false, '' + inst.selection.getSelectedHTML() + ''); } // end (getSelectedText == 0) } else { elm.setAttribute("mce_href", path); // Refresh in old MSIE if (tinyMCE.isMSIE5) elm.outerHTML = elm.outerHTML; } tinyMCE._setEventsEnabled(inst.getBody(), false); tinyMCEPopup.execCommand("mceEndUndoLevel"); tinyMCEPopup.close(); } function loadScript(url) { $('head', document).append(''); } /** * returns the base drupal path * @access public **/ function _getBaseHref() { var url = baseUrl.substring(0, baseUrl.indexOf('modules/')); if (url.indexOf('sites/') > -1) url = url.substring(0, url.indexOf('sites/')); return url; } // dropdown functions /** * * @access public * @return void **/ function _createDropdown(obj){ var dropdown; var elemname = ''; if (obj == null) { elemname = 'browse_sel_-1'; } else { elemname = $(obj).parent().attr('id'); _removeDescendant($(obj)); } var level = parseInt(elemname.substring(elemname.lastIndexOf("_") + 1, elemname.length)) + 1; var elemBase = elemname.substring(0, elemname.lastIndexOf("_") + 1); // create surrounding
var sel_div = $('
'); $(sel_div).attr('name', elemBase + level); $(sel_div).attr('id', elemBase + level); $(sel_div).attr('style', 'display: block; margin: 1px 0; padding: 0; border: 0;'); // create '); $(select).attr('size', 1); $(select).attr('name', elemBase + level + '_sel'); $(select).attr('id', elemBase + level + '_sel'); // add event handler $(select).change(function() { _removeDescendant($(this).parent()); _clearNodeList(); loadCategories($(this)); }); // create image (only if level > 0) if (level > 0) { var img = $(''); $(img).attr('id', elemname.substring(0, elemname.lastIndexOf('_') + 1) + level + '_img'); $(img).attr('alt', ''); $(img).attr('src', 'images/descendant.gif'); // extra margin for IE $(img).css({margin: '0px 2px', border: 0}); $(img).css({marginLeft: String((parseInt(level) - 1) * 14) + 'px', marginRight: '2px'}); $(sel_div).append($(img)); } $(sel_div).append($(select)); $(sel_div).hide(); $('#form_browse').append($(sel_div)); $(sel_div).show('slow'); return select; } /** * _fillDropdown * @return true if a dropdown was inserted **/ function _fillDropdown(obj, results){ if (results.menus != false) { var select = _createDropdown(obj); $(select).addOption(-1, FCKLang.DlgChooseCategory); for (key in results.menus) { if (results.menus[key].hasChildren) { $(select).addOption(results.menus[key].mid, results.menus[key].title); } } return true; } return false; } /** * remove "child" elements **/ function _removeDescendant(elem) { if (elem == null) return; $(elem).next().each( function() { _removeDescendant($(this)); window.resizeBy(0, -17); $(this).hide('slow').remove(); } ); } // nodelist functions var selectedNode = null; function _fillNodelist(results) { if ((results == null) || (results.menus == null) || (results.menus == false)) return; for (key in results.menus) { if (results.menus[key].root) { continue; } _addNodeToList(results.menus[key]); } } function _clearNodeList() { $('#nodelist tbody tr').each( function() { $(this).remove(); } ); } function selectRow(row) { if (!row) { return; } $('#nodelist tbody tr').each(function() { $(this).css({background: '#ffffff'}); selectedNode = null; }); selectedNode = row; $(row).css({background: '#dadfe9'}); } function _addNodeToList(node){ var tr = $('').appendTo('#nodelist tbody'); tr.hover( function() { if (selectedNode != this) { $(this).css({background: '#cecece'}); } }, function() { if (selectedNode != this) { $(this).css({background: '#ffffff'}); } } ); tr.click(function() { selectRow(this); }); $('' + node.path + '').appendTo(tr); $('' + node.title + '').appendTo(tr); } /** * make the nodelist accessible by keyboard **/ $('.accessible').keypress(function(e) { switch (e.keyCode) { case 39: case 40: // move selection down if (selectedNode == null) selectedNode = $('#nodelist tbody tr').get(0); else selectedNode = $(selectedNode).next('tr').get(0); selectRow(selectedNode); break; case 37: case 38: // move selection up if (selectedNode == null) selectedNode = $('#nodelist tbody tr').get($('#nodelist tbody tr').length - 1); else selectedNode = $(selectedNode).prev('tr').get(0); selectRow(selectedNode); break; } }); // options $.fn.addOption = function() { if(arguments.length == 0) return this; // select option when added? default is false var selectOption = false; // multiple items var multiple = false; if(typeof arguments[0] == "object") { multiple = true; var items = arguments[0]; } if(arguments.length >= 2) { if(typeof arguments[1] == "boolean") selectOption = arguments[1]; else if(typeof arguments[2] == "boolean") selectOption = arguments[2]; if(!multiple) { var value = arguments[0]; var text = arguments[1]; } } this.each( function() { if(this.nodeName.toLowerCase() != "select") return; if(multiple) { for(v in items) { $(this).addOption(v, items[v], selectOption); } } else { var option = document.createElement("option"); option.value = value; option.text = text; this.options.add(option); } if(selectOption) { this.options[this.options.length-1].selected = true; } } ) return this; } $.fn.removeOption = function() { if(arguments.length == 0) return this; if(typeof arguments[0] == "string") var value = arguments[0]; else if(typeof arguments[0] == "number") var index = arguments[0]; else return this; this.each( function() { if(this.nodeName.toLowerCase() != "select") return; if(value) { var optionsLength = this.options.length; for(var i=optionsLength-1; i>=0; i--) { if(this.options[i].value == value) { this.options[i] = null; } } } else { this.remove(index); } } ) return this; }