[ Index ]

PHP Cross Reference of Drupal 6 (yi-drupal)

title

Body

[close]

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


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