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:'));
|
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);
|