(function ($) { 'use strict'; Drupal.behaviors.tokenTree = { attach: function (context, settings) { $('table.token-tree', context).once('token-tree').each(function () { $(this).treetable({ expandable: true }); }); } }; Drupal.behaviors.tokenInsert = { attach: function (context, settings) { // Keep track of which textfield was last selected/focused. $('textarea, input[type="text"]', context).focus(function () { drupalSettings.tokenFocusedField = this; }); $('.token-click-insert .token-key', context).once('token-click-insert').each(function () { var newThis = $('' + $(this).html() + '').click(function () { if (typeof drupalSettings.tokenFocusedField == 'undefined') { alert(Drupal.t('First click a text field to insert your tokens into.')); } else { var myField = drupalSettings.tokenFocusedField; var myValue = $(this).text(); // IE support. if (document.selection) { myField.focus(); var sel = document.selection.createRange(); sel.text = myValue; } // MOZILLA/NETSCAPE support. else if (myField.selectionStart || myField.selectionStart === '0') { var startPos = myField.selectionStart; var endPos = myField.selectionEnd; myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length); } else { myField.value += myValue; } $('html,body').animate({scrollTop: $(myField).offset().top}, 500); } return false; }); $(this).html(newThis); }); } }; })(jQuery, drupalSettings);