annotate sites/all/modules/wysiwyg/editors/js/whizzywig-60.js @ 0:ff03f76ab3fe

initial version
author danieleb <danielebarchiesi@me.com>
date Wed, 21 Aug 2013 18:51:11 +0100
parents
children
rev   line source
danielebarchiesi@0 1
danielebarchiesi@0 2 var buttonPath = null;
danielebarchiesi@0 3
danielebarchiesi@0 4 (function($) {
danielebarchiesi@0 5
danielebarchiesi@0 6 /**
danielebarchiesi@0 7 * Attach this editor to a target element.
danielebarchiesi@0 8 */
danielebarchiesi@0 9 Drupal.wysiwyg.editor.attach.whizzywig = function(context, params, settings) {
danielebarchiesi@0 10 // Previous versions used per-button images found in this location,
danielebarchiesi@0 11 // now it is only used for custom buttons.
danielebarchiesi@0 12 if (settings.buttonPath) {
danielebarchiesi@0 13 window.buttonPath = settings.buttonPath;
danielebarchiesi@0 14 }
danielebarchiesi@0 15 // Assign the toolbar image path used for native buttons, if available.
danielebarchiesi@0 16 if (settings.toolbarImagePath) {
danielebarchiesi@0 17 btn._f = settings.toolbarImagePath;
danielebarchiesi@0 18 }
danielebarchiesi@0 19 // Fall back to text labels for all buttons.
danielebarchiesi@0 20 else {
danielebarchiesi@0 21 window.buttonPath = 'textbuttons';
danielebarchiesi@0 22 }
danielebarchiesi@0 23 // Whizzywig needs to have the width set 'inline'.
danielebarchiesi@0 24 $field = $('#' + params.field);
danielebarchiesi@0 25 var originalValues = Drupal.wysiwyg.instances[params.field];
danielebarchiesi@0 26 originalValues.originalStyle = $field.attr('style');
danielebarchiesi@0 27 $field.css('width', $field.width() + 'px');
danielebarchiesi@0 28
danielebarchiesi@0 29 // Attach editor.
danielebarchiesi@0 30 makeWhizzyWig(params.field, (settings.buttons ? settings.buttons : 'all'));
danielebarchiesi@0 31 // Whizzywig fails to detect and set initial textarea contents.
danielebarchiesi@0 32 $('#whizzy' + params.field).contents().find('body').html(tidyD($field.val()));
danielebarchiesi@0 33 };
danielebarchiesi@0 34
danielebarchiesi@0 35 /**
danielebarchiesi@0 36 * Detach a single or all editors.
danielebarchiesi@0 37 */
danielebarchiesi@0 38 Drupal.wysiwyg.editor.detach.whizzywig = function (context, params, trigger) {
danielebarchiesi@0 39 var detach = function (index) {
danielebarchiesi@0 40 var id = whizzies[index], $field = $('#' + id), instance = Drupal.wysiwyg.instances[id];
danielebarchiesi@0 41
danielebarchiesi@0 42 // Save contents of editor back into textarea.
danielebarchiesi@0 43 $field.val(instance.getContent());
danielebarchiesi@0 44 // If the editor is just being serialized (not detached), our work is done.
danielebarchiesi@0 45 if (trigger == 'serialize') {
danielebarchiesi@0 46 return;
danielebarchiesi@0 47 }
danielebarchiesi@0 48 // Move original textarea back to its previous location.
danielebarchiesi@0 49 var $container = $('#CONTAINER' + id);
danielebarchiesi@0 50 $field.insertBefore($container);
danielebarchiesi@0 51 // Remove editor instance.
danielebarchiesi@0 52 $container.remove();
danielebarchiesi@0 53 whizzies.splice(index, 1);
danielebarchiesi@0 54
danielebarchiesi@0 55 // Restore original textarea styling.
danielebarchiesi@0 56 $field.removeAttr('style').attr('style', instance.originalStyle);
danielebarchiesi@0 57 }
danielebarchiesi@0 58
danielebarchiesi@0 59 if (typeof params != 'undefined') {
danielebarchiesi@0 60 for (var i = 0; i < whizzies.length; i++) {
danielebarchiesi@0 61 if (whizzies[i] == params.field) {
danielebarchiesi@0 62 detach(i);
danielebarchiesi@0 63 break;
danielebarchiesi@0 64 }
danielebarchiesi@0 65 }
danielebarchiesi@0 66 }
danielebarchiesi@0 67 else {
danielebarchiesi@0 68 while (whizzies.length > 0) {
danielebarchiesi@0 69 detach(0);
danielebarchiesi@0 70 }
danielebarchiesi@0 71 }
danielebarchiesi@0 72 };
danielebarchiesi@0 73
danielebarchiesi@0 74 /**
danielebarchiesi@0 75 * Instance methods for Whizzywig.
danielebarchiesi@0 76 */
danielebarchiesi@0 77 Drupal.wysiwyg.editor.instance.whizzywig = {
danielebarchiesi@0 78 insert: function (content) {
danielebarchiesi@0 79 // Whizzywig executes any string beginning with 'js:'.
danielebarchiesi@0 80 insHTML(content.replace(/^js:/, 'js&colon;'));
danielebarchiesi@0 81 },
danielebarchiesi@0 82
danielebarchiesi@0 83 setContent: function (content) {
danielebarchiesi@0 84 // Whizzywig shows the original textarea in source mode.
danielebarchiesi@0 85 if ($field.css('display') == 'block') {
danielebarchiesi@0 86 $('#' + this.field).val(content);
danielebarchiesi@0 87 }
danielebarchiesi@0 88 else {
danielebarchiesi@0 89 var doc = $('#whizzy' + this.field).contents()[0];
danielebarchiesi@0 90 doc.open();
danielebarchiesi@0 91 doc.write(content);
danielebarchiesi@0 92 doc.close();
danielebarchiesi@0 93 }
danielebarchiesi@0 94 },
danielebarchiesi@0 95
danielebarchiesi@0 96 getContent: function () {
danielebarchiesi@0 97 // Whizzywig's tidyH() expects a document node. Clone the editing iframe's
danielebarchiesi@0 98 // document so tidyH() won't mess with it if this gets called while editing.
danielebarchiesi@0 99 var clone = $($('#whizzy' + this.field).contents()[0].documentElement).clone()[0].ownerDocument;
danielebarchiesi@0 100 // Whizzywig shows the original textarea in source mode so update the body.
danielebarchiesi@0 101 if ($field.css('display') == 'block') {
danielebarchiesi@0 102 clone.body.innerHTML = $('#' + this.field).val();
danielebarchiesi@0 103 }
danielebarchiesi@0 104 return tidyH(clone);
danielebarchiesi@0 105 }
danielebarchiesi@0 106 };
danielebarchiesi@0 107 })(jQuery);