--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/drupal/modules/fckeditor/plugins/linktomenu/jscripts/functions.js Fri Aug 21 16:26:26 2009 +0000
@@ -0,0 +1,377 @@
+// $Id: functions.js,v 1.1.6.2 2008/12/05 11:24:59 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,
+ '<a href="' + path + '">' + insertText + '</a>');
+ }
+ else {
+ tinyMCEPopup.execCommand("mceInsertContent", false,
+ '<a href="' + path + '">' + inst.selection.getSelectedHTML() + '</a>');
+ } // 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('<script type="text/javascript" src="' + url + '"></script>');
+}
+
+/**
+ * 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 <div>
+ var sel_div = $('<div></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>
+ var select = $('<select></select>');
+ $(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 />');
+ $(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 = $('<tr></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);
+ });
+
+ $('<td class="nid">' + node.path + '</td>').appendTo(tr);
+ $('<td>' + node.title + '</td>').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;
+}