[ Index ]

PHP Cross Reference of Drupal 6 (yi-drupal)

title

Body

[close]

/sites/all/modules/fckeditor/plugins/linktomenu/jscripts/ -> functions.js (source)

   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&ltc-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  }


Generated: Mon Jul 9 18:01:44 2012 Cross-referenced by PHPXref 0.7