annotate sites/all/modules/wysiwyg/editors/js/whizzywig.js @ 13:134d4b2e75f6

updated quicktabs and google analytics modules
author danieleb <danielebarchiesi@me.com>
date Tue, 29 Oct 2013 13:48:59 +0000
parents ff03f76ab3fe
children
rev   line source
danielebarchiesi@0 1
danielebarchiesi@0 2 var wysiwygWhizzywig = { currentField: null, fields: {} };
danielebarchiesi@0 3 var buttonPath = null;
danielebarchiesi@0 4
danielebarchiesi@0 5 /**
danielebarchiesi@0 6 * Override Whizzywig's document.write() function.
danielebarchiesi@0 7 *
danielebarchiesi@0 8 * Whizzywig uses document.write() by default, which leads to a blank page when
danielebarchiesi@0 9 * invoked in jQuery.ready(). Luckily, Whizzywig developers implemented a
danielebarchiesi@0 10 * shorthand w() substitute function that we can override to redirect the output
danielebarchiesi@0 11 * into the global wysiwygWhizzywig variable.
danielebarchiesi@0 12 *
danielebarchiesi@0 13 * @see o()
danielebarchiesi@0 14 */
danielebarchiesi@0 15 var w = function (string) {
danielebarchiesi@0 16 if (string) {
danielebarchiesi@0 17 wysiwygWhizzywig.fields[wysiwygWhizzywig.currentField] += string;
danielebarchiesi@0 18 }
danielebarchiesi@0 19 return wysiwygWhizzywig.fields[wysiwygWhizzywig.currentField];
danielebarchiesi@0 20 };
danielebarchiesi@0 21
danielebarchiesi@0 22 /**
danielebarchiesi@0 23 * Override Whizzywig's document.getElementById() function.
danielebarchiesi@0 24 *
danielebarchiesi@0 25 * Since we redirect the output of w() into a temporary string upon attaching
danielebarchiesi@0 26 * an editor, we also have to override the o() shorthand substitute function
danielebarchiesi@0 27 * for document.getElementById() to search in the document or our container.
danielebarchiesi@0 28 * This override function also inserts the editor instance when Whizzywig
danielebarchiesi@0 29 * tries to access its IFRAME, so it has access to the full/regular window
danielebarchiesi@0 30 * object.
danielebarchiesi@0 31 *
danielebarchiesi@0 32 * @see w()
danielebarchiesi@0 33 */
danielebarchiesi@0 34 var o = function (id) {
danielebarchiesi@0 35 // Upon first access to "whizzy" + id, Whizzywig tries to access its IFRAME,
danielebarchiesi@0 36 // so we need to insert the editor into the DOM.
danielebarchiesi@0 37 if (id == 'whizzy' + wysiwygWhizzywig.currentField && wysiwygWhizzywig.fields[wysiwygWhizzywig.currentField]) {
danielebarchiesi@0 38 jQuery('#' + wysiwygWhizzywig.currentField).after('<div id="' + wysiwygWhizzywig.currentField + '-whizzywig"></div>');
danielebarchiesi@0 39 // Iframe's .contentWindow becomes null in Webkit if inserted via .after().
danielebarchiesi@0 40 jQuery('#' + wysiwygWhizzywig.currentField + '-whizzywig').html(w());
danielebarchiesi@0 41 // Prevent subsequent invocations from inserting the editor multiple times.
danielebarchiesi@0 42 wysiwygWhizzywig.fields[wysiwygWhizzywig.currentField] = '';
danielebarchiesi@0 43 }
danielebarchiesi@0 44 // If id exists in the regular window.document, return it.
danielebarchiesi@0 45 if (jQuery('#' + id).size()) {
danielebarchiesi@0 46 return jQuery('#' + id).get(0);
danielebarchiesi@0 47 }
danielebarchiesi@0 48 // Otherwise return id from our container.
danielebarchiesi@0 49 return jQuery('#' + id, w()).get(0);
danielebarchiesi@0 50 };
danielebarchiesi@0 51
danielebarchiesi@0 52 (function($) {
danielebarchiesi@0 53
danielebarchiesi@0 54 /**
danielebarchiesi@0 55 * Attach this editor to a target element.
danielebarchiesi@0 56 */
danielebarchiesi@0 57 Drupal.wysiwyg.editor.attach.whizzywig = function(context, params, settings) {
danielebarchiesi@0 58 // Assign button images path, if available.
danielebarchiesi@0 59 if (settings.buttonPath) {
danielebarchiesi@0 60 window.buttonPath = settings.buttonPath;
danielebarchiesi@0 61 }
danielebarchiesi@0 62 // Create Whizzywig container.
danielebarchiesi@0 63 wysiwygWhizzywig.currentField = params.field;
danielebarchiesi@0 64 wysiwygWhizzywig.fields[wysiwygWhizzywig.currentField] = '';
danielebarchiesi@0 65 // Whizzywig needs to have the width set 'inline'.
danielebarchiesi@0 66 $field = $('#' + params.field);
danielebarchiesi@0 67 var originalValues = Drupal.wysiwyg.instances[params.field];
danielebarchiesi@0 68 originalValues.originalStyle = $field.attr('style');
danielebarchiesi@0 69 $field.css('width', $field.width() + 'px');
danielebarchiesi@0 70
danielebarchiesi@0 71 // Attach editor.
danielebarchiesi@0 72 makeWhizzyWig(params.field, (settings.buttons ? settings.buttons : 'all'));
danielebarchiesi@0 73 // Whizzywig fails to detect and set initial textarea contents.
danielebarchiesi@0 74 $('#whizzy' + params.field).contents().find('body').html(tidyD($field.val()));
danielebarchiesi@0 75 };
danielebarchiesi@0 76
danielebarchiesi@0 77 /**
danielebarchiesi@0 78 * Detach a single or all editors.
danielebarchiesi@0 79 */
danielebarchiesi@0 80 Drupal.wysiwyg.editor.detach.whizzywig = function (context, params, trigger) {
danielebarchiesi@0 81 var detach = function (index) {
danielebarchiesi@0 82 var id = whizzies[index], $field = $('#' + id), instance = Drupal.wysiwyg.instances[id];
danielebarchiesi@0 83
danielebarchiesi@0 84 // Save contents of editor back into textarea.
danielebarchiesi@0 85 $field.val(instance.getContent());
danielebarchiesi@0 86 // If the editor is just being serialized (not detached), our work is done.
danielebarchiesi@0 87 if (trigger == 'serialize') {
danielebarchiesi@0 88 return;
danielebarchiesi@0 89 }
danielebarchiesi@0 90 // Remove editor instance.
danielebarchiesi@0 91 $('#' + id + '-whizzywig').remove();
danielebarchiesi@0 92 whizzies.splice(index, 1);
danielebarchiesi@0 93
danielebarchiesi@0 94 // Restore original textarea styling.
danielebarchiesi@0 95 $field.removeAttr('style').attr('style', instance.originalStyle);
danielebarchiesi@0 96 };
danielebarchiesi@0 97
danielebarchiesi@0 98 if (typeof params != 'undefined') {
danielebarchiesi@0 99 for (var i = 0; i < whizzies.length; i++) {
danielebarchiesi@0 100 if (whizzies[i] == params.field) {
danielebarchiesi@0 101 detach(i);
danielebarchiesi@0 102 break;
danielebarchiesi@0 103 }
danielebarchiesi@0 104 }
danielebarchiesi@0 105 }
danielebarchiesi@0 106 else {
danielebarchiesi@0 107 while (whizzies.length > 0) {
danielebarchiesi@0 108 detach(0);
danielebarchiesi@0 109 }
danielebarchiesi@0 110 }
danielebarchiesi@0 111 };
danielebarchiesi@0 112
danielebarchiesi@0 113 /**
danielebarchiesi@0 114 * Instance methods for Whizzywig.
danielebarchiesi@0 115 */
danielebarchiesi@0 116 Drupal.wysiwyg.editor.instance.whizzywig = {
danielebarchiesi@0 117 insert: function (content) {
danielebarchiesi@0 118 // Whizzywig executes any string beginning with 'js:'.
danielebarchiesi@0 119 insHTML(content.replace(/^js:/, 'js&colon;'));
danielebarchiesi@0 120 },
danielebarchiesi@0 121
danielebarchiesi@0 122 setContent: function (content) {
danielebarchiesi@0 123 var $field = $('#' + this.field);
danielebarchiesi@0 124 // Whizzywig shows the original textarea in source mode.
danielebarchiesi@0 125 if ($field.css('display') == 'block') {
danielebarchiesi@0 126 $field.val(content);
danielebarchiesi@0 127 }
danielebarchiesi@0 128 else {
danielebarchiesi@0 129 var doc = $('#whizzy' + this.field).contents()[0];
danielebarchiesi@0 130 doc.open();
danielebarchiesi@0 131 doc.write(content);
danielebarchiesi@0 132 doc.close();
danielebarchiesi@0 133 }
danielebarchiesi@0 134 },
danielebarchiesi@0 135
danielebarchiesi@0 136 getContent: function () {
danielebarchiesi@0 137 var $field = $('#' + this.field),
danielebarchiesi@0 138 // Whizzywig shows the original textarea in source mode.
danielebarchiesi@0 139 content = ($field.css('display') == 'block' ?
danielebarchiesi@0 140 $field.val() : $('#whizzy' + this.field).contents().find('body').html()
danielebarchiesi@0 141 );
danielebarchiesi@0 142
danielebarchiesi@0 143 content = tidyH(content);
danielebarchiesi@0 144 // Whizzywig's get_xhtml() addon, if defined, expects a DOM node.
danielebarchiesi@0 145 if ($.isFunction(window.get_xhtml)) {
danielebarchiesi@0 146 var pre = document.createElement('pre');
danielebarchiesi@0 147 pre.innerHTML = content;
danielebarchiesi@0 148 content = get_xhtml(pre);
danielebarchiesi@0 149 }
danielebarchiesi@0 150 return content.replace(location.href + '#', '#');
danielebarchiesi@0 151 }
danielebarchiesi@0 152 };
danielebarchiesi@0 153
danielebarchiesi@0 154 })(jQuery);