2017-05-22 15:12:47 +01:00
2018-11-23 12:29:20 +00:00
( function ( $ , Drupal , drupalSettings ) {
2017-05-22 15:12:47 +01:00
'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 = $ ( '<a href="javascript:void(0);" title="' + Drupal . t ( 'Insert this token into your form' ) + '">' + $ ( this ) . html ( ) + '</a>' ) . click ( function ( ) {
2018-11-23 12:29:20 +00:00
var content = this . text ;
// Always work in normal text areas that currently have focus.
if ( drupalSettings . tokenFocusedField && ( drupalSettings . tokenFocusedField . tokenDialogFocus || drupalSettings . tokenFocusedField . tokenHasFocus ) ) {
insertAtCursor ( drupalSettings . tokenFocusedField , content ) ;
}
// Direct tinyMCE support.
else if ( typeof ( tinyMCE ) != 'undefined' && tinyMCE . activeEditor ) {
tinyMCE . activeEditor . execCommand ( 'mceInsertContent' , false , content ) ;
}
// Direct CKEditor support. Only works if the field currently has focus,
// which is unusual since the dialog is open.
else if ( typeof ( CKEDITOR ) != 'undefined' && CKEDITOR . currentInstance ) {
CKEDITOR . currentInstance . insertHtml ( content ) ;
}
// Direct CodeMirror support.
else if ( typeof ( CodeMirror ) != 'undefined' && drupalSettings . tokenFocusedField && $ ( drupalSettings . tokenFocusedField ) . parents ( '.CodeMirror' ) . length ) {
var editor = $ ( drupalSettings . tokenFocusedField ) . parents ( '.CodeMirror' ) [ 0 ] . CodeMirror ;
editor . replaceSelection ( content ) ;
editor . focus ( ) ;
}
// WYSIWYG support, should work in all editors if available.
else if ( Drupal . wysiwyg && Drupal . wysiwyg . activeId ) {
Drupal . wysiwyg . instances [ Drupal . wysiwyg . activeId ] . insert ( content )
}
// CKeditor module support.
else if ( typeof ( CKEDITOR ) != 'undefined' && typeof ( Drupal . ckeditorActiveId ) != 'undefined' ) {
CKEDITOR . instances [ Drupal . ckeditorActiveId ] . insertHtml ( content ) ;
}
else if ( drupalSettings . tokenFocusedField ) {
insertAtCursor ( drupalSettings . tokenFocusedField , content ) ;
2017-05-22 15:12:47 +01:00
}
else {
2018-11-23 12:29:20 +00:00
alert ( Drupal . t ( 'First click a text field to insert your tokens into.' ) ) ;
2017-05-22 15:12:47 +01:00
}
2018-11-23 12:29:20 +00:00
2017-05-22 15:12:47 +01:00
return false ;
} ) ;
$ ( this ) . html ( newThis ) ;
} ) ;
2018-11-23 12:29:20 +00:00
function insertAtCursor ( editor , content ) {
// Record the current scroll position.
var scroll = editor . scrollTop ;
// IE support.
if ( document . selection ) {
editor . focus ( ) ;
var sel = document . selection . createRange ( ) ;
sel . text = content ;
}
// Mozilla/Firefox/Netscape 7+ support.
else if ( editor . selectionStart || editor . selectionStart == '0' ) {
var startPos = editor . selectionStart ;
var endPos = editor . selectionEnd ;
editor . value = editor . value . substring ( 0 , startPos ) + content + editor . value . substring ( endPos , editor . value . length ) ;
}
// Fallback, just add to the end of the content.
else {
editor . value += content ;
}
// Ensure the textarea does not unexpectedly scroll.
editor . scrollTop = scroll ;
}
2017-05-22 15:12:47 +01:00
}
} ;
2018-11-23 12:29:20 +00:00
} ) ( jQuery , Drupal , drupalSettings ) ;