annotate rhodecode/public/js/yui/editor/simpleeditor.js @ 677:469108c210f6 beta

Upgrade of Yui2, added selector rollup.
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 11 Nov 2010 01:40:59 +0000
parents 1e757ac98988
children 289ff43cc190
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1 /*
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2 Copyright (c) 2009, Yahoo! Inc. All rights reserved.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3 Code licensed under the BSD License:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4 http://developer.yahoo.net/yui/license.txt
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5 version: 2.8.0r4
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7 (function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
8 var Dom = YAHOO.util.Dom,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
9 Event = YAHOO.util.Event,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
10 Lang = YAHOO.lang;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
11 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
12 * @module editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
13 * @description <p>Creates a rich custom Toolbar Button. Primarily used with the Rich Text Editor's Toolbar</p>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
14 * @class ToolbarButtonAdvanced
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
15 * @namespace YAHOO.widget
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
16 * @requires yahoo, dom, element, event, container_core, menu, button
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
17 *
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
18 * Provides a toolbar button based on the button and menu widgets.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
19 * @constructor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
20 * @class ToolbarButtonAdvanced
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
21 * @param {String/HTMLElement} el The element to turn into a button.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
22 * @param {Object} attrs Object liternal containing configuration parameters.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
23 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
24 if (YAHOO.widget.Button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
25 YAHOO.widget.ToolbarButtonAdvanced = YAHOO.widget.Button;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
26 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
27 * @property buttonType
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
28 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
29 * @description Tells if the Button is a Rich Button or a Simple Button
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
30 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
31 YAHOO.widget.ToolbarButtonAdvanced.prototype.buttonType = 'rich';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
32 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
33 * @method checkValue
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
34 * @param {String} value The value of the option that we want to mark as selected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
35 * @description Select an option by value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
36 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
37 YAHOO.widget.ToolbarButtonAdvanced.prototype.checkValue = function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
38 var _menuItems = this.getMenu().getItems();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
39 if (_menuItems.length === 0) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
40 this.getMenu()._onBeforeShow();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
41 _menuItems = this.getMenu().getItems();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
42 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
43 for (var i = 0; i < _menuItems.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
44 _menuItems[i].cfg.setProperty('checked', false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
45 if (_menuItems[i].value == value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
46 _menuItems[i].cfg.setProperty('checked', true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
47 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
48 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
49 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
50 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
51 YAHOO.widget.ToolbarButtonAdvanced = function() {};
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
52 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
53
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
54
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
55 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
56 * @description <p>Creates a basic custom Toolbar Button. Primarily used with the Rich Text Editor's Toolbar</p><p>Provides a toolbar button based on the button and menu widgets, &lt;select&gt; elements are used in place of menu's.</p>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
57 * @class ToolbarButton
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
58 * @namespace YAHOO.widget
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
59 * @requires yahoo, dom, element, event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
60 * @extends YAHOO.util.Element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
61 *
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
62 *
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
63 * @constructor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
64 * @param {String/HTMLElement} el The element to turn into a button.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
65 * @param {Object} attrs Object liternal containing configuration parameters.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
66 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
67
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
68 YAHOO.widget.ToolbarButton = function(el, attrs) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
69
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
70 if (Lang.isObject(arguments[0]) && !Dom.get(el).nodeType) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
71 attrs = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
72 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
73 var local_attrs = (attrs || {});
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
74
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
75 var oConfig = {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
76 element: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
77 attributes: local_attrs
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
78 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
79
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
80 if (!oConfig.attributes.type) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
81 oConfig.attributes.type = 'push';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
82 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
83
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
84 oConfig.element = document.createElement('span');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
85 oConfig.element.setAttribute('unselectable', 'on');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
86 oConfig.element.className = 'yui-button yui-' + oConfig.attributes.type + '-button';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
87 oConfig.element.innerHTML = '<span class="first-child"><a href="#">LABEL</a></span>';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
88 oConfig.element.firstChild.firstChild.tabIndex = '-1';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
89 oConfig.attributes.id = (oConfig.attributes.id || Dom.generateId());
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
90 oConfig.element.id = oConfig.attributes.id;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
91
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
92 YAHOO.widget.ToolbarButton.superclass.constructor.call(this, oConfig.element, oConfig.attributes);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
93 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
94
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
95 YAHOO.extend(YAHOO.widget.ToolbarButton, YAHOO.util.Element, {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
96 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
97 * @property buttonType
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
98 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
99 * @description Tells if the Button is a Rich Button or a Simple Button
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
100 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
101 buttonType: 'normal',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
102 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
103 * @method _handleMouseOver
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
104 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
105 * @description Adds classes to the button elements on mouseover (hover)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
106 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
107 _handleMouseOver: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
108 if (!this.get('disabled')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
109 this.addClass('yui-button-hover');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
110 this.addClass('yui-' + this.get('type') + '-button-hover');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
111 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
112 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
113 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
114 * @method _handleMouseOut
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
115 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
116 * @description Removes classes from the button elements on mouseout (hover)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
117 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
118 _handleMouseOut: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
119 this.removeClass('yui-button-hover');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
120 this.removeClass('yui-' + this.get('type') + '-button-hover');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
121 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
122 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
123 * @method checkValue
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
124 * @param {String} value The value of the option that we want to mark as selected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
125 * @description Select an option by value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
126 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
127 checkValue: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
128 if (this.get('type') == 'menu') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
129 var opts = this._button.options;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
130 for (var i = 0; i < opts.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
131 if (opts[i].value == value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
132 opts.selectedIndex = i;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
133 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
134 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
135 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
136 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
137 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
138 * @method init
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
139 * @description The ToolbarButton class's initialization method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
140 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
141 init: function(p_oElement, p_oAttributes) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
142 YAHOO.widget.ToolbarButton.superclass.init.call(this, p_oElement, p_oAttributes);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
143
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
144 this.on('mouseover', this._handleMouseOver, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
145 this.on('mouseout', this._handleMouseOut, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
146 this.on('click', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
147 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
148 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
149 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
150 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
151 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
152 * @method initAttributes
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
153 * @description Initializes all of the configuration attributes used to create
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
154 * the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
155 * @param {Object} attr Object literal specifying a set of
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
156 * configuration attributes used to create the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
157 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
158 initAttributes: function(attr) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
159 YAHOO.widget.ToolbarButton.superclass.initAttributes.call(this, attr);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
160 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
161 * @attribute value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
162 * @description The value of the button
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
163 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
164 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
165 this.setAttributeConfig('value', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
166 value: attr.value
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
167 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
168 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
169 * @attribute menu
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
170 * @description The menu attribute, see YAHOO.widget.Button
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
171 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
172 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
173 this.setAttributeConfig('menu', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
174 value: attr.menu || false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
175 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
176 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
177 * @attribute type
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
178 * @description The type of button to create: push, menu, color, select, spin
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
179 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
180 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
181 this.setAttributeConfig('type', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
182 value: attr.type,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
183 writeOnce: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
184 method: function(type) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
185 var el, opt;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
186 if (!this._button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
187 this._button = this.get('element').getElementsByTagName('a')[0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
188 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
189 switch (type) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
190 case 'select':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
191 case 'menu':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
192 el = document.createElement('select');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
193 el.id = this.get('id');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
194 var menu = this.get('menu');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
195 for (var i = 0; i < menu.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
196 opt = document.createElement('option');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
197 opt.innerHTML = menu[i].text;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
198 opt.value = menu[i].value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
199 if (menu[i].checked) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
200 opt.selected = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
201 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
202 el.appendChild(opt);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
203 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
204 this._button.parentNode.replaceChild(el, this._button);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
205 Event.on(el, 'change', this._handleSelect, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
206 this._button = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
207 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
208 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
209 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
210 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
211
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
212 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
213 * @attribute disabled
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
214 * @description Set the button into a disabled state
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
215 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
216 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
217 this.setAttributeConfig('disabled', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
218 value: attr.disabled || false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
219 method: function(disabled) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
220 if (disabled) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
221 this.addClass('yui-button-disabled');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
222 this.addClass('yui-' + this.get('type') + '-button-disabled');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
223 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
224 this.removeClass('yui-button-disabled');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
225 this.removeClass('yui-' + this.get('type') + '-button-disabled');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
226 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
227 if ((this.get('type') == 'menu') || (this.get('type') == 'select')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
228 this._button.disabled = disabled;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
229 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
230 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
231 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
232
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
233 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
234 * @attribute label
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
235 * @description The text label for the button
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
236 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
237 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
238 this.setAttributeConfig('label', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
239 value: attr.label,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
240 method: function(label) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
241 if (!this._button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
242 this._button = this.get('element').getElementsByTagName('a')[0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
243 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
244 if (this.get('type') == 'push') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
245 this._button.innerHTML = label;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
246 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
247 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
248 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
249
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
250 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
251 * @attribute title
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
252 * @description The title of the button
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
253 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
254 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
255 this.setAttributeConfig('title', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
256 value: attr.title
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
257 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
258
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
259 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
260 * @config container
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
261 * @description The container that the button is rendered to, handled by Toolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
262 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
263 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
264 this.setAttributeConfig('container', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
265 value: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
266 writeOnce: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
267 method: function(cont) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
268 this.appendTo(cont);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
269 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
270 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
271
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
272 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
273 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
274 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
275 * @method _handleSelect
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
276 * @description The event fired when a change event gets fired on a select element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
277 * @param {Event} ev The change event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
278 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
279 _handleSelect: function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
280 var tar = Event.getTarget(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
281 var value = tar.options[tar.selectedIndex].value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
282 this.fireEvent('change', {type: 'change', value: value });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
283 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
284 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
285 * @method getMenu
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
286 * @description A stub function to mimic YAHOO.widget.Button's getMenu method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
287 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
288 getMenu: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
289 return this.get('menu');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
290 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
291 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
292 * @method destroy
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
293 * @description Destroy the button
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
294 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
295 destroy: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
296 Event.purgeElement(this.get('element'), true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
297 this.get('element').parentNode.removeChild(this.get('element'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
298 //Brutal Object Destroy
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
299 for (var i in this) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
300 if (Lang.hasOwnProperty(this, i)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
301 this[i] = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
302 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
303 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
304 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
305 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
306 * @method fireEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
307 * @description Overridden fireEvent method to prevent DOM events from firing if the button is disabled.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
308 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
309 fireEvent: function(p_sType, p_aArgs) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
310 // Disabled buttons should not respond to DOM events
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
311 if (this.DOM_EVENTS[p_sType] && this.get('disabled')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
312 Event.stopEvent(p_aArgs);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
313 return;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
314 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
315
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
316 YAHOO.widget.ToolbarButton.superclass.fireEvent.call(this, p_sType, p_aArgs);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
317 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
318 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
319 * @method toString
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
320 * @description Returns a string representing the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
321 * @return {String}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
322 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
323 toString: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
324 return 'ToolbarButton (' + this.get('id') + ')';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
325 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
326
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
327 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
328 })();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
329 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
330 * @module editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
331 * @description <p>Creates a rich Toolbar widget based on Button. Primarily used with the Rich Text Editor</p>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
332 * @namespace YAHOO.widget
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
333 * @requires yahoo, dom, element, event, toolbarbutton
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
334 * @optional container_core, dragdrop
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
335 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
336 (function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
337 var Dom = YAHOO.util.Dom,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
338 Event = YAHOO.util.Event,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
339 Lang = YAHOO.lang;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
340
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
341 var getButton = function(id) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
342 var button = id;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
343 if (Lang.isString(id)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
344 button = this.getButtonById(id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
345 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
346 if (Lang.isNumber(id)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
347 button = this.getButtonByIndex(id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
348 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
349 if ((!(button instanceof YAHOO.widget.ToolbarButton)) && (!(button instanceof YAHOO.widget.ToolbarButtonAdvanced))) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
350 button = this.getButtonByValue(id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
351 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
352 if ((button instanceof YAHOO.widget.ToolbarButton) || (button instanceof YAHOO.widget.ToolbarButtonAdvanced)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
353 return button;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
354 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
355 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
356 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
357
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
358 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
359 * Provides a rich toolbar widget based on the button and menu widgets
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
360 * @constructor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
361 * @class Toolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
362 * @extends YAHOO.util.Element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
363 * @param {String/HTMLElement} el The element to turn into a toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
364 * @param {Object} attrs Object liternal containing configuration parameters.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
365 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
366 YAHOO.widget.Toolbar = function(el, attrs) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
367
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
368 if (Lang.isObject(arguments[0]) && !Dom.get(el).nodeType) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
369 attrs = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
370 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
371 var local_attrs = {};
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
372 if (attrs) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
373 Lang.augmentObject(local_attrs, attrs); //Break the config reference
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
374 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
375
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
376
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
377 var oConfig = {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
378 element: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
379 attributes: local_attrs
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
380 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
381
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
382
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
383 if (Lang.isString(el) && Dom.get(el)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
384 oConfig.element = Dom.get(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
385 } else if (Lang.isObject(el) && Dom.get(el) && Dom.get(el).nodeType) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
386 oConfig.element = Dom.get(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
387 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
388
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
389
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
390 if (!oConfig.element) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
391 oConfig.element = document.createElement('DIV');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
392 oConfig.element.id = Dom.generateId();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
393
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
394 if (local_attrs.container && Dom.get(local_attrs.container)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
395 Dom.get(local_attrs.container).appendChild(oConfig.element);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
396 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
397 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
398
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
399
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
400 if (!oConfig.element.id) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
401 oConfig.element.id = ((Lang.isString(el)) ? el : Dom.generateId());
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
402 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
403
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
404 var fs = document.createElement('fieldset');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
405 var lg = document.createElement('legend');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
406 lg.innerHTML = 'Toolbar';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
407 fs.appendChild(lg);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
408
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
409 var cont = document.createElement('DIV');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
410 oConfig.attributes.cont = cont;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
411 Dom.addClass(cont, 'yui-toolbar-subcont');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
412 fs.appendChild(cont);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
413 oConfig.element.appendChild(fs);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
414
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
415 oConfig.element.tabIndex = -1;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
416
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
417
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
418 oConfig.attributes.element = oConfig.element;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
419 oConfig.attributes.id = oConfig.element.id;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
420
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
421 this._configuredButtons = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
422
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
423 YAHOO.widget.Toolbar.superclass.constructor.call(this, oConfig.element, oConfig.attributes);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
424
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
425 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
426
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
427 YAHOO.extend(YAHOO.widget.Toolbar, YAHOO.util.Element, {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
428 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
429 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
430 * @property _configuredButtons
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
431 * @type Array
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
432 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
433 _configuredButtons: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
434 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
435 * @method _addMenuClasses
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
436 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
437 * @description This method is called from Menu's renderEvent to add a few more classes to the menu items
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
438 * @param {String} ev The event that fired.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
439 * @param {Array} na Array of event information.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
440 * @param {Object} o Button config object.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
441 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
442 _addMenuClasses: function(ev, na, o) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
443 Dom.addClass(this.element, 'yui-toolbar-' + o.get('value') + '-menu');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
444 if (Dom.hasClass(o._button.parentNode.parentNode, 'yui-toolbar-select')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
445 Dom.addClass(this.element, 'yui-toolbar-select-menu');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
446 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
447 var items = this.getItems();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
448 for (var i = 0; i < items.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
449 Dom.addClass(items[i].element, 'yui-toolbar-' + o.get('value') + '-' + ((items[i].value) ? items[i].value.replace(/ /g, '-').toLowerCase() : items[i]._oText.nodeValue.replace(/ /g, '-').toLowerCase()));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
450 Dom.addClass(items[i].element, 'yui-toolbar-' + o.get('value') + '-' + ((items[i].value) ? items[i].value.replace(/ /g, '-') : items[i]._oText.nodeValue.replace(/ /g, '-')));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
451 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
452 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
453 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
454 * @property buttonType
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
455 * @description The default button to use
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
456 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
457 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
458 buttonType: YAHOO.widget.ToolbarButton,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
459 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
460 * @property dd
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
461 * @description The DragDrop instance associated with the Toolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
462 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
463 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
464 dd: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
465 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
466 * @property _colorData
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
467 * @description Object reference containing colors hex and text values.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
468 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
469 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
470 _colorData: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
471 /* {{{ _colorData */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
472 '#111111': 'Obsidian',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
473 '#2D2D2D': 'Dark Gray',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
474 '#434343': 'Shale',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
475 '#5B5B5B': 'Flint',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
476 '#737373': 'Gray',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
477 '#8B8B8B': 'Concrete',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
478 '#A2A2A2': 'Gray',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
479 '#B9B9B9': 'Titanium',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
480 '#000000': 'Black',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
481 '#D0D0D0': 'Light Gray',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
482 '#E6E6E6': 'Silver',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
483 '#FFFFFF': 'White',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
484 '#BFBF00': 'Pumpkin',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
485 '#FFFF00': 'Yellow',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
486 '#FFFF40': 'Banana',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
487 '#FFFF80': 'Pale Yellow',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
488 '#FFFFBF': 'Butter',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
489 '#525330': 'Raw Siena',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
490 '#898A49': 'Mildew',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
491 '#AEA945': 'Olive',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
492 '#7F7F00': 'Paprika',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
493 '#C3BE71': 'Earth',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
494 '#E0DCAA': 'Khaki',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
495 '#FCFAE1': 'Cream',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
496 '#60BF00': 'Cactus',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
497 '#80FF00': 'Chartreuse',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
498 '#A0FF40': 'Green',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
499 '#C0FF80': 'Pale Lime',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
500 '#DFFFBF': 'Light Mint',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
501 '#3B5738': 'Green',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
502 '#668F5A': 'Lime Gray',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
503 '#7F9757': 'Yellow',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
504 '#407F00': 'Clover',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
505 '#8A9B55': 'Pistachio',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
506 '#B7C296': 'Light Jade',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
507 '#E6EBD5': 'Breakwater',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
508 '#00BF00': 'Spring Frost',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
509 '#00FF80': 'Pastel Green',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
510 '#40FFA0': 'Light Emerald',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
511 '#80FFC0': 'Sea Foam',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
512 '#BFFFDF': 'Sea Mist',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
513 '#033D21': 'Dark Forrest',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
514 '#438059': 'Moss',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
515 '#7FA37C': 'Medium Green',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
516 '#007F40': 'Pine',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
517 '#8DAE94': 'Yellow Gray Green',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
518 '#ACC6B5': 'Aqua Lung',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
519 '#DDEBE2': 'Sea Vapor',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
520 '#00BFBF': 'Fog',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
521 '#00FFFF': 'Cyan',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
522 '#40FFFF': 'Turquoise Blue',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
523 '#80FFFF': 'Light Aqua',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
524 '#BFFFFF': 'Pale Cyan',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
525 '#033D3D': 'Dark Teal',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
526 '#347D7E': 'Gray Turquoise',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
527 '#609A9F': 'Green Blue',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
528 '#007F7F': 'Seaweed',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
529 '#96BDC4': 'Green Gray',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
530 '#B5D1D7': 'Soapstone',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
531 '#E2F1F4': 'Light Turquoise',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
532 '#0060BF': 'Summer Sky',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
533 '#0080FF': 'Sky Blue',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
534 '#40A0FF': 'Electric Blue',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
535 '#80C0FF': 'Light Azure',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
536 '#BFDFFF': 'Ice Blue',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
537 '#1B2C48': 'Navy',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
538 '#385376': 'Biscay',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
539 '#57708F': 'Dusty Blue',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
540 '#00407F': 'Sea Blue',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
541 '#7792AC': 'Sky Blue Gray',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
542 '#A8BED1': 'Morning Sky',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
543 '#DEEBF6': 'Vapor',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
544 '#0000BF': 'Deep Blue',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
545 '#0000FF': 'Blue',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
546 '#4040FF': 'Cerulean Blue',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
547 '#8080FF': 'Evening Blue',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
548 '#BFBFFF': 'Light Blue',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
549 '#212143': 'Deep Indigo',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
550 '#373E68': 'Sea Blue',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
551 '#444F75': 'Night Blue',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
552 '#00007F': 'Indigo Blue',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
553 '#585E82': 'Dockside',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
554 '#8687A4': 'Blue Gray',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
555 '#D2D1E1': 'Light Blue Gray',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
556 '#6000BF': 'Neon Violet',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
557 '#8000FF': 'Blue Violet',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
558 '#A040FF': 'Violet Purple',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
559 '#C080FF': 'Violet Dusk',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
560 '#DFBFFF': 'Pale Lavender',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
561 '#302449': 'Cool Shale',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
562 '#54466F': 'Dark Indigo',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
563 '#655A7F': 'Dark Violet',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
564 '#40007F': 'Violet',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
565 '#726284': 'Smoky Violet',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
566 '#9E8FA9': 'Slate Gray',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
567 '#DCD1DF': 'Violet White',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
568 '#BF00BF': 'Royal Violet',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
569 '#FF00FF': 'Fuchsia',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
570 '#FF40FF': 'Magenta',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
571 '#FF80FF': 'Orchid',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
572 '#FFBFFF': 'Pale Magenta',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
573 '#4A234A': 'Dark Purple',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
574 '#794A72': 'Medium Purple',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
575 '#936386': 'Cool Granite',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
576 '#7F007F': 'Purple',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
577 '#9D7292': 'Purple Moon',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
578 '#C0A0B6': 'Pale Purple',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
579 '#ECDAE5': 'Pink Cloud',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
580 '#BF005F': 'Hot Pink',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
581 '#FF007F': 'Deep Pink',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
582 '#FF409F': 'Grape',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
583 '#FF80BF': 'Electric Pink',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
584 '#FFBFDF': 'Pink',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
585 '#451528': 'Purple Red',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
586 '#823857': 'Purple Dino',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
587 '#A94A76': 'Purple Gray',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
588 '#7F003F': 'Rose',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
589 '#BC6F95': 'Antique Mauve',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
590 '#D8A5BB': 'Cool Marble',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
591 '#F7DDE9': 'Pink Granite',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
592 '#C00000': 'Apple',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
593 '#FF0000': 'Fire Truck',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
594 '#FF4040': 'Pale Red',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
595 '#FF8080': 'Salmon',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
596 '#FFC0C0': 'Warm Pink',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
597 '#441415': 'Sepia',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
598 '#82393C': 'Rust',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
599 '#AA4D4E': 'Brick',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
600 '#800000': 'Brick Red',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
601 '#BC6E6E': 'Mauve',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
602 '#D8A3A4': 'Shrimp Pink',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
603 '#F8DDDD': 'Shell Pink',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
604 '#BF5F00': 'Dark Orange',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
605 '#FF7F00': 'Orange',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
606 '#FF9F40': 'Grapefruit',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
607 '#FFBF80': 'Canteloupe',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
608 '#FFDFBF': 'Wax',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
609 '#482C1B': 'Dark Brick',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
610 '#855A40': 'Dirt',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
611 '#B27C51': 'Tan',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
612 '#7F3F00': 'Nutmeg',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
613 '#C49B71': 'Mustard',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
614 '#E1C4A8': 'Pale Tan',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
615 '#FDEEE0': 'Marble'
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
616 /* }}} */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
617 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
618 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
619 * @property _colorPicker
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
620 * @description The HTML Element containing the colorPicker
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
621 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
622 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
623 _colorPicker: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
624 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
625 * @property STR_COLLAPSE
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
626 * @description String for Toolbar Collapse Button
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
627 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
628 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
629 STR_COLLAPSE: 'Collapse Toolbar',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
630 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
631 * @property STR_EXPAND
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
632 * @description String for Toolbar Collapse Button - Expand
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
633 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
634 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
635 STR_EXPAND: 'Expand Toolbar',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
636 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
637 * @property STR_SPIN_LABEL
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
638 * @description String for spinbutton dynamic label. Note the {VALUE} will be replaced with YAHOO.lang.substitute
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
639 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
640 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
641 STR_SPIN_LABEL: 'Spin Button with value {VALUE}. Use Control Shift Up Arrow and Control Shift Down arrow keys to increase or decrease the value.',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
642 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
643 * @property STR_SPIN_UP
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
644 * @description String for spinbutton up
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
645 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
646 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
647 STR_SPIN_UP: 'Click to increase the value of this input',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
648 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
649 * @property STR_SPIN_DOWN
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
650 * @description String for spinbutton down
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
651 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
652 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
653 STR_SPIN_DOWN: 'Click to decrease the value of this input',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
654 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
655 * @property _titlebar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
656 * @description Object reference to the titlebar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
657 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
658 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
659 _titlebar: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
660 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
661 * @property browser
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
662 * @description Standard browser detection
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
663 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
664 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
665 browser: YAHOO.env.ua,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
666 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
667 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
668 * @property _buttonList
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
669 * @description Internal property list of current buttons in the toolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
670 * @type Array
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
671 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
672 _buttonList: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
673 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
674 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
675 * @property _buttonGroupList
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
676 * @description Internal property list of current button groups in the toolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
677 * @type Array
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
678 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
679 _buttonGroupList: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
680 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
681 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
682 * @property _sep
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
683 * @description Internal reference to the separator HTML Element for cloning
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
684 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
685 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
686 _sep: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
687 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
688 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
689 * @property _sepCount
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
690 * @description Internal refernce for counting separators, so we can give them a useful class name for styling
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
691 * @type Number
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
692 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
693 _sepCount: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
694 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
695 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
696 * @property draghandle
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
697 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
698 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
699 _dragHandle: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
700 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
701 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
702 * @property _toolbarConfigs
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
703 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
704 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
705 _toolbarConfigs: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
706 renderer: true
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
707 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
708 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
709 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
710 * @property CLASS_CONTAINER
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
711 * @description Default CSS class to apply to the toolbar container element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
712 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
713 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
714 CLASS_CONTAINER: 'yui-toolbar-container',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
715 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
716 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
717 * @property CLASS_DRAGHANDLE
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
718 * @description Default CSS class to apply to the toolbar's drag handle element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
719 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
720 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
721 CLASS_DRAGHANDLE: 'yui-toolbar-draghandle',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
722 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
723 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
724 * @property CLASS_SEPARATOR
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
725 * @description Default CSS class to apply to all separators in the toolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
726 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
727 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
728 CLASS_SEPARATOR: 'yui-toolbar-separator',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
729 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
730 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
731 * @property CLASS_DISABLED
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
732 * @description Default CSS class to apply when the toolbar is disabled
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
733 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
734 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
735 CLASS_DISABLED: 'yui-toolbar-disabled',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
736 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
737 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
738 * @property CLASS_PREFIX
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
739 * @description Default prefix for dynamically created class names
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
740 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
741 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
742 CLASS_PREFIX: 'yui-toolbar',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
743 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
744 * @method init
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
745 * @description The Toolbar class's initialization method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
746 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
747 init: function(p_oElement, p_oAttributes) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
748 YAHOO.widget.Toolbar.superclass.init.call(this, p_oElement, p_oAttributes);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
749 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
750 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
751 * @method initAttributes
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
752 * @description Initializes all of the configuration attributes used to create
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
753 * the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
754 * @param {Object} attr Object literal specifying a set of
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
755 * configuration attributes used to create the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
756 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
757 initAttributes: function(attr) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
758 YAHOO.widget.Toolbar.superclass.initAttributes.call(this, attr);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
759 this.addClass(this.CLASS_CONTAINER);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
760
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
761 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
762 * @attribute buttonType
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
763 * @description The buttonType to use (advanced or basic)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
764 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
765 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
766 this.setAttributeConfig('buttonType', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
767 value: attr.buttonType || 'basic',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
768 writeOnce: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
769 validator: function(type) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
770 switch (type) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
771 case 'advanced':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
772 case 'basic':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
773 return true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
774 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
775 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
776 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
777 method: function(type) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
778 if (type == 'advanced') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
779 if (YAHOO.widget.Button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
780 this.buttonType = YAHOO.widget.ToolbarButtonAdvanced;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
781 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
782 this.buttonType = YAHOO.widget.ToolbarButton;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
783 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
784 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
785 this.buttonType = YAHOO.widget.ToolbarButton;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
786 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
787 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
788 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
789
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
790
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
791 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
792 * @attribute buttons
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
793 * @description Object specifying the buttons to include in the toolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
794 * Example:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
795 * <code><pre>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
796 * {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
797 * { id: 'b3', type: 'button', label: 'Underline', value: 'underline' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
798 * { type: 'separator' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
799 * { id: 'b4', type: 'menu', label: 'Align', value: 'align',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
800 * menu: [
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
801 * { text: "Left", value: 'alignleft' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
802 * { text: "Center", value: 'aligncenter' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
803 * { text: "Right", value: 'alignright' }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
804 * ]
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
805 * }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
806 * }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
807 * </pre></code>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
808 * @type Array
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
809 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
810
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
811 this.setAttributeConfig('buttons', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
812 value: [],
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
813 writeOnce: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
814 method: function(data) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
815 var i, button, buttons, len, b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
816 for (i in data) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
817 if (Lang.hasOwnProperty(data, i)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
818 if (data[i].type == 'separator') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
819 this.addSeparator();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
820 } else if (data[i].group !== undefined) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
821 buttons = this.addButtonGroup(data[i]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
822 if (buttons) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
823 len = buttons.length;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
824 for(b = 0; b < len; b++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
825 if (buttons[b]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
826 this._configuredButtons[this._configuredButtons.length] = buttons[b].id;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
827 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
828 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
829 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
830
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
831 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
832 button = this.addButton(data[i]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
833 if (button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
834 this._configuredButtons[this._configuredButtons.length] = button.id;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
835 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
836 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
837 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
838 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
839 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
840 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
841
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
842 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
843 * @attribute disabled
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
844 * @description Boolean indicating if the toolbar should be disabled. It will also disable the draggable attribute if it is on.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
845 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
846 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
847 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
848 this.setAttributeConfig('disabled', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
849 value: false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
850 method: function(disabled) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
851 if (this.get('disabled') === disabled) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
852 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
853 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
854 if (disabled) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
855 this.addClass(this.CLASS_DISABLED);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
856 this.set('draggable', false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
857 this.disableAllButtons();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
858 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
859 this.removeClass(this.CLASS_DISABLED);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
860 if (this._configs.draggable._initialConfig.value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
861 //Draggable by default, set it back
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
862 this.set('draggable', true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
863 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
864 this.resetAllButtons();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
865 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
866 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
867 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
868
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
869 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
870 * @config cont
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
871 * @description The container for the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
872 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
873 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
874 this.setAttributeConfig('cont', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
875 value: attr.cont,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
876 readOnly: true
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
877 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
878
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
879
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
880 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
881 * @attribute grouplabels
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
882 * @description Boolean indicating if the toolbar should show the group label's text string.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
883 * @default true
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
884 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
885 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
886 this.setAttributeConfig('grouplabels', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
887 value: ((attr.grouplabels === false) ? false : true),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
888 method: function(grouplabels) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
889 if (grouplabels) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
890 Dom.removeClass(this.get('cont'), (this.CLASS_PREFIX + '-nogrouplabels'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
891 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
892 Dom.addClass(this.get('cont'), (this.CLASS_PREFIX + '-nogrouplabels'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
893 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
894 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
895 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
896 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
897 * @attribute titlebar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
898 * @description Boolean indicating if the toolbar should have a titlebar. If
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
899 * passed a string, it will use that as the titlebar text
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
900 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
901 * @type Boolean or String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
902 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
903 this.setAttributeConfig('titlebar', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
904 value: false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
905 method: function(titlebar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
906 if (titlebar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
907 if (this._titlebar && this._titlebar.parentNode) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
908 this._titlebar.parentNode.removeChild(this._titlebar);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
909 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
910 this._titlebar = document.createElement('DIV');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
911 this._titlebar.tabIndex = '-1';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
912 Event.on(this._titlebar, 'focus', function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
913 this._handleFocus();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
914 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
915 Dom.addClass(this._titlebar, this.CLASS_PREFIX + '-titlebar');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
916 if (Lang.isString(titlebar)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
917 var h2 = document.createElement('h2');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
918 h2.tabIndex = '-1';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
919 h2.innerHTML = '<a href="#" tabIndex="0">' + titlebar + '</a>';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
920 this._titlebar.appendChild(h2);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
921 Event.on(h2.firstChild, 'click', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
922 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
923 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
924 Event.on([h2, h2.firstChild], 'focus', function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
925 this._handleFocus();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
926 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
927 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
928 if (this.get('firstChild')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
929 this.insertBefore(this._titlebar, this.get('firstChild'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
930 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
931 this.appendChild(this._titlebar);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
932 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
933 if (this.get('collapse')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
934 this.set('collapse', true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
935 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
936 } else if (this._titlebar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
937 if (this._titlebar && this._titlebar.parentNode) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
938 this._titlebar.parentNode.removeChild(this._titlebar);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
939 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
940 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
941 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
942 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
943
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
944
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
945 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
946 * @attribute collapse
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
947 * @description Boolean indicating if the the titlebar should have a collapse button.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
948 * The collapse button will not remove the toolbar, it will minimize it to the titlebar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
949 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
950 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
951 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
952 this.setAttributeConfig('collapse', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
953 value: false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
954 method: function(collapse) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
955 if (this._titlebar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
956 var collapseEl = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
957 var el = Dom.getElementsByClassName('collapse', 'span', this._titlebar);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
958 if (collapse) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
959 if (el.length > 0) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
960 //There is already a collapse button
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
961 return true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
962 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
963 collapseEl = document.createElement('SPAN');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
964 collapseEl.innerHTML = 'X';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
965 collapseEl.title = this.STR_COLLAPSE;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
966
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
967 Dom.addClass(collapseEl, 'collapse');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
968 this._titlebar.appendChild(collapseEl);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
969 Event.addListener(collapseEl, 'click', function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
970 if (Dom.hasClass(this.get('cont').parentNode, 'yui-toolbar-container-collapsed')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
971 this.collapse(false); //Expand Toolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
972 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
973 this.collapse(); //Collapse Toolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
974 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
975 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
976 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
977 collapseEl = Dom.getElementsByClassName('collapse', 'span', this._titlebar);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
978 if (collapseEl[0]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
979 if (Dom.hasClass(this.get('cont').parentNode, 'yui-toolbar-container-collapsed')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
980 //We are closed, reopen the titlebar..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
981 this.collapse(false); //Expand Toolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
982 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
983 collapseEl[0].parentNode.removeChild(collapseEl[0]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
984 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
985 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
986 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
987 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
988 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
989
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
990 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
991 * @attribute draggable
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
992 * @description Boolean indicating if the toolbar should be draggable.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
993 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
994 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
995 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
996
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
997 this.setAttributeConfig('draggable', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
998 value: (attr.draggable || false),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
999 method: function(draggable) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1000 if (draggable && !this.get('titlebar')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1001 if (!this._dragHandle) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1002 this._dragHandle = document.createElement('SPAN');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1003 this._dragHandle.innerHTML = '|';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1004 this._dragHandle.setAttribute('title', 'Click to drag the toolbar');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1005 this._dragHandle.id = this.get('id') + '_draghandle';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1006 Dom.addClass(this._dragHandle, this.CLASS_DRAGHANDLE);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1007 if (this.get('cont').hasChildNodes()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1008 this.get('cont').insertBefore(this._dragHandle, this.get('cont').firstChild);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1009 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1010 this.get('cont').appendChild(this._dragHandle);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1011 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1012 this.dd = new YAHOO.util.DD(this.get('id'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1013 this.dd.setHandleElId(this._dragHandle.id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1014
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1015 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1016 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1017 if (this._dragHandle) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1018 this._dragHandle.parentNode.removeChild(this._dragHandle);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1019 this._dragHandle = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1020 this.dd = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1021 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1022 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1023 if (this._titlebar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1024 if (draggable) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1025 this.dd = new YAHOO.util.DD(this.get('id'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1026 this.dd.setHandleElId(this._titlebar);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1027 Dom.addClass(this._titlebar, 'draggable');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1028 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1029 Dom.removeClass(this._titlebar, 'draggable');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1030 if (this.dd) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1031 this.dd.unreg();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1032 this.dd = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1033 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1034 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1035 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1036 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1037 validator: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1038 var ret = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1039 if (!YAHOO.util.DD) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1040 ret = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1041 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1042 return ret;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1043 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1044 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1045
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1046 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1047 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1048 * @method addButtonGroup
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1049 * @description Add a new button group to the toolbar. (uses addButton)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1050 * @param {Object} oGroup Object literal reference to the Groups Config (contains an array of button configs as well as the group label)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1051 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1052 addButtonGroup: function(oGroup) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1053 if (!this.get('element')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1054 this._queue[this._queue.length] = ['addButtonGroup', arguments];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1055 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1056 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1057
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1058 if (!this.hasClass(this.CLASS_PREFIX + '-grouped')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1059 this.addClass(this.CLASS_PREFIX + '-grouped');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1060 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1061 var div = document.createElement('DIV');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1062 Dom.addClass(div, this.CLASS_PREFIX + '-group');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1063 Dom.addClass(div, this.CLASS_PREFIX + '-group-' + oGroup.group);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1064 if (oGroup.label) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1065 var label = document.createElement('h3');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1066 label.innerHTML = oGroup.label;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1067 div.appendChild(label);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1068 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1069 if (!this.get('grouplabels')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1070 Dom.addClass(this.get('cont'), this.CLASS_PREFIX, '-nogrouplabels');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1071 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1072
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1073 this.get('cont').appendChild(div);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1074
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1075 //For accessibility, let's put all of the group buttons in an Unordered List
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1076 var ul = document.createElement('ul');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1077 div.appendChild(ul);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1078
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1079 if (!this._buttonGroupList) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1080 this._buttonGroupList = {};
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1081 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1082
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1083 this._buttonGroupList[oGroup.group] = ul;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1084
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1085 //An array of the button ids added to this group
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1086 //This is used for destruction later...
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1087 var addedButtons = [],
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1088 button;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1089
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1090
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1091 for (var i = 0; i < oGroup.buttons.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1092 var li = document.createElement('li');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1093 li.className = this.CLASS_PREFIX + '-groupitem';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1094 ul.appendChild(li);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1095 if ((oGroup.buttons[i].type !== undefined) && oGroup.buttons[i].type == 'separator') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1096 this.addSeparator(li);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1097 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1098 oGroup.buttons[i].container = li;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1099 button = this.addButton(oGroup.buttons[i]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1100 if (button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1101 addedButtons[addedButtons.length] = button.id;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1102 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1103 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1104 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1105 return addedButtons;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1106 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1107 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1108 * @method addButtonToGroup
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1109 * @description Add a new button to a toolbar group. Buttons supported:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1110 * push, split, menu, select, color, spin
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1111 * @param {Object} oButton Object literal reference to the Button's Config
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1112 * @param {String} group The Group identifier passed into the initial config
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1113 * @param {HTMLElement} after Optional HTML element to insert this button after in the DOM.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1114 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1115 addButtonToGroup: function(oButton, group, after) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1116 var groupCont = this._buttonGroupList[group],
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1117 li = document.createElement('li');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1118
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1119 li.className = this.CLASS_PREFIX + '-groupitem';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1120 oButton.container = li;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1121 this.addButton(oButton, after);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1122 groupCont.appendChild(li);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1123 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1124 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1125 * @method addButton
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1126 * @description Add a new button to the toolbar. Buttons supported:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1127 * push, split, menu, select, color, spin
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1128 * @param {Object} oButton Object literal reference to the Button's Config
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1129 * @param {HTMLElement} after Optional HTML element to insert this button after in the DOM.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1130 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1131 addButton: function(oButton, after) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1132 if (!this.get('element')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1133 this._queue[this._queue.length] = ['addButton', arguments];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1134 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1135 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1136 if (!this._buttonList) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1137 this._buttonList = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1138 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1139 if (!oButton.container) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1140 oButton.container = this.get('cont');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1141 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1142
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1143 if ((oButton.type == 'menu') || (oButton.type == 'split') || (oButton.type == 'select')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1144 if (Lang.isArray(oButton.menu)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1145 for (var i in oButton.menu) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1146 if (Lang.hasOwnProperty(oButton.menu, i)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1147 var funcObject = {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1148 fn: function(ev, x, oMenu) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1149 if (!oButton.menucmd) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1150 oButton.menucmd = oButton.value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1151 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1152 oButton.value = ((oMenu.value) ? oMenu.value : oMenu._oText.nodeValue);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1153 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1154 scope: this
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1155 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1156 oButton.menu[i].onclick = funcObject;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1157 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1158 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1159 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1160 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1161 var _oButton = {}, skip = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1162 for (var o in oButton) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1163 if (Lang.hasOwnProperty(oButton, o)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1164 if (!this._toolbarConfigs[o]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1165 _oButton[o] = oButton[o];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1166 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1167 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1168 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1169 if (oButton.type == 'select') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1170 _oButton.type = 'menu';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1171 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1172 if (oButton.type == 'spin') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1173 _oButton.type = 'push';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1174 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1175 if (_oButton.type == 'color') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1176 if (YAHOO.widget.Overlay) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1177 _oButton = this._makeColorButton(_oButton);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1178 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1179 skip = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1180 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1181 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1182 if (_oButton.menu) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1183 if ((YAHOO.widget.Overlay) && (oButton.menu instanceof YAHOO.widget.Overlay)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1184 oButton.menu.showEvent.subscribe(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1185 this._button = _oButton;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1186 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1187 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1188 for (var m = 0; m < _oButton.menu.length; m++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1189 if (!_oButton.menu[m].value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1190 _oButton.menu[m].value = _oButton.menu[m].text;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1191 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1192 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1193 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1194 _oButton.focusmenu = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1195 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1196 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1197 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1198 if (skip) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1199 oButton = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1200 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1201 //Add to .get('buttons') manually
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1202 this._configs.buttons.value[this._configs.buttons.value.length] = oButton;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1203
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1204 var tmp = new this.buttonType(_oButton);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1205 tmp.get('element').tabIndex = '-1';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1206 tmp.get('element').setAttribute('role', 'button');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1207 tmp._selected = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1208
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1209 if (this.get('disabled')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1210 //Toolbar is disabled, disable the new button too!
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1211 tmp.set('disabled', true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1212 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1213 if (!oButton.id) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1214 oButton.id = tmp.get('id');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1215 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1216
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1217 if (after) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1218 var el = tmp.get('element');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1219 var nextSib = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1220 if (after.get) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1221 nextSib = after.get('element').nextSibling;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1222 } else if (after.nextSibling) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1223 nextSib = after.nextSibling;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1224 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1225 if (nextSib) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1226 nextSib.parentNode.insertBefore(el, nextSib);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1227 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1228 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1229 tmp.addClass(this.CLASS_PREFIX + '-' + tmp.get('value'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1230
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1231 var icon = document.createElement('span');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1232 icon.className = this.CLASS_PREFIX + '-icon';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1233 tmp.get('element').insertBefore(icon, tmp.get('firstChild'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1234 if (tmp._button.tagName.toLowerCase() == 'button') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1235 tmp.get('element').setAttribute('unselectable', 'on');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1236 //Replace the Button HTML Element with an a href if it exists
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1237 var a = document.createElement('a');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1238 a.innerHTML = tmp._button.innerHTML;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1239 a.href = '#';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1240 a.tabIndex = '-1';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1241 Event.on(a, 'click', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1242 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1243 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1244 tmp._button.parentNode.replaceChild(a, tmp._button);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1245 tmp._button = a;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1246 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1247
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1248 if (oButton.type == 'select') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1249 if (tmp._button.tagName.toLowerCase() == 'select') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1250 icon.parentNode.removeChild(icon);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1251 var iel = tmp._button,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1252 parEl = tmp.get('element');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1253 parEl.parentNode.replaceChild(iel, parEl);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1254 //The 'element' value is currently the orphaned element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1255 //In order for "destroy" to execute we need to get('element') to reference the correct node.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1256 //I'm not sure if there is a direct approach to setting this value.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1257 tmp._configs.element.value = iel;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1258 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1259 //Don't put a class on it if it's a real select element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1260 tmp.addClass(this.CLASS_PREFIX + '-select');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1261 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1262 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1263 if (oButton.type == 'spin') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1264 if (!Lang.isArray(oButton.range)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1265 oButton.range = [ 10, 100 ];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1266 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1267 this._makeSpinButton(tmp, oButton);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1268 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1269 tmp.get('element').setAttribute('title', tmp.get('label'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1270 if (oButton.type != 'spin') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1271 if ((YAHOO.widget.Overlay) && (_oButton.menu instanceof YAHOO.widget.Overlay)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1272 var showPicker = function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1273 var exec = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1274 if (ev.keyCode && (ev.keyCode == 9)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1275 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1276 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1277 if (exec) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1278 if (this._colorPicker) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1279 this._colorPicker._button = oButton.value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1280 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1281 var menuEL = tmp.getMenu().element;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1282 if (Dom.getStyle(menuEL, 'visibility') == 'hidden') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1283 tmp.getMenu().show();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1284 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1285 tmp.getMenu().hide();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1286 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1287 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1288 YAHOO.util.Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1289 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1290 tmp.on('mousedown', showPicker, oButton, this);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1291 tmp.on('keydown', showPicker, oButton, this);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1292
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1293 } else if ((oButton.type != 'menu') && (oButton.type != 'select')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1294 tmp.on('keypress', this._buttonClick, oButton, this);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1295 tmp.on('mousedown', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1296 YAHOO.util.Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1297 this._buttonClick(ev, oButton);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1298 }, oButton, this);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1299 tmp.on('click', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1300 YAHOO.util.Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1301 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1302 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1303 //Stop the mousedown event so we can trap the selection in the editor!
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1304 tmp.on('mousedown', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1305 YAHOO.util.Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1306 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1307 tmp.on('click', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1308 YAHOO.util.Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1309 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1310 tmp.on('change', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1311 if (!ev.target) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1312 if (!oButton.menucmd) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1313 oButton.menucmd = oButton.value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1314 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1315 oButton.value = ev.value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1316 this._buttonClick(ev, oButton);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1317 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1318 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1319
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1320 var self = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1321 //Hijack the mousedown event in the menu and make it fire a button click..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1322 tmp.on('appendTo', function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1323 var tmp = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1324 if (tmp.getMenu() && tmp.getMenu().mouseDownEvent) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1325 tmp.getMenu().mouseDownEvent.subscribe(function(ev, args) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1326 var oMenu = args[1];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1327 YAHOO.util.Event.stopEvent(args[0]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1328 tmp._onMenuClick(args[0], tmp);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1329 if (!oButton.menucmd) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1330 oButton.menucmd = oButton.value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1331 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1332 oButton.value = ((oMenu.value) ? oMenu.value : oMenu._oText.nodeValue);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1333 self._buttonClick.call(self, args[1], oButton);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1334 tmp._hideMenu();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1335 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1336 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1337 tmp.getMenu().clickEvent.subscribe(function(ev, args) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1338 YAHOO.util.Event.stopEvent(args[0]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1339 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1340 tmp.getMenu().mouseUpEvent.subscribe(function(ev, args) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1341 YAHOO.util.Event.stopEvent(args[0]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1342 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1343 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1344 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1345
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1346 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1347 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1348 //Stop the mousedown event so we can trap the selection in the editor!
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1349 tmp.on('mousedown', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1350 YAHOO.util.Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1351 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1352 tmp.on('click', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1353 YAHOO.util.Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1354 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1355 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1356 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1357 /*
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1358 //Add a couple of new events for IE
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1359 tmp.DOM_EVENTS.focusin = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1360 tmp.DOM_EVENTS.focusout = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1361
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1362 //Stop them so we don't loose focus in the Editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1363 tmp.on('focusin', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1364 YAHOO.util.Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1365 }, oButton, this);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1366
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1367 tmp.on('focusout', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1368 YAHOO.util.Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1369 }, oButton, this);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1370 tmp.on('click', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1371 YAHOO.util.Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1372 }, oButton, this);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1373 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1374 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1375 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1376 //This will keep the document from gaining focus and the editor from loosing it..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1377 //Forcefully remove the focus calls in button!
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1378 tmp.hasFocus = function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1379 return true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1380 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1381 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1382 this._buttonList[this._buttonList.length] = tmp;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1383 if ((oButton.type == 'menu') || (oButton.type == 'split') || (oButton.type == 'select')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1384 if (Lang.isArray(oButton.menu)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1385 var menu = tmp.getMenu();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1386 if (menu && menu.renderEvent) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1387 menu.renderEvent.subscribe(this._addMenuClasses, tmp);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1388 if (oButton.renderer) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1389 menu.renderEvent.subscribe(oButton.renderer, tmp);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1390 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1391 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1392 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1393 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1394 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1395 return oButton;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1396 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1397 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1398 * @method addSeparator
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1399 * @description Add a new button separator to the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1400 * @param {HTMLElement} cont Optional HTML element to insert this button into.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1401 * @param {HTMLElement} after Optional HTML element to insert this button after in the DOM.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1402 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1403 addSeparator: function(cont, after) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1404 if (!this.get('element')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1405 this._queue[this._queue.length] = ['addSeparator', arguments];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1406 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1407 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1408 var sepCont = ((cont) ? cont : this.get('cont'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1409 if (!this.get('element')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1410 this._queue[this._queue.length] = ['addSeparator', arguments];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1411 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1412 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1413 if (this._sepCount === null) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1414 this._sepCount = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1415 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1416 if (!this._sep) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1417 this._sep = document.createElement('SPAN');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1418 Dom.addClass(this._sep, this.CLASS_SEPARATOR);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1419 this._sep.innerHTML = '|';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1420 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1421 var _sep = this._sep.cloneNode(true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1422 this._sepCount++;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1423 Dom.addClass(_sep, this.CLASS_SEPARATOR + '-' + this._sepCount);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1424 if (after) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1425 var nextSib = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1426 if (after.get) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1427 nextSib = after.get('element').nextSibling;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1428 } else if (after.nextSibling) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1429 nextSib = after.nextSibling;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1430 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1431 nextSib = after;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1432 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1433 if (nextSib) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1434 if (nextSib == after) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1435 nextSib.parentNode.appendChild(_sep);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1436 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1437 nextSib.parentNode.insertBefore(_sep, nextSib);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1438 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1439 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1440 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1441 sepCont.appendChild(_sep);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1442 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1443 return _sep;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1444 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1445 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1446 * @method _createColorPicker
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1447 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1448 * @description Creates the core DOM reference to the color picker menu item.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1449 * @param {String} id the id of the toolbar to prefix this DOM container with.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1450 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1451 _createColorPicker: function(id) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1452 if (Dom.get(id + '_colors')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1453 Dom.get(id + '_colors').parentNode.removeChild(Dom.get(id + '_colors'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1454 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1455 var picker = document.createElement('div');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1456 picker.className = 'yui-toolbar-colors';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1457 picker.id = id + '_colors';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1458 picker.style.display = 'none';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1459 Event.on(window, 'load', function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1460 document.body.appendChild(picker);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1461 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1462
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1463 this._colorPicker = picker;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1464
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1465 var html = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1466 for (var i in this._colorData) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1467 if (Lang.hasOwnProperty(this._colorData, i)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1468 html += '<a style="background-color: ' + i + '" href="#">' + i.replace('#', '') + '</a>';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1469 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1470 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1471 html += '<span><em>X</em><strong></strong></span>';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1472 window.setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1473 picker.innerHTML = html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1474 }, 0);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1475
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1476 Event.on(picker, 'mouseover', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1477 var picker = this._colorPicker;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1478 var em = picker.getElementsByTagName('em')[0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1479 var strong = picker.getElementsByTagName('strong')[0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1480 var tar = Event.getTarget(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1481 if (tar.tagName.toLowerCase() == 'a') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1482 em.style.backgroundColor = tar.style.backgroundColor;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1483 strong.innerHTML = this._colorData['#' + tar.innerHTML] + '<br>' + tar.innerHTML;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1484 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1485 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1486 Event.on(picker, 'focus', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1487 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1488 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1489 Event.on(picker, 'click', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1490 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1491 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1492 Event.on(picker, 'mousedown', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1493 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1494 var tar = Event.getTarget(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1495 if (tar.tagName.toLowerCase() == 'a') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1496 var retVal = this.fireEvent('colorPickerClicked', { type: 'colorPickerClicked', target: this, button: this._colorPicker._button, color: tar.innerHTML, colorName: this._colorData['#' + tar.innerHTML] } );
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1497 if (retVal !== false) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1498 var info = {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1499 color: tar.innerHTML,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1500 colorName: this._colorData['#' + tar.innerHTML],
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1501 value: this._colorPicker._button
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1502 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1503
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1504 this.fireEvent('buttonClick', { type: 'buttonClick', target: this.get('element'), button: info });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1505 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1506 this.getButtonByValue(this._colorPicker._button).getMenu().hide();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1507 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1508 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1509 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1510 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1511 * @method _resetColorPicker
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1512 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1513 * @description Clears the currently selected color or mouseover color in the color picker.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1514 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1515 _resetColorPicker: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1516 var em = this._colorPicker.getElementsByTagName('em')[0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1517 var strong = this._colorPicker.getElementsByTagName('strong')[0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1518 em.style.backgroundColor = 'transparent';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1519 strong.innerHTML = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1520 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1521 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1522 * @method _makeColorButton
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1523 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1524 * @description Called to turn a "color" button into a menu button with an Overlay for the menu.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1525 * @param {Object} _oButton <a href="YAHOO.widget.ToolbarButton.html">YAHOO.widget.ToolbarButton</a> reference
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1526 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1527 _makeColorButton: function(_oButton) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1528 if (!this._colorPicker) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1529 this._createColorPicker(this.get('id'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1530 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1531 _oButton.type = 'color';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1532 _oButton.menu = new YAHOO.widget.Overlay(this.get('id') + '_' + _oButton.value + '_menu', { visible: false, position: 'absolute', iframe: true });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1533 _oButton.menu.setBody('');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1534 _oButton.menu.render(this.get('cont'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1535 Dom.addClass(_oButton.menu.element, 'yui-button-menu');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1536 Dom.addClass(_oButton.menu.element, 'yui-color-button-menu');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1537 _oButton.menu.beforeShowEvent.subscribe(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1538 _oButton.menu.cfg.setProperty('zindex', 5); //Re Adjust the overlays zIndex.. not sure why.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1539 _oButton.menu.cfg.setProperty('context', [this.getButtonById(_oButton.id).get('element'), 'tl', 'bl']); //Re Adjust the overlay.. not sure why.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1540 //Move the DOM reference of the color picker to the Overlay that we are about to show.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1541 this._resetColorPicker();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1542 var _p = this._colorPicker;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1543 if (_p.parentNode) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1544 _p.parentNode.removeChild(_p);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1545 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1546 _oButton.menu.setBody('');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1547 _oButton.menu.appendToBody(_p);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1548 this._colorPicker.style.display = 'block';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1549 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1550 return _oButton;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1551 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1552 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1553 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1554 * @method _makeSpinButton
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1555 * @description Create a button similar to an OS Spin button.. It has an up/down arrow combo to scroll through a range of int values.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1556 * @param {Object} _button <a href="YAHOO.widget.ToolbarButton.html">YAHOO.widget.ToolbarButton</a> reference
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1557 * @param {Object} oButton Object literal containing the buttons initial config
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1558 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1559 _makeSpinButton: function(_button, oButton) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1560 _button.addClass(this.CLASS_PREFIX + '-spinbutton');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1561 var self = this,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1562 _par = _button._button.parentNode.parentNode, //parentNode of Button Element for appending child
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1563 range = oButton.range,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1564 _b1 = document.createElement('a'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1565 _b2 = document.createElement('a');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1566 _b1.href = '#';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1567 _b2.href = '#';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1568 _b1.tabIndex = '-1';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1569 _b2.tabIndex = '-1';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1570
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1571 //Setup the up and down arrows
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1572 _b1.className = 'up';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1573 _b1.title = this.STR_SPIN_UP;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1574 _b1.innerHTML = this.STR_SPIN_UP;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1575 _b2.className = 'down';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1576 _b2.title = this.STR_SPIN_DOWN;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1577 _b2.innerHTML = this.STR_SPIN_DOWN;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1578
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1579 //Append them to the container
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1580 _par.appendChild(_b1);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1581 _par.appendChild(_b2);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1582
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1583 var label = YAHOO.lang.substitute(this.STR_SPIN_LABEL, { VALUE: _button.get('label') });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1584 _button.set('title', label);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1585
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1586 var cleanVal = function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1587 value = ((value < range[0]) ? range[0] : value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1588 value = ((value > range[1]) ? range[1] : value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1589 return value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1590 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1591
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1592 var br = this.browser;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1593 var tbar = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1594 var strLabel = this.STR_SPIN_LABEL;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1595 if (this._titlebar && this._titlebar.firstChild) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1596 tbar = this._titlebar.firstChild;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1597 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1598
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1599 var _intUp = function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1600 YAHOO.util.Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1601 if (!_button.get('disabled') && (ev.keyCode != 9)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1602 var value = parseInt(_button.get('label'), 10);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1603 value++;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1604 value = cleanVal(value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1605 _button.set('label', ''+value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1606 var label = YAHOO.lang.substitute(strLabel, { VALUE: _button.get('label') });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1607 _button.set('title', label);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1608 if (!br.webkit && tbar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1609 //tbar.focus(); //We do this for accessibility, on the re-focus of the element, a screen reader will re-read the title that was just changed
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1610 //_button.focus();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1611 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1612 self._buttonClick(ev, oButton);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1613 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1614 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1615
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1616 var _intDown = function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1617 YAHOO.util.Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1618 if (!_button.get('disabled') && (ev.keyCode != 9)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1619 var value = parseInt(_button.get('label'), 10);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1620 value--;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1621 value = cleanVal(value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1622
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1623 _button.set('label', ''+value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1624 var label = YAHOO.lang.substitute(strLabel, { VALUE: _button.get('label') });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1625 _button.set('title', label);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1626 if (!br.webkit && tbar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1627 //tbar.focus(); //We do this for accessibility, on the re-focus of the element, a screen reader will re-read the title that was just changed
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1628 //_button.focus();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1629 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1630 self._buttonClick(ev, oButton);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1631 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1632 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1633
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1634 var _intKeyUp = function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1635 if (ev.keyCode == 38) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1636 _intUp(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1637 } else if (ev.keyCode == 40) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1638 _intDown(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1639 } else if (ev.keyCode == 107 && ev.shiftKey) { //Plus Key
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1640 _intUp(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1641 } else if (ev.keyCode == 109 && ev.shiftKey) { //Minus Key
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1642 _intDown(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1643 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1644 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1645
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1646 //Handle arrow keys..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1647 _button.on('keydown', _intKeyUp, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1648
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1649 //Listen for the click on the up button and act on it
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1650 //Listen for the click on the down button and act on it
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1651 Event.on(_b1, 'mousedown',function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1652 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1653 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1654 Event.on(_b2, 'mousedown', function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1655 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1656 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1657 Event.on(_b1, 'click', _intUp, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1658 Event.on(_b2, 'click', _intDown, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1659 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1660 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1661 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1662 * @method _buttonClick
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1663 * @description Click handler for all buttons in the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1664 * @param {String} ev The event that was passed in.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1665 * @param {Object} info Object literal of information about the button that was clicked.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1666 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1667 _buttonClick: function(ev, info) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1668 var doEvent = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1669
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1670 if (ev && ev.type == 'keypress') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1671 if (ev.keyCode == 9) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1672 doEvent = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1673 } else if ((ev.keyCode === 13) || (ev.keyCode === 0) || (ev.keyCode === 32)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1674 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1675 doEvent = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1676 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1677 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1678
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1679 if (doEvent) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1680 var fireNextEvent = true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1681 retValue = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1682
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1683 info.isSelected = this.isSelected(info.id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1684
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1685 if (info.value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1686 retValue = this.fireEvent(info.value + 'Click', { type: info.value + 'Click', target: this.get('element'), button: info });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1687 if (retValue === false) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1688 fireNextEvent = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1689 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1690 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1691
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1692 if (info.menucmd && fireNextEvent) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1693 retValue = this.fireEvent(info.menucmd + 'Click', { type: info.menucmd + 'Click', target: this.get('element'), button: info });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1694 if (retValue === false) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1695 fireNextEvent = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1696 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1697 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1698 if (fireNextEvent) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1699 this.fireEvent('buttonClick', { type: 'buttonClick', target: this.get('element'), button: info });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1700 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1701
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1702 if (info.type == 'select') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1703 var button = this.getButtonById(info.id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1704 if (button.buttonType == 'rich') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1705 var txt = info.value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1706 for (var i = 0; i < info.menu.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1707 if (info.menu[i].value == info.value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1708 txt = info.menu[i].text;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1709 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1710 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1711 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1712 button.set('label', '<span class="yui-toolbar-' + info.menucmd + '-' + (info.value).replace(/ /g, '-').toLowerCase() + '">' + txt + '</span>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1713 var _items = button.getMenu().getItems();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1714 for (var m = 0; m < _items.length; m++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1715 if (_items[m].value.toLowerCase() == info.value.toLowerCase()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1716 _items[m].cfg.setProperty('checked', true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1717 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1718 _items[m].cfg.setProperty('checked', false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1719 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1720 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1721 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1722 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1723 if (ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1724 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1725 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1726 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1727 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1728 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1729 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1730 * @property _keyNav
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1731 * @description Flag to determine if the arrow nav listeners have been attached
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1732 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1733 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1734 _keyNav: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1735 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1736 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1737 * @property _navCounter
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1738 * @description Internal counter for walking the buttons in the toolbar with the arrow keys
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1739 * @type Number
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1740 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1741 _navCounter: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1742 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1743 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1744 * @method _navigateButtons
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1745 * @description Handles the navigation/focus of toolbar buttons with the Arrow Keys
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1746 * @param {Event} ev The Key Event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1747 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1748 _navigateButtons: function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1749 switch (ev.keyCode) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1750 case 37:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1751 case 39:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1752 if (ev.keyCode == 37) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1753 this._navCounter--;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1754 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1755 this._navCounter++;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1756 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1757 if (this._navCounter > (this._buttonList.length - 1)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1758 this._navCounter = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1759 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1760 if (this._navCounter < 0) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1761 this._navCounter = (this._buttonList.length - 1);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1762 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1763 if (this._buttonList[this._navCounter]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1764 var el = this._buttonList[this._navCounter].get('element');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1765 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1766 el = this._buttonList[this._navCounter].get('element').getElementsByTagName('a')[0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1767 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1768 if (this._buttonList[this._navCounter].get('disabled')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1769 this._navigateButtons(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1770 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1771 el.focus();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1772 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1773 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1774 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1775 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1776 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1777 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1778 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1779 * @method _handleFocus
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1780 * @description Sets up the listeners for the arrow key navigation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1781 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1782 _handleFocus: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1783 if (!this._keyNav) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1784 var ev = 'keypress';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1785 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1786 ev = 'keydown';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1787 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1788 Event.on(this.get('element'), ev, this._navigateButtons, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1789 this._keyNav = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1790 this._navCounter = -1;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1791 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1792 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1793 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1794 * @method getButtonById
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1795 * @description Gets a button instance from the toolbar by is Dom id.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1796 * @param {String} id The Dom id to query for.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1797 * @return {<a href="YAHOO.widget.ToolbarButton.html">YAHOO.widget.ToolbarButton</a>}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1798 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1799 getButtonById: function(id) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1800 var len = this._buttonList.length;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1801 for (var i = 0; i < len; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1802 if (this._buttonList[i] && this._buttonList[i].get('id') == id) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1803 return this._buttonList[i];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1804 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1805 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1806 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1807 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1808 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1809 * @method getButtonByValue
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1810 * @description Gets a button instance or a menuitem instance from the toolbar by it's value.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1811 * @param {String} value The button value to query for.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1812 * @return {<a href="YAHOO.widget.ToolbarButton.html">YAHOO.widget.ToolbarButton</a> or <a href="YAHOO.widget.MenuItem.html">YAHOO.widget.MenuItem</a>}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1813 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1814 getButtonByValue: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1815 var _buttons = this.get('buttons');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1816 if (!_buttons) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1817 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1818 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1819 var len = _buttons.length;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1820 for (var i = 0; i < len; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1821 if (_buttons[i].group !== undefined) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1822 for (var m = 0; m < _buttons[i].buttons.length; m++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1823 if ((_buttons[i].buttons[m].value == value) || (_buttons[i].buttons[m].menucmd == value)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1824 return this.getButtonById(_buttons[i].buttons[m].id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1825 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1826 if (_buttons[i].buttons[m].menu) { //Menu Button, loop through the values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1827 for (var s = 0; s < _buttons[i].buttons[m].menu.length; s++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1828 if (_buttons[i].buttons[m].menu[s].value == value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1829 return this.getButtonById(_buttons[i].buttons[m].id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1830 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1831 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1832 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1833 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1834 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1835 if ((_buttons[i].value == value) || (_buttons[i].menucmd == value)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1836 return this.getButtonById(_buttons[i].id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1837 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1838 if (_buttons[i].menu) { //Menu Button, loop through the values
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1839 for (var j = 0; j < _buttons[i].menu.length; j++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1840 if (_buttons[i].menu[j].value == value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1841 return this.getButtonById(_buttons[i].id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1842 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1843 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1844 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1845 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1846 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1847 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1848 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1849 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1850 * @method getButtonByIndex
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1851 * @description Gets a button instance from the toolbar by is index in _buttonList.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1852 * @param {Number} index The index of the button in _buttonList.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1853 * @return {<a href="YAHOO.widget.ToolbarButton.html">YAHOO.widget.ToolbarButton</a>}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1854 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1855 getButtonByIndex: function(index) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1856 if (this._buttonList[index]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1857 return this._buttonList[index];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1858 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1859 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1860 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1861 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1862 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1863 * @method getButtons
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1864 * @description Returns an array of buttons in the current toolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1865 * @return {Array}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1866 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1867 getButtons: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1868 return this._buttonList;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1869 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1870 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1871 * @method disableButton
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1872 * @description Disables a button in the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1873 * @param {String/Number} id Disable a button by it's id, index or value.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1874 * @return {Boolean}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1875 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1876 disableButton: function(id) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1877 var button = getButton.call(this, id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1878 if (button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1879 button.set('disabled', true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1880 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1881 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1882 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1883 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1884 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1885 * @method enableButton
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1886 * @description Enables a button in the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1887 * @param {String/Number} id Enable a button by it's id, index or value.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1888 * @return {Boolean}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1889 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1890 enableButton: function(id) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1891 if (this.get('disabled')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1892 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1893 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1894 var button = getButton.call(this, id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1895 if (button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1896 if (button.get('disabled')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1897 button.set('disabled', false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1898 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1899 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1900 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1901 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1902 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1903 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1904 * @method isSelected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1905 * @description Tells if a button is selected or not.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1906 * @param {String/Number} id A button by it's id, index or value.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1907 * @return {Boolean}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1908 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1909 isSelected: function(id) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1910 var button = getButton.call(this, id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1911 if (button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1912 return button._selected;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1913 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1914 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1915 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1916 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1917 * @method selectButton
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1918 * @description Selects a button in the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1919 * @param {String/Number} id Select a button by it's id, index or value.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1920 * @param {String} value If this is a Menu Button, check this item in the menu
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1921 * @return {Boolean}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1922 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1923 selectButton: function(id, value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1924 var button = getButton.call(this, id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1925 if (button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1926 button.addClass('yui-button-selected');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1927 button.addClass('yui-button-' + button.get('value') + '-selected');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1928 button._selected = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1929 if (value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1930 if (button.buttonType == 'rich') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1931 var _items = button.getMenu().getItems();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1932 for (var m = 0; m < _items.length; m++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1933 if (_items[m].value == value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1934 _items[m].cfg.setProperty('checked', true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1935 button.set('label', '<span class="yui-toolbar-' + button.get('value') + '-' + (value).replace(/ /g, '-').toLowerCase() + '">' + _items[m]._oText.nodeValue + '</span>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1936 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1937 _items[m].cfg.setProperty('checked', false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1938 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1939 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1940 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1941 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1942 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1943 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1944 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1945 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1946 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1947 * @method deselectButton
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1948 * @description Deselects a button in the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1949 * @param {String/Number} id Deselect a button by it's id, index or value.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1950 * @return {Boolean}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1951 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1952 deselectButton: function(id) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1953 var button = getButton.call(this, id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1954 if (button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1955 button.removeClass('yui-button-selected');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1956 button.removeClass('yui-button-' + button.get('value') + '-selected');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1957 button.removeClass('yui-button-hover');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1958 button._selected = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1959 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1960 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1961 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1962 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1963 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1964 * @method deselectAllButtons
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1965 * @description Deselects all buttons in the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1966 * @return {Boolean}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1967 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1968 deselectAllButtons: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1969 var len = this._buttonList.length;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1970 for (var i = 0; i < len; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1971 this.deselectButton(this._buttonList[i]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1972 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1973 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1974 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1975 * @method disableAllButtons
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1976 * @description Disables all buttons in the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1977 * @return {Boolean}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1978 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1979 disableAllButtons: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1980 if (this.get('disabled')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1981 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1982 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1983 var len = this._buttonList.length;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1984 for (var i = 0; i < len; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1985 this.disableButton(this._buttonList[i]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1986 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1987 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1988 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1989 * @method enableAllButtons
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1990 * @description Enables all buttons in the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1991 * @return {Boolean}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1992 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1993 enableAllButtons: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1994 if (this.get('disabled')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1995 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1996 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1997 var len = this._buttonList.length;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1998 for (var i = 0; i < len; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
1999 this.enableButton(this._buttonList[i]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2000 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2001 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2002 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2003 * @method resetAllButtons
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2004 * @description Resets all buttons to their initial state.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2005 * @param {Object} _ex Except these buttons
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2006 * @return {Boolean}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2007 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2008 resetAllButtons: function(_ex) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2009 if (!Lang.isObject(_ex)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2010 _ex = {};
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2011 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2012 if (this.get('disabled') || !this._buttonList) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2013 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2014 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2015 var len = this._buttonList.length;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2016 for (var i = 0; i < len; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2017 var _button = this._buttonList[i];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2018 if (_button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2019 var disabled = _button._configs.disabled._initialConfig.value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2020 if (_ex[_button.get('id')]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2021 this.enableButton(_button);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2022 this.selectButton(_button);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2023 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2024 if (disabled) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2025 this.disableButton(_button);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2026 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2027 this.enableButton(_button);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2028 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2029 this.deselectButton(_button);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2030 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2031 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2032 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2033 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2034 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2035 * @method destroyButton
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2036 * @description Destroy a button in the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2037 * @param {String/Number} id Destroy a button by it's id or index.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2038 * @return {Boolean}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2039 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2040 destroyButton: function(id) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2041 var button = getButton.call(this, id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2042 if (button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2043 var thisID = button.get('id'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2044 new_list = [], i = 0,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2045 len = this._buttonList.length;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2046
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2047 button.destroy();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2048
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2049 for (i = 0; i < len; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2050 if (this._buttonList[i].get('id') != thisID) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2051 new_list[new_list.length]= this._buttonList[i];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2052 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2053 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2054
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2055 this._buttonList = new_list;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2056 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2057 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2058 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2059 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2060 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2061 * @method destroy
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2062 * @description Destroys the toolbar, all of it's elements and objects.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2063 * @return {Boolean}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2064 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2065 destroy: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2066 var len = this._configuredButtons.length, j, i;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2067 for(b = 0; b < len; b++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2068 this.destroyButton(this._configuredButtons[b]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2069 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2070
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2071 this._configuredButtons = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2072
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2073 this.get('element').innerHTML = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2074 this.get('element').className = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2075 //Brutal Object Destroy
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2076 for (i in this) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2077 if (Lang.hasOwnProperty(this, i)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2078 this[i] = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2079 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2080 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2081 return true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2082 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2083 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2084 * @method collapse
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2085 * @description Programatically collapse the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2086 * @param {Boolean} collapse True to collapse, false to expand.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2087 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2088 collapse: function(collapse) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2089 var el = Dom.getElementsByClassName('collapse', 'span', this._titlebar);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2090 if (collapse === false) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2091 Dom.removeClass(this.get('cont').parentNode, 'yui-toolbar-container-collapsed');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2092 if (el[0]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2093 Dom.removeClass(el[0], 'collapsed');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2094 el[0].title = this.STR_COLLAPSE;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2095 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2096 this.fireEvent('toolbarExpanded', { type: 'toolbarExpanded', target: this });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2097 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2098 if (el[0]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2099 Dom.addClass(el[0], 'collapsed');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2100 el[0].title = this.STR_EXPAND;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2101 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2102 Dom.addClass(this.get('cont').parentNode, 'yui-toolbar-container-collapsed');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2103 this.fireEvent('toolbarCollapsed', { type: 'toolbarCollapsed', target: this });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2104 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2105 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2106 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2107 * @method toString
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2108 * @description Returns a string representing the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2109 * @return {String}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2110 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2111 toString: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2112 return 'Toolbar (#' + this.get('element').id + ') with ' + this._buttonList.length + ' buttons.';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2113 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2114 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2115 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2116 * @event buttonClick
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2117 * @param {Object} o The object passed to this handler is the button config used to create the button.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2118 * @description Fires when any botton receives a click event. Passes back a single object representing the buttons config object. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2119 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2120 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2121 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2122 * @event valueClick
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2123 * @param {Object} o The object passed to this handler is the button config used to create the button.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2124 * @description This is a special dynamic event that is created and dispatched based on the value property
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2125 * of the button config. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2126 * Example:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2127 * <code><pre>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2128 * buttons : [
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2129 * { type: 'button', value: 'test', value: 'testButton' }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2130 * ]</pre>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2131 * </code>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2132 * With the valueClick event you could subscribe to this buttons click event with this:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2133 * tbar.in('testButtonClick', function() { alert('test button clicked'); })
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2134 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2135 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2136 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2137 * @event toolbarExpanded
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2138 * @description Fires when the toolbar is expanded via the collapse button. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2139 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2140 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2141 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2142 * @event toolbarCollapsed
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2143 * @description Fires when the toolbar is collapsed via the collapse button. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2144 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2145 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2146 })();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2147 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2148 * @module editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2149 * @description <p>The Rich Text Editor is a UI control that replaces a standard HTML textarea; it allows for the rich formatting of text content, including common structural treatments like lists, formatting treatments like bold and italic text, and drag-and-drop inclusion and sizing of images. The Rich Text Editor's toolbar is extensible via a plugin architecture so that advanced implementations can achieve a high degree of customization.</p>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2150 * @namespace YAHOO.widget
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2151 * @requires yahoo, dom, element, event, toolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2152 * @optional animation, container_core, resize, dragdrop
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2153 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2154
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2155 (function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2156 var Dom = YAHOO.util.Dom,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2157 Event = YAHOO.util.Event,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2158 Lang = YAHOO.lang,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2159 Toolbar = YAHOO.widget.Toolbar;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2160
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2161 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2162 * The Rich Text Editor is a UI control that replaces a standard HTML textarea; it allows for the rich formatting of text content, including common structural treatments like lists, formatting treatments like bold and italic text, and drag-and-drop inclusion and sizing of images. The Rich Text Editor's toolbar is extensible via a plugin architecture so that advanced implementations can achieve a high degree of customization.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2163 * @constructor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2164 * @class SimpleEditor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2165 * @extends YAHOO.util.Element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2166 * @param {String/HTMLElement} el The textarea element to turn into an editor.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2167 * @param {Object} attrs Object liternal containing configuration parameters.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2168 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2169
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2170 YAHOO.widget.SimpleEditor = function(el, attrs) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2171
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2172 var o = {};
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2173 if (Lang.isObject(el) && (!el.tagName) && !attrs) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2174 Lang.augmentObject(o, el); //Break the config reference
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2175 el = document.createElement('textarea');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2176 this.DOMReady = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2177 if (o.container) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2178 var c = Dom.get(o.container);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2179 c.appendChild(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2180 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2181 document.body.appendChild(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2182 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2183 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2184 if (attrs) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2185 Lang.augmentObject(o, attrs); //Break the config reference
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2186 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2187 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2188
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2189 var oConfig = {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2190 element: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2191 attributes: o
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2192 }, id = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2193
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2194 if (Lang.isString(el)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2195 id = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2196 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2197 if (oConfig.attributes.id) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2198 id = oConfig.attributes.id;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2199 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2200 this.DOMReady = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2201 id = Dom.generateId(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2202 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2203 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2204 oConfig.element = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2205
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2206 var element_cont = document.createElement('DIV');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2207 oConfig.attributes.element_cont = new YAHOO.util.Element(element_cont, {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2208 id: id + '_container'
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2209 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2210 var div = document.createElement('div');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2211 Dom.addClass(div, 'first-child');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2212 oConfig.attributes.element_cont.appendChild(div);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2213
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2214 if (!oConfig.attributes.toolbar_cont) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2215 oConfig.attributes.toolbar_cont = document.createElement('DIV');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2216 oConfig.attributes.toolbar_cont.id = id + '_toolbar';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2217 div.appendChild(oConfig.attributes.toolbar_cont);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2218 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2219 var editorWrapper = document.createElement('DIV');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2220 div.appendChild(editorWrapper);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2221 oConfig.attributes.editor_wrapper = editorWrapper;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2222
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2223 YAHOO.widget.SimpleEditor.superclass.constructor.call(this, oConfig.element, oConfig.attributes);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2224 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2225
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2226
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2227 YAHOO.extend(YAHOO.widget.SimpleEditor, YAHOO.util.Element, {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2228 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2229 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2230 * @property _resizeConfig
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2231 * @description The default config for the Resize Utility
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2232 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2233 _resizeConfig: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2234 handles: ['br'],
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2235 autoRatio: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2236 status: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2237 proxy: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2238 useShim: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2239 setSize: false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2240 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2241 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2242 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2243 * @method _setupResize
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2244 * @description Creates the Resize instance and binds its events.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2245 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2246 _setupResize: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2247 if (!YAHOO.util.DD || !YAHOO.util.Resize) { return false; }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2248 if (this.get('resize')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2249 var config = {};
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2250 Lang.augmentObject(config, this._resizeConfig); //Break the config reference
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2251 this.resize = new YAHOO.util.Resize(this.get('element_cont').get('element'), config);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2252 this.resize.on('resize', function(args) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2253 var anim = this.get('animate');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2254 this.set('animate', false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2255 this.set('width', args.width + 'px');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2256 var h = args.height,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2257 th = (this.toolbar.get('element').clientHeight + 2),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2258 dh = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2259 if (this.dompath) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2260 dh = (this.dompath.clientHeight + 1); //It has a 1px top border..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2261 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2262 var newH = (h - th - dh);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2263 this.set('height', newH + 'px');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2264 this.get('element_cont').setStyle('height', '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2265 this.set('animate', anim);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2266 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2267 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2268 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2269 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2270 * @property resize
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2271 * @description A reference to the Resize object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2272 * @type YAHOO.util.Resize
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2273 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2274 resize: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2275 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2276 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2277 * @method _setupDD
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2278 * @description Sets up the DD instance used from the 'drag' config option.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2279 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2280 _setupDD: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2281 if (!YAHOO.util.DD) { return false; }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2282 if (this.get('drag')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2283 var d = this.get('drag'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2284 dd = YAHOO.util.DD;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2285 if (d === 'proxy') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2286 dd = YAHOO.util.DDProxy;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2287 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2288
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2289 this.dd = new dd(this.get('element_cont').get('element'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2290 this.toolbar.addClass('draggable');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2291 this.dd.setHandleElId(this.toolbar._titlebar);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2292 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2293 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2294 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2295 * @property dd
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2296 * @description A reference to the DragDrop object.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2297 * @type YAHOO.util.DD/YAHOO.util.DDProxy
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2298 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2299 dd: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2300 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2301 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2302 * @property _lastCommand
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2303 * @description A cache of the last execCommand (used for Undo/Redo so they don't mark an undo level)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2304 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2305 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2306 _lastCommand: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2307 _undoNodeChange: function() {},
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2308 _storeUndo: function() {},
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2309 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2310 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2311 * @method _checkKey
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2312 * @description Checks a keyMap entry against a key event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2313 * @param {Object} k The _keyMap object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2314 * @param {Event} e The Mouse Event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2315 * @return {Boolean}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2316 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2317 _checkKey: function(k, e) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2318 var ret = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2319 if ((e.keyCode === k.key)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2320 if (k.mods && (k.mods.length > 0)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2321 var val = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2322 for (var i = 0; i < k.mods.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2323 if (this.browser.mac) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2324 if (k.mods[i] == 'ctrl') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2325 k.mods[i] = 'meta';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2326 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2327 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2328 if (e[k.mods[i] + 'Key'] === true) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2329 val++;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2330 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2331 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2332 if (val === k.mods.length) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2333 ret = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2334 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2335 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2336 ret = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2337 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2338 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2339 return ret;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2340 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2341 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2342 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2343 * @property _keyMap
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2344 * @description Named key maps for various actions in the Editor. Example: <code>CLOSE_WINDOW: { key: 87, mods: ['shift', 'ctrl'] }</code>.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2345 * This entry shows that when key 87 (W) is found with the modifiers of shift and control, the window will close. You can customize this object to tweak keyboard shortcuts.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2346 * @type {Object/Mixed}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2347 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2348 _keyMap: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2349 SELECT_ALL: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2350 key: 65, //A key
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2351 mods: ['ctrl']
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2352 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2353 CLOSE_WINDOW: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2354 key: 87, //W key
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2355 mods: ['shift', 'ctrl']
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2356 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2357 FOCUS_TOOLBAR: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2358 key: 27,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2359 mods: ['shift']
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2360 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2361 FOCUS_AFTER: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2362 key: 27
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2363 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2364 FONT_SIZE_UP: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2365 key: 38,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2366 mods: ['shift', 'ctrl']
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2367 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2368 FONT_SIZE_DOWN: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2369 key: 40,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2370 mods: ['shift', 'ctrl']
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2371 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2372 CREATE_LINK: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2373 key: 76,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2374 mods: ['shift', 'ctrl']
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2375 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2376 BOLD: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2377 key: 66,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2378 mods: ['shift', 'ctrl']
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2379 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2380 ITALIC: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2381 key: 73,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2382 mods: ['shift', 'ctrl']
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2383 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2384 UNDERLINE: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2385 key: 85,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2386 mods: ['shift', 'ctrl']
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2387 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2388 UNDO: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2389 key: 90,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2390 mods: ['ctrl']
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2391 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2392 REDO: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2393 key: 90,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2394 mods: ['shift', 'ctrl']
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2395 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2396 JUSTIFY_LEFT: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2397 key: 219,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2398 mods: ['shift', 'ctrl']
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2399 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2400 JUSTIFY_CENTER: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2401 key: 220,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2402 mods: ['shift', 'ctrl']
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2403 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2404 JUSTIFY_RIGHT: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2405 key: 221,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2406 mods: ['shift', 'ctrl']
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2407 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2408 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2409 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2410 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2411 * @method _cleanClassName
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2412 * @description Makes a useable classname from dynamic data, by dropping it to lowercase and replacing spaces with -'s.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2413 * @param {String} str The classname to clean up
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2414 * @return {String}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2415 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2416 _cleanClassName: function(str) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2417 return str.replace(/ /g, '-').toLowerCase();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2418 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2419 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2420 * @property _textarea
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2421 * @description Flag to determine if we are using a textarea or an HTML Node.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2422 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2423 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2424 _textarea: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2425 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2426 * @property _docType
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2427 * @description The DOCTYPE to use in the editable container.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2428 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2429 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2430 _docType: '<!DOCTYPE HTML PUBLIC "-/'+'/W3C/'+'/DTD HTML 4.01/'+'/EN" "http:/'+'/www.w3.org/TR/html4/strict.dtd">',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2431 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2432 * @property editorDirty
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2433 * @description This flag will be set when certain things in the Editor happen. It is to be used by the developer to check to see if content has changed.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2434 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2435 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2436 editorDirty: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2437 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2438 * @property _defaultCSS
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2439 * @description The default CSS used in the config for 'css'. This way you can add to the config like this: { css: YAHOO.widget.SimpleEditor.prototype._defaultCSS + 'ADD MYY CSS HERE' }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2440 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2441 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2442 _defaultCSS: 'html { height: 95%; } body { padding: 7px; background-color: #fff; font: 13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; } a, a:visited, a:hover { color: blue !important; text-decoration: underline !important; cursor: text !important; } .warning-localfile { border-bottom: 1px dashed red !important; } .yui-busy { cursor: wait !important; } img.selected { border: 2px dotted #808080; } img { cursor: pointer !important; border: none; } body.ptags.webkit div.yui-wk-p { margin: 11px 0; } body.ptags.webkit div.yui-wk-div { margin: 0; }',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2443 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2444 * @property _defaultToolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2445 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2446 * @description Default toolbar config.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2447 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2448 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2449 _defaultToolbar: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2450 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2451 * @property _lastButton
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2452 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2453 * @description The last button pressed, so we don't disable it.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2454 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2455 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2456 _lastButton: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2457 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2458 * @property _baseHREF
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2459 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2460 * @description The base location of the editable page (this page) so that relative paths for image work.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2461 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2462 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2463 _baseHREF: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2464 var href = document.location.href;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2465 if (href.indexOf('?') !== -1) { //Remove the query string
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2466 href = href.substring(0, href.indexOf('?'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2467 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2468 href = href.substring(0, href.lastIndexOf('/')) + '/';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2469 return href;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2470 }(),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2471 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2472 * @property _lastImage
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2473 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2474 * @description Safari reference for the last image selected (for styling as selected).
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2475 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2476 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2477 _lastImage: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2478 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2479 * @property _blankImageLoaded
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2480 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2481 * @description Don't load the blank image more than once..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2482 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2483 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2484 _blankImageLoaded: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2485 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2486 * @property _fixNodesTimer
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2487 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2488 * @description Holder for the fixNodes timer
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2489 * @type Date
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2490 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2491 _fixNodesTimer: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2492 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2493 * @property _nodeChangeTimer
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2494 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2495 * @description Holds a reference to the nodeChange setTimeout call
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2496 * @type Number
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2497 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2498 _nodeChangeTimer: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2499 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2500 * @property _nodeChangeDelayTimer
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2501 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2502 * @description Holds a reference to the nodeChangeDelay setTimeout call
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2503 * @type Number
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2504 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2505 _nodeChangeDelayTimer: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2506 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2507 * @property _lastNodeChangeEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2508 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2509 * @description Flag to determine the last event that fired a node change
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2510 * @type Event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2511 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2512 _lastNodeChangeEvent: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2513 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2514 * @property _lastNodeChange
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2515 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2516 * @description Flag to determine when the last node change was fired
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2517 * @type Date
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2518 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2519 _lastNodeChange: 0,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2520 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2521 * @property _rendered
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2522 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2523 * @description Flag to determine if editor has been rendered or not
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2524 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2525 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2526 _rendered: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2527 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2528 * @property DOMReady
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2529 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2530 * @description Flag to determine if DOM is ready or not
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2531 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2532 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2533 DOMReady: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2534 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2535 * @property _selection
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2536 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2537 * @description Holder for caching iframe selections
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2538 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2539 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2540 _selection: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2541 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2542 * @property _mask
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2543 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2544 * @description DOM Element holder for the editor Mask when disabled
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2545 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2546 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2547 _mask: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2548 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2549 * @property _showingHiddenElements
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2550 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2551 * @description Status of the hidden elements button
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2552 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2553 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2554 _showingHiddenElements: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2555 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2556 * @property currentWindow
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2557 * @description A reference to the currently open EditorWindow
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2558 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2559 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2560 currentWindow: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2561 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2562 * @property currentEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2563 * @description A reference to the current editor event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2564 * @type Event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2565 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2566 currentEvent: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2567 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2568 * @property operaEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2569 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2570 * @description setTimeout holder for Opera and Image DoubleClick event..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2571 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2572 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2573 operaEvent: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2574 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2575 * @property currentFont
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2576 * @description A reference to the last font selected from the Toolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2577 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2578 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2579 currentFont: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2580 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2581 * @property currentElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2582 * @description A reference to the current working element in the editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2583 * @type Array
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2584 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2585 currentElement: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2586 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2587 * @property dompath
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2588 * @description A reference to the dompath container for writing the current working dom path to.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2589 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2590 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2591 dompath: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2592 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2593 * @property beforeElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2594 * @description A reference to the H2 placed before the editor for Accessibilty.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2595 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2596 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2597 beforeElement: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2598 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2599 * @property afterElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2600 * @description A reference to the H2 placed after the editor for Accessibilty.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2601 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2602 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2603 afterElement: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2604 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2605 * @property invalidHTML
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2606 * @description Contains a list of HTML elements that are invalid inside the editor. They will be removed when they are found. If you set the value of a key to "{ keepContents: true }", then the element will be replaced with a yui-non span to be filtered out when cleanHTML is called. The only tag that is ignored here is the span tag as it will force the Editor into a loop and freeze the browser. However.. all of these tags will be removed in the cleanHTML routine.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2607 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2608 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2609 invalidHTML: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2610 form: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2611 input: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2612 button: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2613 select: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2614 link: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2615 html: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2616 body: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2617 iframe: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2618 script: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2619 style: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2620 textarea: true
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2621 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2622 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2623 * @property toolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2624 * @description Local property containing the <a href="YAHOO.widget.Toolbar.html">YAHOO.widget.Toolbar</a> instance
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2625 * @type <a href="YAHOO.widget.Toolbar.html">YAHOO.widget.Toolbar</a>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2626 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2627 toolbar: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2628 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2629 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2630 * @property _contentTimer
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2631 * @description setTimeout holder for documentReady check
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2632 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2633 _contentTimer: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2634 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2635 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2636 * @property _contentTimerMax
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2637 * @description The number of times the loaded content should be checked before giving up. Default: 500
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2638 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2639 _contentTimerMax: 500,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2640 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2641 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2642 * @property _contentTimerCounter
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2643 * @description Counter to check the number of times the body is polled for before giving up
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2644 * @type Number
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2645 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2646 _contentTimerCounter: 0,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2647 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2648 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2649 * @property _disabled
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2650 * @description The Toolbar items that should be disabled if there is no selection present in the editor.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2651 * @type Array
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2652 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2653 _disabled: [ 'createlink', 'fontname', 'fontsize', 'forecolor', 'backcolor' ],
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2654 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2655 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2656 * @property _alwaysDisabled
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2657 * @description The Toolbar items that should ALWAYS be disabled event if there is a selection present in the editor.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2658 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2659 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2660 _alwaysDisabled: { undo: true, redo: true },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2661 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2662 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2663 * @property _alwaysEnabled
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2664 * @description The Toolbar items that should ALWAYS be enabled event if there isn't a selection present in the editor.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2665 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2666 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2667 _alwaysEnabled: { },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2668 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2669 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2670 * @property _semantic
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2671 * @description The Toolbar commands that we should attempt to make tags out of instead of using styles.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2672 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2673 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2674 _semantic: { 'bold': true, 'italic' : true, 'underline' : true },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2675 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2676 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2677 * @property _tag2cmd
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2678 * @description A tag map of HTML tags to convert to the different types of commands so we can select the proper toolbar button.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2679 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2680 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2681 _tag2cmd: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2682 'b': 'bold',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2683 'strong': 'bold',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2684 'i': 'italic',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2685 'em': 'italic',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2686 'u': 'underline',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2687 'sup': 'superscript',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2688 'sub': 'subscript',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2689 'img': 'insertimage',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2690 'a' : 'createlink',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2691 'ul' : 'insertunorderedlist',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2692 'ol' : 'insertorderedlist'
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2693 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2694
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2695 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2696 * @private _createIframe
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2697 * @description Creates the DOM and YUI Element for the iFrame editor area.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2698 * @param {String} id The string ID to prefix the iframe with
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2699 * @return {Object} iFrame object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2700 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2701 _createIframe: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2702 var ifrmDom = document.createElement('iframe');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2703 ifrmDom.id = this.get('id') + '_editor';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2704 var config = {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2705 border: '0',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2706 frameBorder: '0',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2707 marginWidth: '0',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2708 marginHeight: '0',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2709 leftMargin: '0',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2710 topMargin: '0',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2711 allowTransparency: 'true',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2712 width: '100%'
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2713 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2714 if (this.get('autoHeight')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2715 config.scrolling = 'no';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2716 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2717 for (var i in config) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2718 if (Lang.hasOwnProperty(config, i)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2719 ifrmDom.setAttribute(i, config[i]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2720 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2721 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2722 var isrc = 'javascript:;';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2723 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2724 //isrc = 'about:blank';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2725 //TODO - Check this, I have changed it before..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2726 isrc = 'javascript:false;';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2727 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2728 ifrmDom.setAttribute('src', isrc);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2729 var ifrm = new YAHOO.util.Element(ifrmDom);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2730 ifrm.setStyle('visibility', 'hidden');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2731 return ifrm;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2732 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2733 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2734 * @private _isElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2735 * @description Checks to see if an Element reference is a valid one and has a certain tag type
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2736 * @param {HTMLElement} el The element to check
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2737 * @param {String} tag The tag that the element needs to be
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2738 * @return {Boolean}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2739 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2740 _isElement: function(el, tag) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2741 if (el && el.tagName && (el.tagName.toLowerCase() == tag)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2742 return true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2743 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2744 if (el && el.getAttribute && (el.getAttribute('tag') == tag)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2745 return true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2746 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2747 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2748 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2749 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2750 * @private _hasParent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2751 * @description Checks to see if an Element reference or one of it's parents is a valid one and has a certain tag type
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2752 * @param {HTMLElement} el The element to check
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2753 * @param {String} tag The tag that the element needs to be
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2754 * @return HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2755 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2756 _hasParent: function(el, tag) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2757 if (!el || !el.parentNode) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2758 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2759 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2760
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2761 while (el.parentNode) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2762 if (this._isElement(el, tag)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2763 return el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2764 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2765 if (el.parentNode) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2766 el = el.parentNode;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2767 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2768 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2769 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2770 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2771 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2772 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2773 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2774 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2775 * @method _getDoc
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2776 * @description Get the Document of the IFRAME
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2777 * @return {Object}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2778 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2779 _getDoc: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2780 var value = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2781 try {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2782 if (this.get('iframe').get('element').contentWindow.document) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2783 value = this.get('iframe').get('element').contentWindow.document;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2784 return value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2785 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2786 } catch (e) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2787 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2788 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2789 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2790 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2791 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2792 * @method _getWindow
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2793 * @description Get the Window of the IFRAME
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2794 * @return {Object}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2795 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2796 _getWindow: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2797 return this.get('iframe').get('element').contentWindow;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2798 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2799 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2800 * @method focus
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2801 * @description Attempt to set the focus of the iframes window.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2802 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2803 focus: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2804 this._getWindow().focus();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2805 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2806 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2807 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2808 * @depreciated - This should not be used, moved to this.focus();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2809 * @method _focusWindow
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2810 * @description Attempt to set the focus of the iframes window.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2811 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2812 _focusWindow: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2813 this.focus();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2814 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2815 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2816 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2817 * @method _hasSelection
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2818 * @description Determines if there is a selection in the editor document.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2819 * @return {Boolean}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2820 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2821 _hasSelection: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2822 var sel = this._getSelection();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2823 var range = this._getRange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2824 var hasSel = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2825
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2826 if (!sel || !range) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2827 return hasSel;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2828 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2829
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2830 //Internet Explorer
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2831 if (this.browser.ie || this.browser.opera) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2832 if (range.text) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2833 hasSel = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2834 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2835 if (range.html) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2836 hasSel = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2837 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2838 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2839 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2840 if (sel+'' !== '') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2841 hasSel = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2842 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2843 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2844 if (sel && (sel.toString() !== '') && (sel !== undefined)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2845 hasSel = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2846 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2847 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2848 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2849 return hasSel;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2850 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2851 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2852 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2853 * @method _getSelection
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2854 * @description Handles the different selection objects across the A-Grade list.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2855 * @return {Object} Selection Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2856 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2857 _getSelection: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2858 var _sel = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2859 if (this._getDoc() && this._getWindow()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2860 if (this._getDoc().selection) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2861 _sel = this._getDoc().selection;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2862 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2863 _sel = this._getWindow().getSelection();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2864 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2865 //Handle Safari's lack of Selection Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2866 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2867 if (_sel.baseNode) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2868 this._selection = {};
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2869 this._selection.baseNode = _sel.baseNode;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2870 this._selection.baseOffset = _sel.baseOffset;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2871 this._selection.extentNode = _sel.extentNode;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2872 this._selection.extentOffset = _sel.extentOffset;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2873 } else if (this._selection !== null) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2874 _sel = this._getWindow().getSelection();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2875 _sel.setBaseAndExtent(
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2876 this._selection.baseNode,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2877 this._selection.baseOffset,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2878 this._selection.extentNode,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2879 this._selection.extentOffset);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2880 this._selection = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2881 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2882 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2883 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2884 return _sel;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2885 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2886 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2887 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2888 * @method _selectNode
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2889 * @description Places the highlight around a given node
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2890 * @param {HTMLElement} node The node to select
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2891 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2892 _selectNode: function(node, collapse) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2893 if (!node) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2894 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2895 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2896 var sel = this._getSelection(),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2897 range = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2898
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2899 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2900 try { //IE freaks out here sometimes..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2901 range = this._getDoc().body.createTextRange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2902 range.moveToElementText(node);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2903 range.select();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2904 } catch (e) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2905 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2906 } else if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2907 if (collapse) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2908 sel.setBaseAndExtent(node, 1, node, node.innerText.length);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2909 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2910 sel.setBaseAndExtent(node, 0, node, node.innerText.length);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2911 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2912 } else if (this.browser.opera) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2913 sel = this._getWindow().getSelection();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2914 range = this._getDoc().createRange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2915 range.selectNode(node);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2916 sel.removeAllRanges();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2917 sel.addRange(range);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2918 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2919 range = this._getDoc().createRange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2920 range.selectNodeContents(node);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2921 sel.removeAllRanges();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2922 sel.addRange(range);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2923 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2924 //TODO - Check Performance
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2925 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2926 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2927 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2928 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2929 * @method _getRange
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2930 * @description Handles the different range objects across the A-Grade list.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2931 * @return {Object} Range Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2932 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2933 _getRange: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2934 var sel = this._getSelection();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2935
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2936 if (sel === null) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2937 return null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2938 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2939
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2940 if (this.browser.webkit && !sel.getRangeAt) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2941 var _range = this._getDoc().createRange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2942 try {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2943 _range.setStart(sel.anchorNode, sel.anchorOffset);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2944 _range.setEnd(sel.focusNode, sel.focusOffset);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2945 } catch (e) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2946 _range = this._getWindow().getSelection()+'';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2947 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2948 return _range;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2949 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2950
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2951 if (this.browser.ie || this.browser.opera) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2952 try {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2953 return sel.createRange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2954 } catch (e2) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2955 return null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2956 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2957 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2958
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2959 if (sel.rangeCount > 0) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2960 return sel.getRangeAt(0);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2961 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2962 return null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2963 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2964 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2965 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2966 * @method _setDesignMode
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2967 * @description Sets the designMode property of the iFrame document's body.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2968 * @param {String} state This should be either on or off
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2969 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2970 _setDesignMode: function(state) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2971 if (this.get('setDesignMode')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2972 try {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2973 this._getDoc().designMode = ((state.toLowerCase() == 'off') ? 'off' : 'on');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2974 } catch(e) { }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2975 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2976 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2977 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2978 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2979 * @method _toggleDesignMode
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2980 * @description Toggles the designMode property of the iFrame document on and off.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2981 * @return {String} The state that it was set to.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2982 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2983 _toggleDesignMode: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2984 var _dMode = this._getDoc().designMode,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2985 _state = ((_dMode.toLowerCase() == 'on') ? 'off' : 'on');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2986 this._setDesignMode(_state);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2987 return _state;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2988 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2989 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2990 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2991 * @property _focused
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2992 * @description Holder for trapping focus/blur state and prevent double events
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2993 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2994 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2995 _focused: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2996 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2997 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2998 * @method _handleFocus
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
2999 * @description Handles the focus of the iframe. Note, this is window focus event, not an Editor focus event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3000 * @param {Event} e The DOM Event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3001 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3002 _handleFocus: function(e) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3003 if (!this._focused) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3004 this._focused = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3005 this.fireEvent('editorWindowFocus', { type: 'editorWindowFocus', target: this });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3006 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3007 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3008 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3009 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3010 * @method _handleBlur
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3011 * @description Handles the blur of the iframe. Note, this is window blur event, not an Editor blur event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3012 * @param {Event} e The DOM Event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3013 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3014 _handleBlur: function(e) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3015 if (this._focused) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3016 this._focused = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3017 this.fireEvent('editorWindowBlur', { type: 'editorWindowBlur', target: this });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3018 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3019 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3020 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3021 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3022 * @method _initEditorEvents
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3023 * @description This method sets up the listeners on the Editors document.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3024 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3025 _initEditorEvents: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3026 //Setup Listeners on iFrame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3027 var doc = this._getDoc(),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3028 win = this._getWindow();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3029
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3030 Event.on(doc, 'mouseup', this._handleMouseUp, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3031 Event.on(doc, 'mousedown', this._handleMouseDown, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3032 Event.on(doc, 'click', this._handleClick, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3033 Event.on(doc, 'dblclick', this._handleDoubleClick, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3034 Event.on(doc, 'keypress', this._handleKeyPress, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3035 Event.on(doc, 'keyup', this._handleKeyUp, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3036 Event.on(doc, 'keydown', this._handleKeyDown, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3037 /* TODO -- Everyone but Opera works here..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3038 Event.on(doc, 'paste', function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3039 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3040 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3041
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3042 //Focus and blur..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3043 Event.on(win, 'focus', this._handleFocus, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3044 Event.on(win, 'blur', this._handleBlur, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3045 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3046 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3047 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3048 * @method _removeEditorEvents
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3049 * @description This method removes the listeners on the Editors document (for disabling).
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3050 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3051 _removeEditorEvents: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3052 //Remove Listeners on iFrame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3053 var doc = this._getDoc(),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3054 win = this._getWindow();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3055
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3056 Event.removeListener(doc, 'mouseup', this._handleMouseUp, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3057 Event.removeListener(doc, 'mousedown', this._handleMouseDown, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3058 Event.removeListener(doc, 'click', this._handleClick, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3059 Event.removeListener(doc, 'dblclick', this._handleDoubleClick, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3060 Event.removeListener(doc, 'keypress', this._handleKeyPress, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3061 Event.removeListener(doc, 'keyup', this._handleKeyUp, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3062 Event.removeListener(doc, 'keydown', this._handleKeyDown, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3063
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3064 //Focus and blur..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3065 Event.removeListener(win, 'focus', this._handleFocus, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3066 Event.removeListener(win, 'blur', this._handleBlur, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3067 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3068 _fixWebkitDivs: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3069 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3070 var divs = this._getDoc().body.getElementsByTagName('div');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3071 Dom.addClass(divs, 'yui-wk-div');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3072 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3073 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3074 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3075 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3076 * @method _initEditor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3077 * @param {Boolean} raw Don't add events.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3078 * @description This method is fired from _checkLoaded when the document is ready. It turns on designMode and set's up the listeners.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3079 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3080 _initEditor: function(raw) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3081 if (this._editorInit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3082 return;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3083 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3084 this._editorInit = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3085 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3086 this._getDoc().body.style.margin = '0';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3087 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3088 if (!this.get('disabled')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3089 this._setDesignMode('on');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3090 this._contentTimerCounter = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3091 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3092 if (!this._getDoc().body) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3093 this._contentTimerCounter = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3094 this._editorInit = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3095 this._checkLoaded();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3096 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3097 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3098
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3099 if (!raw) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3100 this.toolbar.on('buttonClick', this._handleToolbarClick, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3101 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3102 if (!this.get('disabled')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3103 this._initEditorEvents();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3104 this.toolbar.set('disabled', false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3105 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3106
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3107 if (raw) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3108 this.fireEvent('editorContentReloaded', { type: 'editorreloaded', target: this });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3109 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3110 this.fireEvent('editorContentLoaded', { type: 'editorLoaded', target: this });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3111 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3112 this._fixWebkitDivs();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3113 if (this.get('dompath')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3114 var self = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3115 setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3116 self._writeDomPath.call(self);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3117 self._setupResize.call(self);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3118 }, 150);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3119 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3120 var br = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3121 for (var i in this.browser) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3122 if (this.browser[i]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3123 br.push(i);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3124 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3125 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3126 if (this.get('ptags')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3127 br.push('ptags');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3128 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3129 Dom.addClass(this._getDoc().body, br.join(' '));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3130 this.nodeChange(true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3131 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3132 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3133 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3134 * @method _checkLoaded
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3135 * @param {Boolean} raw Don't add events.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3136 * @description Called from a setTimeout loop to check if the iframes body.onload event has fired, then it will init the editor.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3137 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3138 _checkLoaded: function(raw) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3139 this._editorInit = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3140 this._contentTimerCounter++;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3141 if (this._contentTimer) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3142 clearTimeout(this._contentTimer);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3143 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3144 if (this._contentTimerCounter > this._contentTimerMax) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3145 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3146 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3147 var init = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3148 try {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3149 if (this._getDoc() && this._getDoc().body) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3150 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3151 if (this._getDoc().body.readyState == 'complete') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3152 init = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3153 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3154 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3155 if (this._getDoc().body._rteLoaded === true) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3156 init = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3157 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3158 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3159 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3160 } catch (e) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3161 init = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3162 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3163
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3164 if (init === true) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3165 //The onload event has fired, clean up after ourselves and fire the _initEditor method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3166 this._initEditor(raw);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3167 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3168 var self = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3169 this._contentTimer = setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3170 self._checkLoaded.call(self, raw);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3171 }, 20);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3172 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3173 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3174 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3175 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3176 * @method _setInitialContent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3177 * @param {Boolean} raw Don't add events.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3178 * @description This method will open the iframes content document and write the textareas value into it, then start the body.onload checking.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3179 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3180 _setInitialContent: function(raw) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3181
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3182 var value = ((this._textarea) ? this.get('element').value : this.get('element').innerHTML),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3183 doc = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3184
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3185 if (value === '') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3186 value = '<br>';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3187 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3188
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3189 var html = Lang.substitute(this.get('html'), {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3190 TITLE: this.STR_TITLE,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3191 CONTENT: this._cleanIncomingHTML(value),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3192 CSS: this.get('css'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3193 HIDDEN_CSS: ((this.get('hiddencss')) ? this.get('hiddencss') : '/* No Hidden CSS */'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3194 EXTRA_CSS: ((this.get('extracss')) ? this.get('extracss') : '/* No Extra CSS */')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3195 }),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3196 check = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3197
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3198 html = html.replace(/RIGHT_BRACKET/gi, '{');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3199 html = html.replace(/LEFT_BRACKET/gi, '}');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3200
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3201 if (document.compatMode != 'BackCompat') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3202 html = this._docType + "\n" + html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3203 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3204 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3205
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3206 if (this.browser.ie || this.browser.webkit || this.browser.opera || (navigator.userAgent.indexOf('Firefox/1.5') != -1)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3207 //Firefox 1.5 doesn't like setting designMode on an document created with a data url
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3208 try {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3209 //Adobe AIR Code
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3210 if (this.browser.air) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3211 doc = this._getDoc().implementation.createHTMLDocument();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3212 var origDoc = this._getDoc();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3213 origDoc.open();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3214 origDoc.close();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3215 doc.open();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3216 doc.write(html);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3217 doc.close();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3218 var node = origDoc.importNode(doc.getElementsByTagName("html")[0], true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3219 origDoc.replaceChild(node, origDoc.getElementsByTagName("html")[0]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3220 origDoc.body._rteLoaded = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3221 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3222 doc = this._getDoc();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3223 doc.open();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3224 doc.write(html);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3225 doc.close();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3226 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3227 } catch (e) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3228 //Safari will only be here if we are hidden
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3229 check = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3230 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3231 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3232 //This keeps Firefox 2 from writing the iframe to history preserving the back buttons functionality
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3233 this.get('iframe').get('element').src = 'data:text/html;charset=utf-8,' + encodeURIComponent(html);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3234 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3235 this.get('iframe').setStyle('visibility', '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3236 if (check) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3237 this._checkLoaded(raw);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3238 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3239 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3240 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3241 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3242 * @method _setMarkupType
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3243 * @param {String} action The action to take. Possible values are: css, default or semantic
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3244 * @description This method will turn on/off the useCSS execCommand.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3245 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3246 _setMarkupType: function(action) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3247 switch (this.get('markup')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3248 case 'css':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3249 this._setEditorStyle(true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3250 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3251 case 'default':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3252 this._setEditorStyle(false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3253 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3254 case 'semantic':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3255 case 'xhtml':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3256 if (this._semantic[action]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3257 this._setEditorStyle(false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3258 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3259 this._setEditorStyle(true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3260 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3261 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3262 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3263 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3264 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3265 * Set the editor to use CSS instead of HTML
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3266 * @param {Booleen} stat True/False
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3267 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3268 _setEditorStyle: function(stat) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3269 try {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3270 this._getDoc().execCommand('useCSS', false, !stat);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3271 } catch (ex) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3272 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3273 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3274 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3275 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3276 * @method _getSelectedElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3277 * @description This method will attempt to locate the element that was last interacted with, either via selection, location or event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3278 * @return {HTMLElement} The currently selected element.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3279 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3280 _getSelectedElement: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3281 var doc = this._getDoc(),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3282 range = null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3283 sel = null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3284 elm = null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3285 check = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3286
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3287 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3288 this.currentEvent = this._getWindow().event; //Event utility assumes window.event, so we need to reset it to this._getWindow().event;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3289 range = this._getRange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3290 if (range) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3291 elm = range.item ? range.item(0) : range.parentElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3292 if (this._hasSelection()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3293 //TODO
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3294 //WTF.. Why can't I get an element reference here?!??!
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3295 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3296 if (elm === doc.body) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3297 elm = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3298 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3299 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3300 if ((this.currentEvent !== null) && (this.currentEvent.keyCode === 0)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3301 elm = Event.getTarget(this.currentEvent);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3302 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3303 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3304 sel = this._getSelection();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3305 range = this._getRange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3306
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3307 if (!sel || !range) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3308 return null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3309 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3310 //TODO
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3311 if (!this._hasSelection() && this.browser.webkit3) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3312 //check = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3313 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3314 if (this.browser.gecko) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3315 //Added in 2.6.0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3316 if (range.startContainer) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3317 if (range.startContainer.nodeType === 3) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3318 elm = range.startContainer.parentNode;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3319 } else if (range.startContainer.nodeType === 1) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3320 elm = range.startContainer;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3321 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3322 //Added in 2.7.0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3323 if (this.currentEvent) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3324 var tar = Event.getTarget(this.currentEvent);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3325 if (!this._isElement(tar, 'html')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3326 if (elm !== tar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3327 elm = tar;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3328 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3329 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3330 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3331 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3332 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3333
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3334 if (check) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3335 if (sel.anchorNode && (sel.anchorNode.nodeType == 3)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3336 if (sel.anchorNode.parentNode) { //next check parentNode
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3337 elm = sel.anchorNode.parentNode;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3338 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3339 if (sel.anchorNode.nextSibling != sel.focusNode.nextSibling) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3340 elm = sel.anchorNode.nextSibling;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3341 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3342 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3343 if (this._isElement(elm, 'br')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3344 elm = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3345 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3346 if (!elm) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3347 elm = range.commonAncestorContainer;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3348 if (!range.collapsed) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3349 if (range.startContainer == range.endContainer) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3350 if (range.startOffset - range.endOffset < 2) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3351 if (range.startContainer.hasChildNodes()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3352 elm = range.startContainer.childNodes[range.startOffset];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3353 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3354 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3355 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3356 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3357 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3358 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3359 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3360
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3361 if (this.currentEvent !== null) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3362 try {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3363 switch (this.currentEvent.type) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3364 case 'click':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3365 case 'mousedown':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3366 case 'mouseup':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3367 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3368 elm = Event.getTarget(this.currentEvent);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3369 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3370 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3371 default:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3372 //Do nothing
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3373 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3374 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3375 } catch (e) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3376 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3377 } else if ((this.currentElement && this.currentElement[0]) && (!this.browser.ie)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3378 //TODO is this still needed?
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3379 //elm = this.currentElement[0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3380 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3381
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3382
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3383 if (this.browser.opera || this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3384 if (this.currentEvent && !elm) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3385 elm = YAHOO.util.Event.getTarget(this.currentEvent);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3386 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3387 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3388 if (!elm || !elm.tagName) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3389 elm = doc.body;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3390 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3391 if (this._isElement(elm, 'html')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3392 //Safari sometimes gives us the HTML node back..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3393 elm = doc.body;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3394 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3395 if (this._isElement(elm, 'body')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3396 //make sure that body means this body not the parent..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3397 elm = doc.body;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3398 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3399 if (elm && !elm.parentNode) { //Not in document
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3400 elm = doc.body;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3401 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3402 if (elm === undefined) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3403 elm = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3404 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3405 return elm;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3406 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3407 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3408 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3409 * @method _getDomPath
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3410 * @description This method will attempt to build the DOM path from the currently selected element.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3411 * @param HTMLElement el The element to start with, if not provided _getSelectedElement is used
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3412 * @return {Array} An array of node references that will create the DOM Path.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3413 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3414 _getDomPath: function(el) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3415 if (!el) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3416 el = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3417 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3418 var domPath = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3419 while (el !== null) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3420 if (el.ownerDocument != this._getDoc()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3421 el = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3422 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3423 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3424 //Check to see if we get el.nodeName and nodeType
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3425 if (el.nodeName && el.nodeType && (el.nodeType == 1)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3426 domPath[domPath.length] = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3427 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3428
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3429 if (this._isElement(el, 'body')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3430 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3431 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3432
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3433 el = el.parentNode;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3434 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3435 if (domPath.length === 0) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3436 if (this._getDoc() && this._getDoc().body) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3437 domPath[0] = this._getDoc().body;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3438 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3439 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3440 return domPath.reverse();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3441 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3442 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3443 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3444 * @method _writeDomPath
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3445 * @description Write the current DOM path out to the dompath container below the editor.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3446 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3447 _writeDomPath: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3448 var path = this._getDomPath(),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3449 pathArr = [],
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3450 classPath = '',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3451 pathStr = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3452
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3453 for (var i = 0; i < path.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3454 var tag = path[i].tagName.toLowerCase();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3455 if ((tag == 'ol') && (path[i].type)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3456 tag += ':' + path[i].type;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3457 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3458 if (Dom.hasClass(path[i], 'yui-tag')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3459 tag = path[i].getAttribute('tag');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3460 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3461 if ((this.get('markup') == 'semantic') || (this.get('markup') == 'xhtml')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3462 switch (tag) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3463 case 'b': tag = 'strong'; break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3464 case 'i': tag = 'em'; break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3465 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3466 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3467 if (!Dom.hasClass(path[i], 'yui-non')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3468 if (Dom.hasClass(path[i], 'yui-tag')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3469 pathStr = tag;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3470 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3471 classPath = ((path[i].className !== '') ? '.' + path[i].className.replace(/ /g, '.') : '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3472 if ((classPath.indexOf('yui') != -1) || (classPath.toLowerCase().indexOf('apple-style-span') != -1)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3473 classPath = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3474 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3475 pathStr = tag + ((path[i].id) ? '#' + path[i].id : '') + classPath;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3476 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3477 switch (tag) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3478 case 'body':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3479 pathStr = 'body';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3480 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3481 case 'a':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3482 if (path[i].getAttribute('href', 2)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3483 pathStr += ':' + path[i].getAttribute('href', 2).replace('mailto:', '').replace('http:/'+'/', '').replace('https:/'+'/', ''); //May need to add others here ftp
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3484 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3485 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3486 case 'img':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3487 var h = path[i].height;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3488 var w = path[i].width;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3489 if (path[i].style.height) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3490 h = parseInt(path[i].style.height, 10);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3491 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3492 if (path[i].style.width) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3493 w = parseInt(path[i].style.width, 10);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3494 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3495 pathStr += '(' + w + 'x' + h + ')';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3496 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3497 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3498
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3499 if (pathStr.length > 10) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3500 pathStr = '<span title="' + pathStr + '">' + pathStr.substring(0, 10) + '...' + '</span>';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3501 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3502 pathStr = '<span title="' + pathStr + '">' + pathStr + '</span>';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3503 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3504 pathArr[pathArr.length] = pathStr;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3505 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3506 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3507 var str = pathArr.join(' ' + this.SEP_DOMPATH + ' ');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3508 //Prevent flickering
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3509 if (this.dompath.innerHTML != str) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3510 this.dompath.innerHTML = str;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3511 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3512 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3513 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3514 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3515 * @method _fixNodes
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3516 * @description Fix href and imgs as well as remove invalid HTML.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3517 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3518 _fixNodes: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3519 try {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3520 var doc = this._getDoc(),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3521 els = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3522
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3523 for (var v in this.invalidHTML) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3524 if (YAHOO.lang.hasOwnProperty(this.invalidHTML, v)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3525 if (v.toLowerCase() != 'span') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3526 var tags = doc.body.getElementsByTagName(v);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3527 if (tags.length) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3528 for (var i = 0; i < tags.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3529 els.push(tags[i]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3530 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3531 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3532 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3533 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3534 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3535 for (var h = 0; h < els.length; h++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3536 if (els[h].parentNode) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3537 if (Lang.isObject(this.invalidHTML[els[h].tagName.toLowerCase()]) && this.invalidHTML[els[h].tagName.toLowerCase()].keepContents) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3538 this._swapEl(els[h], 'span', function(el) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3539 el.className = 'yui-non';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3540 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3541 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3542 els[h].parentNode.removeChild(els[h]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3543 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3544 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3545 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3546 var imgs = this._getDoc().getElementsByTagName('img');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3547 Dom.addClass(imgs, 'yui-img');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3548 } catch(e) {}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3549 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3550 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3551 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3552 * @method _isNonEditable
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3553 * @param Event ev The Dom event being checked
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3554 * @description Method is called at the beginning of all event handlers to check if this element or a parent element has the class yui-noedit (this.CLASS_NOEDIT) applied.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3555 * If it does, then this method will stop the event and return true. The event handlers will then return false and stop the nodeChange from occuring. This method will also
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3556 * disable and enable the Editor's toolbar based on the noedit state.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3557 * @return Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3558 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3559 _isNonEditable: function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3560 if (this.get('allowNoEdit')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3561 var el = Event.getTarget(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3562 if (this._isElement(el, 'html')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3563 el = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3564 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3565 var path = this._getDomPath(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3566 for (var i = (path.length - 1); i > -1; i--) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3567 if (Dom.hasClass(path[i], this.CLASS_NOEDIT)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3568 //if (this.toolbar.get('disabled') === false) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3569 // this.toolbar.set('disabled', true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3570 //}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3571 try {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3572 this._getDoc().execCommand('enableObjectResizing', false, 'false');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3573 } catch (e) {}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3574 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3575 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3576 return true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3577 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3578 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3579 //if (this.toolbar.get('disabled') === true) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3580 //Should only happen once..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3581 //this.toolbar.set('disabled', false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3582 try {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3583 this._getDoc().execCommand('enableObjectResizing', false, 'true');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3584 } catch (e2) {}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3585 //}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3586 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3587 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3588 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3589 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3590 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3591 * @method _setCurrentEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3592 * @param {Event} ev The event to cache
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3593 * @description Sets the current event property
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3594 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3595 _setCurrentEvent: function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3596 this.currentEvent = ev;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3597 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3598 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3599 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3600 * @method _handleClick
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3601 * @param {Event} ev The event we are working on.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3602 * @description Handles all click events inside the iFrame document.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3603 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3604 _handleClick: function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3605 var ret = this.fireEvent('beforeEditorClick', { type: 'beforeEditorClick', target: this, ev: ev });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3606 if (ret === false) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3607 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3608 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3609 if (this._isNonEditable(ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3610 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3611 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3612 this._setCurrentEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3613 if (this.currentWindow) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3614 this.closeWindow();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3615 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3616 if (this.currentWindow) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3617 this.closeWindow();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3618 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3619 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3620 var tar =Event.getTarget(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3621 if (this._isElement(tar, 'a') || this._isElement(tar.parentNode, 'a')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3622 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3623 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3624 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3625 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3626 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3627 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3628 this.fireEvent('editorClick', { type: 'editorClick', target: this, ev: ev });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3629 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3630 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3631 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3632 * @method _handleMouseUp
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3633 * @param {Event} ev The event we are working on.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3634 * @description Handles all mouseup events inside the iFrame document.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3635 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3636 _handleMouseUp: function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3637 var ret = this.fireEvent('beforeEditorMouseUp', { type: 'beforeEditorMouseUp', target: this, ev: ev });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3638 if (ret === false) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3639 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3640 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3641 if (this._isNonEditable(ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3642 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3643 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3644 //Don't set current event for mouseup.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3645 //It get's fired after a menu is closed and gives up a bogus event to work with
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3646 //this._setCurrentEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3647 var self = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3648 if (this.browser.opera) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3649 /*
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3650 * @knownissue Opera appears to stop the MouseDown, Click and DoubleClick events on an image inside of a document with designMode on..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3651 * @browser Opera
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3652 * @description This work around traps the MouseUp event and sets a timer to check if another MouseUp event fires in so many seconds. If another event is fired, they we internally fire the DoubleClick event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3653 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3654 var sel = Event.getTarget(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3655 if (this._isElement(sel, 'img')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3656 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3657 if (this.operaEvent) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3658 clearTimeout(this.operaEvent);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3659 this.operaEvent = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3660 this._handleDoubleClick(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3661 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3662 this.operaEvent = window.setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3663 self.operaEvent = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3664 }, 700);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3665 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3666 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3667 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3668 //This will stop Safari from selecting the entire document if you select all the text in the editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3669 if (this.browser.webkit || this.browser.opera) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3670 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3671 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3672 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3673 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3674 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3675 this.fireEvent('editorMouseUp', { type: 'editorMouseUp', target: this, ev: ev });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3676 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3677 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3678 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3679 * @method _handleMouseDown
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3680 * @param {Event} ev The event we are working on.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3681 * @description Handles all mousedown events inside the iFrame document.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3682 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3683 _handleMouseDown: function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3684 var ret = this.fireEvent('beforeEditorMouseDown', { type: 'beforeEditorMouseDown', target: this, ev: ev });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3685 if (ret === false) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3686 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3687 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3688 if (this._isNonEditable(ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3689 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3690 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3691 this._setCurrentEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3692 var sel = Event.getTarget(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3693 if (this.browser.webkit && this._hasSelection()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3694 var _sel = this._getSelection();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3695 if (!this.browser.webkit3) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3696 _sel.collapse(true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3697 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3698 _sel.collapseToStart();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3699 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3700 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3701 if (this.browser.webkit && this._lastImage) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3702 Dom.removeClass(this._lastImage, 'selected');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3703 this._lastImage = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3704 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3705 if (this._isElement(sel, 'img') || this._isElement(sel, 'a')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3706 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3707 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3708 if (this._isElement(sel, 'img')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3709 Dom.addClass(sel, 'selected');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3710 this._lastImage = sel;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3711 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3712 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3713 if (this.currentWindow) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3714 this.closeWindow();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3715 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3716 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3717 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3718 this.fireEvent('editorMouseDown', { type: 'editorMouseDown', target: this, ev: ev });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3719 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3720 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3721 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3722 * @method _handleDoubleClick
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3723 * @param {Event} ev The event we are working on.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3724 * @description Handles all doubleclick events inside the iFrame document.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3725 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3726 _handleDoubleClick: function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3727 var ret = this.fireEvent('beforeEditorDoubleClick', { type: 'beforeEditorDoubleClick', target: this, ev: ev });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3728 if (ret === false) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3729 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3730 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3731 if (this._isNonEditable(ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3732 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3733 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3734 this._setCurrentEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3735 var sel = Event.getTarget(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3736 if (this._isElement(sel, 'img')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3737 this.currentElement[0] = sel;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3738 this.toolbar.fireEvent('insertimageClick', { type: 'insertimageClick', target: this.toolbar });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3739 this.fireEvent('afterExecCommand', { type: 'afterExecCommand', target: this });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3740 } else if (this._hasParent(sel, 'a')) { //Handle elements inside an a
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3741 this.currentElement[0] = this._hasParent(sel, 'a');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3742 this.toolbar.fireEvent('createlinkClick', { type: 'createlinkClick', target: this.toolbar });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3743 this.fireEvent('afterExecCommand', { type: 'afterExecCommand', target: this });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3744 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3745 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3746 this.fireEvent('editorDoubleClick', { type: 'editorDoubleClick', target: this, ev: ev });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3747 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3748 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3749 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3750 * @method _handleKeyUp
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3751 * @param {Event} ev The event we are working on.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3752 * @description Handles all keyup events inside the iFrame document.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3753 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3754 _handleKeyUp: function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3755 var ret = this.fireEvent('beforeEditorKeyUp', { type: 'beforeEditorKeyUp', target: this, ev: ev });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3756 if (ret === false) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3757 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3758 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3759 if (this._isNonEditable(ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3760 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3761 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3762 this._storeUndo();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3763 this._setCurrentEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3764 switch (ev.keyCode) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3765 case this._keyMap.SELECT_ALL.key:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3766 if (this._checkKey(this._keyMap.SELECT_ALL, ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3767 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3768 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3769 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3770 case 32: //Space Bar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3771 case 35: //End
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3772 case 36: //Home
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3773 case 37: //Left Arrow
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3774 case 38: //Up Arrow
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3775 case 39: //Right Arrow
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3776 case 40: //Down Arrow
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3777 case 46: //Forward Delete
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3778 case 8: //Delete
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3779 case this._keyMap.CLOSE_WINDOW.key: //W key if window is open
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3780 if ((ev.keyCode == this._keyMap.CLOSE_WINDOW.key) && this.currentWindow) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3781 if (this._checkKey(this._keyMap.CLOSE_WINDOW, ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3782 this.closeWindow();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3783 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3784 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3785 if (!this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3786 if (this._nodeChangeTimer) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3787 clearTimeout(this._nodeChangeTimer);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3788 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3789 var self = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3790 this._nodeChangeTimer = setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3791 self._nodeChangeTimer = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3792 self.nodeChange.call(self);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3793 }, 100);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3794 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3795 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3796 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3797 this.editorDirty = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3798 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3799 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3800 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3801 this.fireEvent('editorKeyUp', { type: 'editorKeyUp', target: this, ev: ev });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3802 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3803 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3804 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3805 * @method _handleKeyPress
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3806 * @param {Event} ev The event we are working on.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3807 * @description Handles all keypress events inside the iFrame document.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3808 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3809 _handleKeyPress: function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3810 var ret = this.fireEvent('beforeEditorKeyPress', { type: 'beforeEditorKeyPress', target: this, ev: ev });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3811 if (ret === false) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3812 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3813 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3814
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3815 if (this.get('allowNoEdit')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3816 //if (ev && ev.keyCode && ((ev.keyCode == 46) || ev.keyCode == 63272)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3817 if (ev && ev.keyCode && (ev.keyCode == 63272)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3818 //Forward delete key
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3819 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3820 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3821 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3822 if (this._isNonEditable(ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3823 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3824 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3825 this._setCurrentEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3826 this._storeUndo();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3827 if (this.browser.opera) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3828 if (ev.keyCode === 13) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3829 var tar = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3830 if (!this._isElement(tar, 'li')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3831 this.execCommand('inserthtml', '<br>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3832 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3833 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3834 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3835 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3836 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3837 if (!this.browser.webkit3) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3838 if (ev.keyCode && (ev.keyCode == 122) && (ev.metaKey)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3839 //This is CMD + z (for undo)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3840 if (this._hasParent(this._getSelectedElement(), 'li')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3841 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3842 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3843 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3844 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3845 this._listFix(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3846 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3847 this._fixListDupIds();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3848 this.fireEvent('editorKeyPress', { type: 'editorKeyPress', target: this, ev: ev });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3849 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3850 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3851 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3852 * @method _handleKeyDown
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3853 * @param {Event} ev The event we are working on.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3854 * @description Handles all keydown events inside the iFrame document.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3855 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3856 _handleKeyDown: function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3857 var ret = this.fireEvent('beforeEditorKeyDown', { type: 'beforeEditorKeyDown', target: this, ev: ev });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3858 if (ret === false) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3859 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3860 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3861 var tar = null, _range = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3862 if (this._isNonEditable(ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3863 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3864 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3865 this._setCurrentEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3866 if (this.currentWindow) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3867 this.closeWindow();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3868 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3869 if (this.currentWindow) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3870 this.closeWindow();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3871 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3872 var doExec = false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3873 action = null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3874 value = null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3875 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3876
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3877
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3878 switch (ev.keyCode) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3879 case this._keyMap.FOCUS_TOOLBAR.key:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3880 if (this._checkKey(this._keyMap.FOCUS_TOOLBAR, ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3881 var h = this.toolbar.getElementsByTagName('h2')[0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3882 if (h && h.firstChild) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3883 h.firstChild.focus();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3884 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3885 } else if (this._checkKey(this._keyMap.FOCUS_AFTER, ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3886 //Focus After Element - Esc
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3887 this.afterElement.focus();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3888 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3889 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3890 doExec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3891 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3892 //case 76: //L
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3893 case this._keyMap.CREATE_LINK.key: //L
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3894 if (this._hasSelection()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3895 if (this._checkKey(this._keyMap.CREATE_LINK, ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3896 var makeLink = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3897 if (this.get('limitCommands')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3898 if (!this.toolbar.getButtonByValue('createlink')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3899 makeLink = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3900 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3901 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3902 if (makeLink) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3903 this.execCommand('createlink', '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3904 this.toolbar.fireEvent('createlinkClick', { type: 'createlinkClick', target: this.toolbar });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3905 this.fireEvent('afterExecCommand', { type: 'afterExecCommand', target: this });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3906 doExec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3907 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3908 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3909 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3910 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3911 //case 90: //Z
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3912 case this._keyMap.UNDO.key:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3913 case this._keyMap.REDO.key:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3914 if (this._checkKey(this._keyMap.REDO, ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3915 action = 'redo';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3916 doExec = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3917 } else if (this._checkKey(this._keyMap.UNDO, ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3918 action = 'undo';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3919 doExec = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3920 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3921 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3922 //case 66: //B
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3923 case this._keyMap.BOLD.key:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3924 if (this._checkKey(this._keyMap.BOLD, ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3925 action = 'bold';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3926 doExec = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3927 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3928 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3929 case this._keyMap.FONT_SIZE_UP.key:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3930 case this._keyMap.FONT_SIZE_DOWN.key:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3931 var uk = false, dk = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3932 if (this._checkKey(this._keyMap.FONT_SIZE_UP, ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3933 uk = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3934 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3935 if (this._checkKey(this._keyMap.FONT_SIZE_DOWN, ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3936 dk = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3937 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3938 if (uk || dk) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3939 var fs_button = this.toolbar.getButtonByValue('fontsize'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3940 label = parseInt(fs_button.get('label'), 10),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3941 newValue = (label + 1);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3942
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3943 if (dk) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3944 newValue = (label - 1);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3945 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3946
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3947 action = 'fontsize';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3948 value = newValue + 'px';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3949 doExec = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3950 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3951 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3952 //case 73: //I
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3953 case this._keyMap.ITALIC.key:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3954 if (this._checkKey(this._keyMap.ITALIC, ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3955 action = 'italic';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3956 doExec = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3957 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3958 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3959 //case 85: //U
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3960 case this._keyMap.UNDERLINE.key:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3961 if (this._checkKey(this._keyMap.UNDERLINE, ev)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3962 action = 'underline';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3963 doExec = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3964 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3965 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3966 case 9:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3967 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3968 //Insert a tab in Internet Explorer
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3969 _range = this._getRange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3970 tar = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3971 if (!this._isElement(tar, 'li')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3972 if (_range) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3973 _range.pasteHTML('&nbsp;&nbsp;&nbsp;&nbsp;');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3974 _range.collapse(false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3975 _range.select();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3976 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3977 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3978 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3979 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3980 //Firefox 3 code
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3981 if (this.browser.gecko > 1.8) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3982 tar = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3983 if (this._isElement(tar, 'li')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3984 if (ev.shiftKey) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3985 this._getDoc().execCommand('outdent', null, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3986 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3987 this._getDoc().execCommand('indent', null, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3988 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3989
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3990 } else if (!this._hasSelection()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3991 this.execCommand('inserthtml', '&nbsp;&nbsp;&nbsp;&nbsp;');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3992 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3993 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3994 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3995 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3996 case 13:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3997 var p = null, i = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3998 if (this.get('ptags') && !ev.shiftKey) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
3999 if (this.browser.gecko) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4000 tar = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4001 if (!this._hasParent(tar, 'li')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4002 if (this._hasParent(tar, 'p')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4003 p = this._getDoc().createElement('p');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4004 p.innerHTML = '&nbsp;';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4005 Dom.insertAfter(p, tar);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4006 this._selectNode(p.firstChild);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4007 } else if (this._isElement(tar, 'body')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4008 this.execCommand('insertparagraph', null);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4009 var ps = this._getDoc().body.getElementsByTagName('p');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4010 for (i = 0; i < ps.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4011 if (ps[i].getAttribute('_moz_dirty') !== null) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4012 p = this._getDoc().createElement('p');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4013 p.innerHTML = '&nbsp;';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4014 Dom.insertAfter(p, ps[i]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4015 this._selectNode(p.firstChild);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4016 ps[i].removeAttribute('_moz_dirty');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4017 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4018 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4019 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4020 doExec = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4021 action = 'insertparagraph';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4022 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4023 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4024 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4025 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4026 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4027 tar = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4028 if (!this._hasParent(tar, 'li')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4029 this.execCommand('insertparagraph', null);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4030 var divs = this._getDoc().body.getElementsByTagName('div');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4031 for (i = 0; i < divs.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4032 if (!Dom.hasClass(divs[i], 'yui-wk-div')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4033 Dom.addClass(divs[i], 'yui-wk-p');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4034 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4035 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4036 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4037 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4038 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4039 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4040 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4041 tar = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4042 if (!this._hasParent(tar, 'li')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4043 if (this.browser.webkit4) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4044 this.execCommand('insertlinebreak');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4045 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4046 this.execCommand('inserthtml', '<var id="yui-br"></var>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4047 var holder = this._getDoc().getElementById('yui-br'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4048 br = this._getDoc().createElement('br'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4049 caret = this._getDoc().createElement('span');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4050
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4051 holder.parentNode.replaceChild(br, holder);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4052 caret.className = 'yui-non';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4053 caret.innerHTML = '&nbsp;';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4054 Dom.insertAfter(caret, br);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4055 this._selectNode(caret);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4056 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4057 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4058 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4059 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4060 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4061 //Insert a <br> instead of a <p></p> in Internet Explorer
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4062 _range = this._getRange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4063 tar = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4064 if (!this._isElement(tar, 'li')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4065 if (_range) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4066 _range.pasteHTML('<br>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4067 _range.collapse(false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4068 _range.select();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4069 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4070 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4071 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4072 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4073 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4074 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4075 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4076 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4077 this._listFix(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4078 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4079 if (doExec && action) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4080 this.execCommand(action, value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4081 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4082 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4083 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4084 this._storeUndo();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4085 this.fireEvent('editorKeyDown', { type: 'editorKeyDown', target: this, ev: ev });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4086 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4087 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4088 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4089 * @property _fixListRunning
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4090 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4091 * @description Keeps more than one _fixListDupIds from running at the same time.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4092 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4093 _fixListRunning: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4094 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4095 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4096 * @method _fixListDupIds
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4097 * @description Some browsers will duplicate the id of an LI when created in designMode.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4098 * This method will fix the duplicate id issue. However it will only preserve the first element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4099 * in the document list with the unique id.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4100 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4101 _fixListDupIds: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4102 if (this._fixListRunning) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4103 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4104 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4105 if (this._getDoc()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4106 this._fixListRunning = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4107 var lis = this._getDoc().body.getElementsByTagName('li'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4108 i = 0, ids = {};
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4109 for (i = 0; i < lis.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4110 if (lis[i].id) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4111 if (ids[lis[i].id]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4112 lis[i].id = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4113 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4114 ids[lis[i].id] = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4115 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4116 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4117 this._fixListRunning = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4118 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4119 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4120 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4121 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4122 * @method _listFix
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4123 * @param {Event} ev The event we are working on.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4124 * @description Handles the Enter key, Tab Key and Shift + Tab keys for List Items.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4125 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4126 _listFix: function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4127 var testLi = null, par = null, preContent = false, range = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4128 //Enter Key
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4129 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4130 if (ev.keyCode && (ev.keyCode == 13)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4131 if (this._hasParent(this._getSelectedElement(), 'li')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4132 var tar = this._hasParent(this._getSelectedElement(), 'li');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4133 if (tar.previousSibling) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4134 if (tar.firstChild && (tar.firstChild.length == 1)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4135 this._selectNode(tar);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4136 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4137 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4138 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4139 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4140 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4141 //Shift + Tab Key
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4142 if (ev.keyCode && ((!this.browser.webkit3 && (ev.keyCode == 25)) || ((this.browser.webkit3 || !this.browser.webkit) && ((ev.keyCode == 9) && ev.shiftKey)))) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4143 testLi = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4144 if (this._hasParent(testLi, 'li')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4145 testLi = this._hasParent(testLi, 'li');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4146 if (this._hasParent(testLi, 'ul') || this._hasParent(testLi, 'ol')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4147 par = this._hasParent(testLi, 'ul');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4148 if (!par) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4149 par = this._hasParent(testLi, 'ol');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4150 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4151 if (this._isElement(par.previousSibling, 'li')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4152 par.removeChild(testLi);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4153 par.parentNode.insertBefore(testLi, par.nextSibling);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4154 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4155 range = this._getDoc().body.createTextRange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4156 range.moveToElementText(testLi);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4157 range.collapse(false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4158 range.select();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4159 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4160 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4161 this._selectNode(testLi.firstChild);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4162 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4163 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4164 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4165 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4166 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4167 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4168 //Tab Key
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4169 if (ev.keyCode && ((ev.keyCode == 9) && (!ev.shiftKey))) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4170 var preLi = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4171 if (this._hasParent(preLi, 'li')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4172 preContent = this._hasParent(preLi, 'li').innerHTML;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4173 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4174 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4175 this._getDoc().execCommand('inserttext', false, '\t');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4176 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4177 testLi = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4178 if (this._hasParent(testLi, 'li')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4179 par = this._hasParent(testLi, 'li');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4180 var newUl = this._getDoc().createElement(par.parentNode.tagName.toLowerCase());
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4181 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4182 var span = Dom.getElementsByClassName('Apple-tab-span', 'span', par);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4183 //Remove the span element that Safari puts in
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4184 if (span[0]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4185 par.removeChild(span[0]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4186 par.innerHTML = Lang.trim(par.innerHTML);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4187 //Put the HTML from the LI into this new LI
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4188 if (preContent) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4189 par.innerHTML = '<span class="yui-non">' + preContent + '</span>&nbsp;';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4190 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4191 par.innerHTML = '<span class="yui-non">&nbsp;</span>&nbsp;';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4192 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4193 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4194 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4195 if (preContent) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4196 par.innerHTML = preContent + '&nbsp;';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4197 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4198 par.innerHTML = '&nbsp;';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4199 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4200 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4201
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4202 par.parentNode.replaceChild(newUl, par);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4203 newUl.appendChild(par);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4204 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4205 this._getSelection().setBaseAndExtent(par.firstChild, 1, par.firstChild, par.firstChild.innerText.length);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4206 if (!this.browser.webkit3) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4207 par.parentNode.parentNode.style.display = 'list-item';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4208 setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4209 par.parentNode.parentNode.style.display = 'block';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4210 }, 1);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4211 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4212 } else if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4213 range = this._getDoc().body.createTextRange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4214 range.moveToElementText(par);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4215 range.collapse(false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4216 range.select();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4217 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4218 this._selectNode(par);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4219 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4220 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4221 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4222 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4223 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4224 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4225 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4226 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4227 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4228 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4229 * @method nodeChange
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4230 * @param {Boolean} force Optional paramenter to skip the threshold counter
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4231 * @description Handles setting up the toolbar buttons, getting the Dom path, fixing nodes.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4232 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4233 nodeChange: function(force) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4234 var NCself = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4235 this._storeUndo();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4236 if (this.get('nodeChangeDelay')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4237 this._nodeChangeDelayTimer = window.setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4238 NCself._nodeChangeDelayTimer = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4239 NCself._nodeChange.apply(NCself, arguments);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4240 }, 0);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4241 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4242 this._nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4243 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4244 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4245 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4246 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4247 * @method _nodeChange
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4248 * @param {Boolean} force Optional paramenter to skip the threshold counter
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4249 * @description Fired from nodeChange in a setTimeout.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4250 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4251 _nodeChange: function(force) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4252 var threshold = parseInt(this.get('nodeChangeThreshold'), 10),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4253 thisNodeChange = Math.round(new Date().getTime() / 1000),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4254 self = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4255
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4256 if (force === true) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4257 this._lastNodeChange = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4258 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4259
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4260 if ((this._lastNodeChange + threshold) < thisNodeChange) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4261 if (this._fixNodesTimer === null) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4262 this._fixNodesTimer = window.setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4263 self._fixNodes.call(self);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4264 self._fixNodesTimer = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4265 }, 0);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4266 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4267 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4268 this._lastNodeChange = thisNodeChange;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4269 if (this.currentEvent) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4270 try {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4271 this._lastNodeChangeEvent = this.currentEvent.type;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4272 } catch (e) {}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4273 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4274
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4275 var beforeNodeChange = this.fireEvent('beforeNodeChange', { type: 'beforeNodeChange', target: this });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4276 if (beforeNodeChange === false) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4277 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4278 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4279 if (this.get('dompath')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4280 window.setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4281 self._writeDomPath.call(self);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4282 }, 0);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4283 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4284 //Check to see if we are disabled before continuing
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4285 if (!this.get('disabled')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4286 if (this.STOP_NODE_CHANGE) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4287 //Reset this var for next action
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4288 this.STOP_NODE_CHANGE = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4289 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4290 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4291 var sel = this._getSelection(),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4292 range = this._getRange(),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4293 el = this._getSelectedElement(),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4294 fn_button = this.toolbar.getButtonByValue('fontname'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4295 fs_button = this.toolbar.getButtonByValue('fontsize'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4296 undo_button = this.toolbar.getButtonByValue('undo'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4297 redo_button = this.toolbar.getButtonByValue('redo');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4298
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4299 //Handle updating the toolbar with active buttons
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4300 var _ex = {};
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4301 if (this._lastButton) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4302 _ex[this._lastButton.id] = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4303 //this._lastButton = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4304 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4305 if (!this._isElement(el, 'body')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4306 if (fn_button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4307 _ex[fn_button.get('id')] = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4308 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4309 if (fs_button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4310 _ex[fs_button.get('id')] = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4311 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4312 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4313 if (redo_button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4314 delete _ex[redo_button.get('id')];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4315 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4316 this.toolbar.resetAllButtons(_ex);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4317
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4318 //Handle disabled buttons
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4319 for (var d = 0; d < this._disabled.length; d++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4320 var _button = this.toolbar.getButtonByValue(this._disabled[d]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4321 if (_button && _button.get) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4322 if (this._lastButton && (_button.get('id') === this._lastButton.id)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4323 //Skip
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4324 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4325 if (!this._hasSelection() && !this.get('insert')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4326 switch (this._disabled[d]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4327 case 'fontname':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4328 case 'fontsize':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4329 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4330 default:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4331 //No Selection - disable
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4332 this.toolbar.disableButton(_button);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4333 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4334 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4335 if (!this._alwaysDisabled[this._disabled[d]]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4336 this.toolbar.enableButton(_button);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4337 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4338 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4339 if (!this._alwaysEnabled[this._disabled[d]]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4340 this.toolbar.deselectButton(_button);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4341 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4342 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4343 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4344 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4345 var path = this._getDomPath();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4346 var tag = null, cmd = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4347 for (var i = 0; i < path.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4348 tag = path[i].tagName.toLowerCase();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4349 if (path[i].getAttribute('tag')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4350 tag = path[i].getAttribute('tag').toLowerCase();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4351 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4352 cmd = this._tag2cmd[tag];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4353 if (cmd === undefined) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4354 cmd = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4355 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4356 if (!Lang.isArray(cmd)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4357 cmd = [cmd];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4358 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4359
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4360 //Bold and Italic styles
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4361 if (path[i].style.fontWeight.toLowerCase() == 'bold') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4362 cmd[cmd.length] = 'bold';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4363 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4364 if (path[i].style.fontStyle.toLowerCase() == 'italic') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4365 cmd[cmd.length] = 'italic';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4366 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4367 if (path[i].style.textDecoration.toLowerCase() == 'underline') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4368 cmd[cmd.length] = 'underline';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4369 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4370 if (path[i].style.textDecoration.toLowerCase() == 'line-through') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4371 cmd[cmd.length] = 'strikethrough';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4372 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4373 if (cmd.length > 0) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4374 for (var j = 0; j < cmd.length; j++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4375 this.toolbar.selectButton(cmd[j]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4376 this.toolbar.enableButton(cmd[j]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4377 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4378 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4379 //Handle Alignment
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4380 switch (path[i].style.textAlign.toLowerCase()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4381 case 'left':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4382 case 'right':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4383 case 'center':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4384 case 'justify':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4385 var alignType = path[i].style.textAlign.toLowerCase();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4386 if (path[i].style.textAlign.toLowerCase() == 'justify') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4387 alignType = 'full';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4388 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4389 this.toolbar.selectButton('justify' + alignType);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4390 this.toolbar.enableButton('justify' + alignType);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4391 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4392 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4393 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4394 //After for loop
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4395
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4396 //Reset Font Family and Size to the inital configs
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4397 if (fn_button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4398 var family = fn_button._configs.label._initialConfig.value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4399 fn_button.set('label', '<span class="yui-toolbar-fontname-' + this._cleanClassName(family) + '">' + family + '</span>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4400 this._updateMenuChecked('fontname', family);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4401 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4402
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4403 if (fs_button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4404 fs_button.set('label', fs_button._configs.label._initialConfig.value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4405 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4406
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4407 var hd_button = this.toolbar.getButtonByValue('heading');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4408 if (hd_button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4409 hd_button.set('label', hd_button._configs.label._initialConfig.value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4410 this._updateMenuChecked('heading', 'none');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4411 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4412 var img_button = this.toolbar.getButtonByValue('insertimage');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4413 if (img_button && this.currentWindow && (this.currentWindow.name == 'insertimage')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4414 this.toolbar.disableButton(img_button);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4415 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4416 if (this._lastButton && this._lastButton.isSelected) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4417 this.toolbar.deselectButton(this._lastButton.id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4418 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4419 this._undoNodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4420 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4421 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4422
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4423 this.fireEvent('afterNodeChange', { type: 'afterNodeChange', target: this });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4424 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4425 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4426 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4427 * @method _updateMenuChecked
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4428 * @param {Object} button The command identifier of the button you want to check
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4429 * @param {String} value The value of the menu item you want to check
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4430 * @param {<a href="YAHOO.widget.Toolbar.html">YAHOO.widget.Toolbar</a>} The Toolbar instance the button belongs to (defaults to this.toolbar)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4431 * @description Gets the menu from a button instance, if the menu is not rendered it will render it. It will then search the menu for the specified value, unchecking all other items and checking the specified on.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4432 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4433 _updateMenuChecked: function(button, value, tbar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4434 if (!tbar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4435 tbar = this.toolbar;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4436 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4437 var _button = tbar.getButtonByValue(button);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4438 _button.checkValue(value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4439 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4440 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4441 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4442 * @method _handleToolbarClick
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4443 * @param {Event} ev The event that triggered the button click
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4444 * @description This is an event handler attached to the Toolbar's buttonClick event. It will fire execCommand with the command identifier from the Toolbar Button.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4445 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4446 _handleToolbarClick: function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4447 var value = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4448 var str = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4449 var cmd = ev.button.value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4450 if (ev.button.menucmd) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4451 value = cmd;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4452 cmd = ev.button.menucmd;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4453 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4454 this._lastButton = ev.button;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4455 if (this.STOP_EXEC_COMMAND) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4456 this.STOP_EXEC_COMMAND = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4457 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4458 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4459 this.execCommand(cmd, value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4460 if (!this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4461 var Fself = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4462 setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4463 Fself.focus.call(Fself);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4464 }, 5);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4465 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4466 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4467 Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4468 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4469 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4470 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4471 * @method _setupAfterElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4472 * @description Creates the accessibility h2 header and places it after the iframe in the Dom for navigation.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4473 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4474 _setupAfterElement: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4475 if (!this.beforeElement) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4476 this.beforeElement = document.createElement('h2');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4477 this.beforeElement.className = 'yui-editor-skipheader';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4478 this.beforeElement.tabIndex = '-1';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4479 this.beforeElement.innerHTML = this.STR_BEFORE_EDITOR;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4480 this.get('element_cont').get('firstChild').insertBefore(this.beforeElement, this.toolbar.get('nextSibling'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4481 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4482 if (!this.afterElement) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4483 this.afterElement = document.createElement('h2');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4484 this.afterElement.className = 'yui-editor-skipheader';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4485 this.afterElement.tabIndex = '-1';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4486 this.afterElement.innerHTML = this.STR_LEAVE_EDITOR;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4487 this.get('element_cont').get('firstChild').appendChild(this.afterElement);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4488 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4489 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4490 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4491 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4492 * @method _disableEditor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4493 * @param {Boolean} disabled Pass true to disable, false to enable
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4494 * @description Creates a mask to place over the Editor.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4495 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4496 _disableEditor: function(disabled) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4497 var iframe, par, html, height;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4498 if (!this.get('disabled_iframe')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4499 iframe = this._createIframe();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4500 iframe.set('id', 'disabled_' + this.get('iframe').get('id'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4501 iframe.setStyle('height', '100%');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4502 iframe.setStyle('display', 'none');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4503 iframe.setStyle('visibility', 'visible');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4504 this.set('disabled_iframe', iframe);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4505 par = this.get('iframe').get('parentNode');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4506 par.appendChild(iframe.get('element'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4507 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4508 if (!iframe) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4509 iframe = this.get('disabled_iframe');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4510 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4511 if (disabled) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4512 this._orgIframe = this.get('iframe');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4513
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4514 if (this.toolbar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4515 this.toolbar.set('disabled', true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4516 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4517
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4518 html = this.getEditorHTML();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4519 height = this.get('iframe').get('offsetHeight');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4520 iframe.setStyle('visibility', '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4521 iframe.setStyle('position', '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4522 iframe.setStyle('top', '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4523 iframe.setStyle('left', '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4524 this._orgIframe.setStyle('visibility', 'hidden');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4525 this._orgIframe.setStyle('position', 'absolute');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4526 this._orgIframe.setStyle('top', '-99999px');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4527 this._orgIframe.setStyle('left', '-99999px');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4528 this.set('iframe', iframe);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4529 this._setInitialContent(true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4530
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4531 if (!this._mask) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4532 this._mask = document.createElement('DIV');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4533 Dom.addClass(this._mask, 'yui-editor-masked');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4534 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4535 this._mask.style.height = height + 'px';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4536 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4537 this.get('iframe').get('parentNode').appendChild(this._mask);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4538 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4539 this.on('editorContentReloaded', function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4540 this._getDoc().body._rteLoaded = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4541 this.setEditorHTML(html);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4542 iframe.setStyle('display', 'block');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4543 this.unsubscribeAll('editorContentReloaded');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4544 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4545 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4546 if (this._mask) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4547 this._mask.parentNode.removeChild(this._mask);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4548 this._mask = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4549 if (this.toolbar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4550 this.toolbar.set('disabled', false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4551 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4552 iframe.setStyle('visibility', 'hidden');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4553 iframe.setStyle('position', 'absolute');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4554 iframe.setStyle('top', '-99999px');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4555 iframe.setStyle('left', '-99999px');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4556 this._orgIframe.setStyle('visibility', '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4557 this._orgIframe.setStyle('position', '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4558 this._orgIframe.setStyle('top', '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4559 this._orgIframe.setStyle('left', '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4560 this.set('iframe', this._orgIframe);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4561
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4562 this.focus();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4563 var self = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4564 window.setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4565 self.nodeChange.call(self);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4566 }, 100);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4567 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4568 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4569 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4570 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4571 * @property SEP_DOMPATH
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4572 * @description The value to place in between the Dom path items
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4573 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4574 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4575 SEP_DOMPATH: '<',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4576 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4577 * @property STR_LEAVE_EDITOR
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4578 * @description The accessibility string for the element after the iFrame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4579 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4580 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4581 STR_LEAVE_EDITOR: 'You have left the Rich Text Editor.',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4582 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4583 * @property STR_BEFORE_EDITOR
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4584 * @description The accessibility string for the element before the iFrame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4585 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4586 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4587 STR_BEFORE_EDITOR: 'This text field can contain stylized text and graphics. To cycle through all formatting options, use the keyboard shortcut Shift + Escape to place focus on the toolbar and navigate between options with your arrow keys. To exit this text editor use the Escape key and continue tabbing. <h4>Common formatting keyboard shortcuts:</h4><ul><li>Control Shift B sets text to bold</li> <li>Control Shift I sets text to italic</li> <li>Control Shift U underlines text</li> <li>Control Shift L adds an HTML link</li></ul>',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4588 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4589 * @property STR_TITLE
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4590 * @description The Title of the HTML document that is created in the iFrame
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4591 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4592 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4593 STR_TITLE: 'Rich Text Area.',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4594 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4595 * @property STR_IMAGE_HERE
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4596 * @description The text to place in the URL textbox when using the blankimage.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4597 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4598 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4599 STR_IMAGE_HERE: 'Image URL Here',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4600 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4601 * @property STR_IMAGE_URL
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4602 * @description The label string for Image URL
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4603 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4604 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4605 STR_IMAGE_URL: 'Image URL',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4606 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4607 * @property STR_LINK_URL
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4608 * @description The label string for the Link URL.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4609 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4610 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4611 STR_LINK_URL: 'Link URL',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4612 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4613 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4614 * @property STOP_EXEC_COMMAND
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4615 * @description Set to true when you want the default execCommand function to not process anything
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4616 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4617 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4618 STOP_EXEC_COMMAND: false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4619 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4620 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4621 * @property STOP_NODE_CHANGE
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4622 * @description Set to true when you want the default nodeChange function to not process anything
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4623 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4624 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4625 STOP_NODE_CHANGE: false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4626 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4627 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4628 * @property CLASS_NOEDIT
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4629 * @description CSS class applied to elements that are not editable.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4630 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4631 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4632 CLASS_NOEDIT: 'yui-noedit',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4633 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4634 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4635 * @property CLASS_CONTAINER
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4636 * @description Default CSS class to apply to the editors container element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4637 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4638 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4639 CLASS_CONTAINER: 'yui-editor-container',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4640 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4641 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4642 * @property CLASS_EDITABLE
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4643 * @description Default CSS class to apply to the editors iframe element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4644 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4645 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4646 CLASS_EDITABLE: 'yui-editor-editable',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4647 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4648 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4649 * @property CLASS_EDITABLE_CONT
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4650 * @description Default CSS class to apply to the editors iframe's parent element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4651 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4652 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4653 CLASS_EDITABLE_CONT: 'yui-editor-editable-container',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4654 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4655 * @protected
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4656 * @property CLASS_PREFIX
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4657 * @description Default prefix for dynamically created class names
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4658 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4659 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4660 CLASS_PREFIX: 'yui-editor',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4661 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4662 * @property browser
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4663 * @description Standard browser detection
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4664 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4665 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4666 browser: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4667 var br = YAHOO.env.ua;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4668 //Check for webkit3
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4669 if (br.webkit >= 420) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4670 br.webkit3 = br.webkit;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4671 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4672 br.webkit3 = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4673 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4674 if (br.webkit >= 530) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4675 br.webkit4 = br.webkit;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4676 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4677 br.webkit4 = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4678 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4679 br.mac = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4680 //Check for Mac
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4681 if (navigator.userAgent.indexOf('Macintosh') !== -1) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4682 br.mac = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4683 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4684
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4685 return br;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4686 }(),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4687 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4688 * @method init
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4689 * @description The Editor class' initialization method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4690 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4691 init: function(p_oElement, p_oAttributes) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4692
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4693 if (!this._defaultToolbar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4694 this._defaultToolbar = {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4695 collapse: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4696 titlebar: 'Text Editing Tools',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4697 draggable: false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4698 buttons: [
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4699 { group: 'fontstyle', label: 'Font Name and Size',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4700 buttons: [
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4701 { type: 'select', label: 'Arial', value: 'fontname', disabled: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4702 menu: [
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4703 { text: 'Arial', checked: true },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4704 { text: 'Arial Black' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4705 { text: 'Comic Sans MS' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4706 { text: 'Courier New' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4707 { text: 'Lucida Console' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4708 { text: 'Tahoma' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4709 { text: 'Times New Roman' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4710 { text: 'Trebuchet MS' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4711 { text: 'Verdana' }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4712 ]
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4713 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4714 { type: 'spin', label: '13', value: 'fontsize', range: [ 9, 75 ], disabled: true }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4715 ]
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4716 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4717 { type: 'separator' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4718 { group: 'textstyle', label: 'Font Style',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4719 buttons: [
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4720 { type: 'push', label: 'Bold CTRL + SHIFT + B', value: 'bold' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4721 { type: 'push', label: 'Italic CTRL + SHIFT + I', value: 'italic' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4722 { type: 'push', label: 'Underline CTRL + SHIFT + U', value: 'underline' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4723 { type: 'push', label: 'Strike Through', value: 'strikethrough' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4724 { type: 'separator' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4725 { type: 'color', label: 'Font Color', value: 'forecolor', disabled: true },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4726 { type: 'color', label: 'Background Color', value: 'backcolor', disabled: true }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4727
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4728 ]
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4729 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4730 { type: 'separator' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4731 { group: 'indentlist', label: 'Lists',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4732 buttons: [
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4733 { type: 'push', label: 'Create an Unordered List', value: 'insertunorderedlist' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4734 { type: 'push', label: 'Create an Ordered List', value: 'insertorderedlist' }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4735 ]
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4736 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4737 { type: 'separator' },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4738 { group: 'insertitem', label: 'Insert Item',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4739 buttons: [
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4740 { type: 'push', label: 'HTML Link CTRL + SHIFT + L', value: 'createlink', disabled: true },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4741 { type: 'push', label: 'Insert Image', value: 'insertimage' }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4742 ]
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4743 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4744 ]
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4745 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4746 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4747
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4748 YAHOO.widget.SimpleEditor.superclass.init.call(this, p_oElement, p_oAttributes);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4749 YAHOO.widget.EditorInfo._instances[this.get('id')] = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4750
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4751
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4752 this.currentElement = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4753 this.on('contentReady', function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4754 this.DOMReady = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4755 this.fireQueue();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4756 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4757
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4758 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4759 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4760 * @method initAttributes
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4761 * @description Initializes all of the configuration attributes used to create
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4762 * the editor.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4763 * @param {Object} attr Object literal specifying a set of
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4764 * configuration attributes used to create the editor.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4765 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4766 initAttributes: function(attr) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4767 YAHOO.widget.SimpleEditor.superclass.initAttributes.call(this, attr);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4768 var self = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4769
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4770 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4771 * @config setDesignMode
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4772 * @description Should the Editor set designMode on the document. Default: true.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4773 * @default true
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4774 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4775 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4776 this.setAttributeConfig('setDesignMode', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4777 value: ((attr.setDesignMode === false) ? false : true)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4778 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4779 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4780 * @config nodeChangeDelay
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4781 * @description Do we wrap the nodeChange method in a timeout for performance. Default: true.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4782 * @default true
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4783 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4784 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4785 this.setAttributeConfig('nodeChangeDelay', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4786 value: ((attr.nodeChangeDelay === false) ? false : true)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4787 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4788 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4789 * @config maxUndo
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4790 * @description The max number of undo levels to store.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4791 * @default 30
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4792 * @type Number
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4793 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4794 this.setAttributeConfig('maxUndo', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4795 writeOnce: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4796 value: attr.maxUndo || 30
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4797 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4798
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4799 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4800 * @config ptags
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4801 * @description If true, the editor uses &lt;P&gt; tags instead of &lt;br&gt; tags. (Use Shift + Enter to get a &lt;br&gt;)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4802 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4803 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4804 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4805 this.setAttributeConfig('ptags', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4806 writeOnce: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4807 value: attr.ptags || false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4808 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4809 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4810 * @config insert
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4811 * @description If true, selection is not required for: fontname, fontsize, forecolor, backcolor.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4812 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4813 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4814 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4815 this.setAttributeConfig('insert', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4816 writeOnce: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4817 value: attr.insert || false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4818 method: function(insert) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4819 if (insert) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4820 var buttons = {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4821 fontname: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4822 fontsize: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4823 forecolor: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4824 backcolor: true
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4825 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4826 var tmp = this._defaultToolbar.buttons;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4827 for (var i = 0; i < tmp.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4828 if (tmp[i].buttons) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4829 for (var a = 0; a < tmp[i].buttons.length; a++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4830 if (tmp[i].buttons[a].value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4831 if (buttons[tmp[i].buttons[a].value]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4832 delete tmp[i].buttons[a].disabled;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4833 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4834 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4835 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4836 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4837 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4838 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4839 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4840 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4841 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4842 * @config container
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4843 * @description Used when dynamically creating the Editor from Javascript with no default textarea.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4844 * We will create one and place it in this container. If no container is passed we will append to document.body.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4845 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4846 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4847 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4848 this.setAttributeConfig('container', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4849 writeOnce: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4850 value: attr.container || false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4851 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4852 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4853 * @config plainText
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4854 * @description Process the inital textarea data as if it was plain text. Accounting for spaces, tabs and line feeds.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4855 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4856 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4857 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4858 this.setAttributeConfig('plainText', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4859 writeOnce: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4860 value: attr.plainText || false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4861 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4862 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4863 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4864 * @config iframe
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4865 * @description Internal config for holding the iframe element.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4866 * @default null
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4867 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4868 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4869 this.setAttributeConfig('iframe', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4870 value: null
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4871 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4872 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4873 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4874 * @config disabled_iframe
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4875 * @description Internal config for holding the iframe element used when disabling the Editor.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4876 * @default null
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4877 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4878 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4879 this.setAttributeConfig('disabled_iframe', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4880 value: null
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4881 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4882 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4883 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4884 * @depreciated - No longer used, should use this.get('element')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4885 * @config textarea
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4886 * @description Internal config for holding the textarea element (replaced with element).
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4887 * @default null
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4888 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4889 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4890 this.setAttributeConfig('textarea', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4891 value: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4892 writeOnce: true
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4893 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4894 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4895 * @config nodeChangeThreshold
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4896 * @description The number of seconds that need to be in between nodeChange processing
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4897 * @default 3
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4898 * @type Number
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4899 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4900 this.setAttributeConfig('nodeChangeThreshold', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4901 value: attr.nodeChangeThreshold || 3,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4902 validator: YAHOO.lang.isNumber
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4903 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4904 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4905 * @config allowNoEdit
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4906 * @description Should the editor check for non-edit fields. It should be noted that this technique is not perfect. If the user does the right things, they will still be able to make changes.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4907 * Such as highlighting an element below and above the content and hitting a toolbar button or a shortcut key.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4908 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4909 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4910 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4911 this.setAttributeConfig('allowNoEdit', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4912 value: attr.allowNoEdit || false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4913 validator: YAHOO.lang.isBoolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4914 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4915 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4916 * @config limitCommands
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4917 * @description Should the Editor limit the allowed execCommands to the ones available in the toolbar. If true, then execCommand and keyboard shortcuts will fail if they are not defined in the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4918 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4919 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4920 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4921 this.setAttributeConfig('limitCommands', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4922 value: attr.limitCommands || false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4923 validator: YAHOO.lang.isBoolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4924 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4925 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4926 * @config element_cont
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4927 * @description Internal config for the editors container
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4928 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4929 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4930 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4931 this.setAttributeConfig('element_cont', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4932 value: attr.element_cont
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4933 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4934 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4935 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4936 * @config editor_wrapper
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4937 * @description The outter wrapper for the entire editor.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4938 * @default null
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4939 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4940 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4941 this.setAttributeConfig('editor_wrapper', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4942 value: attr.editor_wrapper || null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4943 writeOnce: true
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4944 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4945 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4946 * @attribute height
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4947 * @description The height of the editor iframe container, not including the toolbar..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4948 * @default Best guessed size of the textarea, for best results use CSS to style the height of the textarea or pass it in as an argument
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4949 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4950 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4951 this.setAttributeConfig('height', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4952 value: attr.height || Dom.getStyle(self.get('element'), 'height'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4953 method: function(height) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4954 if (this._rendered) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4955 //We have been rendered, change the height
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4956 if (this.get('animate')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4957 var anim = new YAHOO.util.Anim(this.get('iframe').get('parentNode'), {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4958 height: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4959 to: parseInt(height, 10)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4960 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4961 }, 0.5);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4962 anim.animate();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4963 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4964 Dom.setStyle(this.get('iframe').get('parentNode'), 'height', height);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4965 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4966 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4967 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4968 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4969 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4970 * @config autoHeight
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4971 * @description Remove the scrollbars from the edit area and resize it to fit the content. It will not go any lower than the current config height.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4972 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4973 * @type Boolean || Number
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4974 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4975 this.setAttributeConfig('autoHeight', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4976 value: attr.autoHeight || false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4977 method: function(a) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4978 if (a) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4979 if (this.get('iframe')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4980 this.get('iframe').get('element').setAttribute('scrolling', 'no');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4981 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4982 this.on('afterNodeChange', this._handleAutoHeight, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4983 this.on('editorKeyDown', this._handleAutoHeight, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4984 this.on('editorKeyPress', this._handleAutoHeight, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4985 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4986 if (this.get('iframe')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4987 this.get('iframe').get('element').setAttribute('scrolling', 'auto');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4988 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4989 this.unsubscribe('afterNodeChange', this._handleAutoHeight);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4990 this.unsubscribe('editorKeyDown', this._handleAutoHeight);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4991 this.unsubscribe('editorKeyPress', this._handleAutoHeight);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4992 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4993 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4994 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4995 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4996 * @attribute width
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4997 * @description The width of the editor container.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4998 * @default Best guessed size of the textarea, for best results use CSS to style the width of the textarea or pass it in as an argument
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
4999 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5000 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5001 this.setAttributeConfig('width', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5002 value: attr.width || Dom.getStyle(this.get('element'), 'width'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5003 method: function(width) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5004 if (this._rendered) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5005 //We have been rendered, change the width
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5006 if (this.get('animate')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5007 var anim = new YAHOO.util.Anim(this.get('element_cont').get('element'), {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5008 width: {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5009 to: parseInt(width, 10)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5010 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5011 }, 0.5);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5012 anim.animate();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5013 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5014 this.get('element_cont').setStyle('width', width);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5015 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5016 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5017 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5018 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5019
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5020 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5021 * @attribute blankimage
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5022 * @description The URL for the image placeholder to put in when inserting an image.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5023 * @default The yahooapis.com address for the current release + 'assets/blankimage.png'
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5024 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5025 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5026 this.setAttributeConfig('blankimage', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5027 value: attr.blankimage || this._getBlankImage()
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5028 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5029 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5030 * @attribute css
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5031 * @description The Base CSS used to format the content of the editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5032 * @default <code><pre>html {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5033 height: 95%;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5034 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5035 body {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5036 height: 100%;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5037 padding: 7px; background-color: #fff; font:13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5038 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5039 a {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5040 color: blue;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5041 text-decoration: underline;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5042 cursor: pointer;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5043 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5044 .warning-localfile {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5045 border-bottom: 1px dashed red !important;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5046 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5047 .yui-busy {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5048 cursor: wait !important;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5049 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5050 img.selected { //Safari image selection
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5051 border: 2px dotted #808080;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5052 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5053 img {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5054 cursor: pointer !important;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5055 border: none;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5056 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5057 </pre></code>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5058 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5059 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5060 this.setAttributeConfig('css', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5061 value: attr.css || this._defaultCSS,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5062 writeOnce: true
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5063 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5064 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5065 * @attribute html
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5066 * @description The default HTML to be written to the iframe document before the contents are loaded (Note that the DOCTYPE attr will be added at render item)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5067 * @default This HTML requires a few things if you are to override:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5068 <p><code>{TITLE}, {CSS}, {HIDDEN_CSS}, {EXTRA_CSS}</code> and <code>{CONTENT}</code> need to be there, they are passed to YAHOO.lang.substitute to be replace with other strings.<p>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5069 <p><code>onload="document.body._rteLoaded = true;"</code> : the onload statement must be there or the editor will not finish loading.</p>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5070 <code>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5071 <pre>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5072 &lt;html&gt;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5073 &lt;head&gt;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5074 &lt;title&gt;{TITLE}&lt;/title&gt;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5075 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5076 &lt;style&gt;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5077 {CSS}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5078 &lt;/style&gt;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5079 &lt;style&gt;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5080 {HIDDEN_CSS}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5081 &lt;/style&gt;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5082 &lt;style&gt;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5083 {EXTRA_CSS}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5084 &lt;/style&gt;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5085 &lt;/head&gt;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5086 &lt;body onload="document.body._rteLoaded = true;"&gt;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5087 {CONTENT}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5088 &lt;/body&gt;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5089 &lt;/html&gt;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5090 </pre>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5091 </code>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5092 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5093 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5094 this.setAttributeConfig('html', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5095 value: attr.html || '<html><head><title>{TITLE}</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><base href="' + this._baseHREF + '"><style>{CSS}</style><style>{HIDDEN_CSS}</style><style>{EXTRA_CSS}</style></head><body onload="document.body._rteLoaded = true;">{CONTENT}</body></html>',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5096 writeOnce: true
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5097 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5098
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5099 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5100 * @attribute extracss
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5101 * @description Extra user defined css to load after the default SimpleEditor CSS
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5102 * @default ''
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5103 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5104 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5105 this.setAttributeConfig('extracss', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5106 value: attr.extracss || '',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5107 writeOnce: true
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5108 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5109
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5110 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5111 * @attribute handleSubmit
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5112 * @description Config handles if the editor will attach itself to the textareas parent form's submit handler.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5113 If it is set to true, the editor will attempt to attach a submit listener to the textareas parent form.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5114 Then it will trigger the editors save handler and place the new content back into the text area before the form is submitted.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5115 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5116 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5117 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5118 this.setAttributeConfig('handleSubmit', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5119 value: attr.handleSubmit || false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5120 method: function(exec) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5121 if (this.get('element').form) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5122 if (!this._formButtons) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5123 this._formButtons = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5124 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5125 if (exec) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5126 Event.on(this.get('element').form, 'submit', this._handleFormSubmit, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5127 var i = this.get('element').form.getElementsByTagName('input');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5128 for (var s = 0; s < i.length; s++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5129 var type = i[s].getAttribute('type');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5130 if (type && (type.toLowerCase() == 'submit')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5131 Event.on(i[s], 'click', this._handleFormButtonClick, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5132 this._formButtons[this._formButtons.length] = i[s];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5133 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5134 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5135 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5136 Event.removeListener(this.get('element').form, 'submit', this._handleFormSubmit);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5137 if (this._formButtons) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5138 Event.removeListener(this._formButtons, 'click', this._handleFormButtonClick);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5139 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5140 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5141 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5142 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5143 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5144 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5145 * @attribute disabled
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5146 * @description This will toggle the editor's disabled state. When the editor is disabled, designMode is turned off and a mask is placed over the iframe so no interaction can take place.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5147 All Toolbar buttons are also disabled so they cannot be used.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5148 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5149 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5150 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5151
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5152 this.setAttributeConfig('disabled', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5153 value: false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5154 method: function(disabled) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5155 if (this._rendered) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5156 this._disableEditor(disabled);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5157 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5158 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5159 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5160 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5161 * @config saveEl
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5162 * @description When save HTML is called, this element will be updated as well as the source of data.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5163 * @default element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5164 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5165 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5166 this.setAttributeConfig('saveEl', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5167 value: this.get('element')
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5168 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5169 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5170 * @config toolbar_cont
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5171 * @description Internal config for the toolbars container
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5172 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5173 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5174 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5175 this.setAttributeConfig('toolbar_cont', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5176 value: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5177 writeOnce: true
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5178 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5179 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5180 * @attribute toolbar
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5181 * @description The default toolbar config.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5182 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5183 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5184 this.setAttributeConfig('toolbar', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5185 value: attr.toolbar || this._defaultToolbar,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5186 writeOnce: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5187 method: function(toolbar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5188 if (!toolbar.buttonType) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5189 toolbar.buttonType = this._defaultToolbar.buttonType;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5190 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5191 this._defaultToolbar = toolbar;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5192 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5193 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5194 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5195 * @attribute animate
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5196 * @description Should the editor animate window movements
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5197 * @default false unless Animation is found, then true
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5198 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5199 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5200 this.setAttributeConfig('animate', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5201 value: ((attr.animate) ? ((YAHOO.util.Anim) ? true : false) : false),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5202 validator: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5203 var ret = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5204 if (!YAHOO.util.Anim) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5205 ret = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5206 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5207 return ret;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5208 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5209 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5210 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5211 * @config panel
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5212 * @description A reference to the panel we are using for windows.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5213 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5214 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5215 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5216 this.setAttributeConfig('panel', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5217 value: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5218 writeOnce: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5219 validator: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5220 var ret = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5221 if (!YAHOO.widget.Overlay) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5222 ret = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5223 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5224 return ret;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5225 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5226 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5227 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5228 * @attribute focusAtStart
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5229 * @description Should we focus the window when the content is ready?
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5230 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5231 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5232 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5233 this.setAttributeConfig('focusAtStart', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5234 value: attr.focusAtStart || false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5235 writeOnce: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5236 method: function(fs) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5237 if (fs) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5238 this.on('editorContentLoaded', function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5239 var self = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5240 setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5241 self.focus.call(self);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5242 self.editorDirty = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5243 }, 400);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5244 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5245 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5246 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5247 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5248 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5249 * @attribute dompath
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5250 * @description Toggle the display of the current Dom path below the editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5251 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5252 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5253 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5254 this.setAttributeConfig('dompath', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5255 value: attr.dompath || false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5256 method: function(dompath) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5257 if (dompath && !this.dompath) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5258 this.dompath = document.createElement('DIV');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5259 this.dompath.id = this.get('id') + '_dompath';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5260 Dom.addClass(this.dompath, 'dompath');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5261 this.get('element_cont').get('firstChild').appendChild(this.dompath);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5262 if (this.get('iframe')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5263 this._writeDomPath();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5264 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5265 } else if (!dompath && this.dompath) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5266 this.dompath.parentNode.removeChild(this.dompath);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5267 this.dompath = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5268 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5269 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5270 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5271 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5272 * @attribute markup
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5273 * @description Should we try to adjust the markup for the following types: semantic, css, default or xhtml
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5274 * @default "semantic"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5275 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5276 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5277 this.setAttributeConfig('markup', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5278 value: attr.markup || 'semantic',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5279 validator: function(markup) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5280 switch (markup.toLowerCase()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5281 case 'semantic':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5282 case 'css':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5283 case 'default':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5284 case 'xhtml':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5285 return true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5286 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5287 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5288 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5289 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5290 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5291 * @attribute removeLineBreaks
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5292 * @description Should we remove linebreaks and extra spaces on cleanup
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5293 * @default false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5294 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5295 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5296 this.setAttributeConfig('removeLineBreaks', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5297 value: attr.removeLineBreaks || false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5298 validator: YAHOO.lang.isBoolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5299 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5300
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5301 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5302 * @config drag
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5303 * @description Set this config to make the Editor draggable, pass 'proxy' to make use YAHOO.util.DDProxy.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5304 * @type {Boolean/String}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5305 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5306 this.setAttributeConfig('drag', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5307 writeOnce: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5308 value: attr.drag || false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5309 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5310
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5311 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5312 * @config resize
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5313 * @description Set this to true to make the Editor Resizable with YAHOO.util.Resize. The default config is available: myEditor._resizeConfig
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5314 * Animation will be ignored while performing this resize to allow for the dynamic change in size of the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5315 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5316 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5317 this.setAttributeConfig('resize', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5318 writeOnce: true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5319 value: attr.resize || false
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5320 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5321
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5322 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5323 * @config filterWord
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5324 * @description Attempt to filter out MS Word HTML from the Editor's output.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5325 * @type Boolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5326 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5327 this.setAttributeConfig('filterWord', {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5328 value: attr.filterWord || false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5329 validator: YAHOO.lang.isBoolean
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5330 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5331
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5332 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5333 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5334 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5335 * @method _getBlankImage
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5336 * @description Retrieves the full url of the image to use as the blank image.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5337 * @return {String} The URL to the blank image
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5338 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5339 _getBlankImage: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5340 if (!this.DOMReady) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5341 this._queue[this._queue.length] = ['_getBlankImage', arguments];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5342 return '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5343 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5344 var img = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5345 if (!this._blankImageLoaded) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5346 if (YAHOO.widget.EditorInfo.blankImage) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5347 this.set('blankimage', YAHOO.widget.EditorInfo.blankImage);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5348 this._blankImageLoaded = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5349 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5350 var div = document.createElement('div');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5351 div.style.position = 'absolute';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5352 div.style.top = '-9999px';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5353 div.style.left = '-9999px';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5354 div.className = this.CLASS_PREFIX + '-blankimage';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5355 document.body.appendChild(div);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5356 img = YAHOO.util.Dom.getStyle(div, 'background-image');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5357 img = img.replace('url(', '').replace(')', '').replace(/"/g, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5358 //Adobe AIR Code
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5359 img = img.replace('app:/', '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5360 this.set('blankimage', img);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5361 this._blankImageLoaded = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5362 div.parentNode.removeChild(div);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5363 YAHOO.widget.EditorInfo.blankImage = img;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5364 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5365 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5366 img = this.get('blankimage');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5367 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5368 return img;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5369 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5370 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5371 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5372 * @method _handleAutoHeight
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5373 * @description Handles resizing the editor's height based on the content
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5374 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5375 _handleAutoHeight: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5376 var doc = this._getDoc(),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5377 body = doc.body,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5378 docEl = doc.documentElement;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5379
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5380 var height = parseInt(Dom.getStyle(this.get('editor_wrapper'), 'height'), 10);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5381 var newHeight = body.scrollHeight;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5382 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5383 newHeight = docEl.scrollHeight;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5384 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5385 if (newHeight < parseInt(this.get('height'), 10)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5386 newHeight = parseInt(this.get('height'), 10);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5387 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5388 if ((height != newHeight) && (newHeight >= parseInt(this.get('height'), 10))) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5389 var anim = this.get('animate');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5390 this.set('animate', false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5391 this.set('height', newHeight + 'px');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5392 this.set('animate', anim);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5393 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5394 //Internet Explorer needs this
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5395 this.get('iframe').setStyle('height', '99%');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5396 this.get('iframe').setStyle('zoom', '1');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5397 var self = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5398 window.setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5399 self.get('iframe').setStyle('height', '100%');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5400 }, 1);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5401 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5402 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5403 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5404 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5405 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5406 * @property _formButtons
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5407 * @description Array of buttons that are in the Editor's parent form (for handleSubmit)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5408 * @type Array
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5409 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5410 _formButtons: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5411 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5412 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5413 * @property _formButtonClicked
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5414 * @description The form button that was clicked to submit the form.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5415 * @type HTMLElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5416 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5417 _formButtonClicked: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5418 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5419 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5420 * @method _handleFormButtonClick
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5421 * @description The click listener assigned to each submit button in the Editor's parent form.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5422 * @param {Event} ev The click event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5423 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5424 _handleFormButtonClick: function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5425 var tar = Event.getTarget(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5426 this._formButtonClicked = tar;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5427 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5428 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5429 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5430 * @method _handleFormSubmit
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5431 * @description Handles the form submission.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5432 * @param {Object} ev The Form Submit Event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5433 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5434 _handleFormSubmit: function(ev) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5435 this.saveHTML();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5436
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5437 var form = this.get('element').form,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5438 tar = this._formButtonClicked || false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5439
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5440 Event.removeListener(form, 'submit', this._handleFormSubmit);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5441 if (YAHOO.env.ua.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5442 //form.fireEvent("onsubmit");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5443 if (tar && !tar.disabled) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5444 tar.click();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5445 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5446 } else { // Gecko, Opera, and Safari
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5447 if (tar && !tar.disabled) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5448 tar.click();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5449 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5450 var oEvent = document.createEvent("HTMLEvents");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5451 oEvent.initEvent("submit", true, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5452 form.dispatchEvent(oEvent);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5453 if (YAHOO.env.ua.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5454 if (YAHOO.lang.isFunction(form.submit)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5455 form.submit();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5456 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5457 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5458 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5459 //2.6.0
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5460 //Removed this, not need since removing Safari 2.x
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5461 //Event.stopEvent(ev);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5462 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5463 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5464 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5465 * @method _handleFontSize
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5466 * @description Handles the font size button in the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5467 * @param {Object} o Object returned from Toolbar's buttonClick Event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5468 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5469 _handleFontSize: function(o) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5470 var button = this.toolbar.getButtonById(o.button.id);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5471 var value = button.get('label') + 'px';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5472 this.execCommand('fontsize', value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5473 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5474 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5475 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5476 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5477 * @description Handles the colorpicker buttons in the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5478 * @param {Object} o Object returned from Toolbar's buttonClick Event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5479 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5480 _handleColorPicker: function(o) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5481 var cmd = o.button;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5482 var value = '#' + o.color;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5483 if ((cmd == 'forecolor') || (cmd == 'backcolor')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5484 this.execCommand(cmd, value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5485 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5486 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5487 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5488 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5489 * @method _handleAlign
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5490 * @description Handles the alignment buttons in the toolbar.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5491 * @param {Object} o Object returned from Toolbar's buttonClick Event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5492 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5493 _handleAlign: function(o) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5494 var cmd = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5495 for (var i = 0; i < o.button.menu.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5496 if (o.button.menu[i].value == o.button.value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5497 cmd = o.button.menu[i].value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5498 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5499 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5500 var value = this._getSelection();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5501
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5502 this.execCommand(cmd, value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5503 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5504 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5505 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5506 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5507 * @method _handleAfterNodeChange
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5508 * @description Fires after a nodeChange happens to setup the things that where reset on the node change (button state).
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5509 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5510 _handleAfterNodeChange: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5511 var path = this._getDomPath(),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5512 elm = null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5513 family = null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5514 fontsize = null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5515 validFont = false,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5516 fn_button = this.toolbar.getButtonByValue('fontname'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5517 fs_button = this.toolbar.getButtonByValue('fontsize'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5518 hd_button = this.toolbar.getButtonByValue('heading');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5519
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5520 for (var i = 0; i < path.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5521 elm = path[i];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5522
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5523 var tag = elm.tagName.toLowerCase();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5524
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5525
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5526 if (elm.getAttribute('tag')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5527 tag = elm.getAttribute('tag');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5528 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5529
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5530 family = elm.getAttribute('face');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5531 if (Dom.getStyle(elm, 'font-family')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5532 family = Dom.getStyle(elm, 'font-family');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5533 //Adobe AIR Code
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5534 family = family.replace(/'/g, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5535 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5536
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5537 if (tag.substring(0, 1) == 'h') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5538 if (hd_button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5539 for (var h = 0; h < hd_button._configs.menu.value.length; h++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5540 if (hd_button._configs.menu.value[h].value.toLowerCase() == tag) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5541 hd_button.set('label', hd_button._configs.menu.value[h].text);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5542 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5543 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5544 this._updateMenuChecked('heading', tag);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5545 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5546 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5547 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5548
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5549 if (fn_button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5550 for (var b = 0; b < fn_button._configs.menu.value.length; b++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5551 if (family && fn_button._configs.menu.value[b].text.toLowerCase() == family.toLowerCase()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5552 validFont = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5553 family = fn_button._configs.menu.value[b].text; //Put the proper menu name in the button
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5554 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5555 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5556 if (!validFont) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5557 family = fn_button._configs.label._initialConfig.value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5558 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5559 var familyLabel = '<span class="yui-toolbar-fontname-' + this._cleanClassName(family) + '">' + family + '</span>';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5560 if (fn_button.get('label') != familyLabel) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5561 fn_button.set('label', familyLabel);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5562 this._updateMenuChecked('fontname', family);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5563 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5564 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5565
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5566 if (fs_button) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5567 fontsize = parseInt(Dom.getStyle(elm, 'fontSize'), 10);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5568 if ((fontsize === null) || isNaN(fontsize)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5569 fontsize = fs_button._configs.label._initialConfig.value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5570 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5571 fs_button.set('label', ''+fontsize);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5572 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5573
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5574 if (!this._isElement(elm, 'body') && !this._isElement(elm, 'img')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5575 this.toolbar.enableButton(fn_button);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5576 this.toolbar.enableButton(fs_button);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5577 this.toolbar.enableButton('forecolor');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5578 this.toolbar.enableButton('backcolor');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5579 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5580 if (this._isElement(elm, 'img')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5581 if (YAHOO.widget.Overlay) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5582 this.toolbar.enableButton('createlink');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5583 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5584 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5585 if (this._hasParent(elm, 'blockquote')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5586 this.toolbar.selectButton('indent');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5587 this.toolbar.disableButton('indent');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5588 this.toolbar.enableButton('outdent');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5589 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5590 if (this._hasParent(elm, 'ol') || this._hasParent(elm, 'ul')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5591 this.toolbar.disableButton('indent');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5592 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5593 this._lastButton = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5594
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5595 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5596 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5597 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5598 * @method _handleInsertImageClick
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5599 * @description Opens the Image Properties Window when the insert Image button is clicked or an Image is Double Clicked.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5600 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5601 _handleInsertImageClick: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5602 if (this.get('limitCommands')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5603 if (!this.toolbar.getButtonByValue('insertimage')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5604 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5605 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5606 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5607
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5608 this.toolbar.set('disabled', true); //Disable the toolbar when the prompt is showing
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5609 var _handleAEC = function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5610 var el = this.currentElement[0],
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5611 src = 'http://';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5612 if (!el) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5613 el = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5614 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5615 if (el) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5616 if (el.getAttribute('src')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5617 src = el.getAttribute('src', 2);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5618 if (src.indexOf(this.get('blankimage')) != -1) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5619 src = this.STR_IMAGE_HERE;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5620 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5621 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5622 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5623 var str = prompt(this.STR_IMAGE_URL + ': ', src);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5624 if ((str !== '') && (str !== null)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5625 el.setAttribute('src', str);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5626 } else if (str === '') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5627 el.parentNode.removeChild(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5628 this.currentElement = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5629 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5630 } else if ((str === null)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5631 src = el.getAttribute('src', 2);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5632 if (src.indexOf(this.get('blankimage')) != -1) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5633 el.parentNode.removeChild(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5634 this.currentElement = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5635 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5636 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5637 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5638 this.closeWindow();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5639 this.toolbar.set('disabled', false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5640 this.unsubscribe('afterExecCommand', _handleAEC, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5641 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5642 this.on('afterExecCommand', _handleAEC, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5643 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5644 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5645 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5646 * @method _handleInsertImageWindowClose
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5647 * @description Handles the closing of the Image Properties Window.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5648 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5649 _handleInsertImageWindowClose: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5650 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5651 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5652 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5653 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5654 * @method _isLocalFile
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5655 * @param {String} url THe url/string to check
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5656 * @description Checks to see if a string (href or img src) is possibly a local file reference..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5657 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5658 _isLocalFile: function(url) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5659 if ((url) && (url !== '') && ((url.indexOf('file:/') != -1) || (url.indexOf(':\\') != -1))) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5660 return true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5661 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5662 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5663 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5664 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5665 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5666 * @method _handleCreateLinkClick
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5667 * @description Handles the opening of the Link Properties Window when the Create Link button is clicked or an href is doubleclicked.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5668 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5669 _handleCreateLinkClick: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5670 if (this.get('limitCommands')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5671 if (!this.toolbar.getButtonByValue('createlink')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5672 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5673 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5674 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5675
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5676 this.toolbar.set('disabled', true); //Disable the toolbar when the prompt is showing
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5677
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5678 var _handleAEC = function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5679 var el = this.currentElement[0],
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5680 url = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5681
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5682 if (el) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5683 if (el.getAttribute('href', 2) !== null) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5684 url = el.getAttribute('href', 2);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5685 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5686 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5687 var str = prompt(this.STR_LINK_URL + ': ', url);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5688 if ((str !== '') && (str !== null)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5689 var urlValue = str;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5690 if ((urlValue.indexOf(':/'+'/') == -1) && (urlValue.substring(0,1) != '/') && (urlValue.substring(0, 6).toLowerCase() != 'mailto')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5691 if ((urlValue.indexOf('@') != -1) && (urlValue.substring(0, 6).toLowerCase() != 'mailto')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5692 //Found an @ sign, prefix with mailto:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5693 urlValue = 'mailto:' + urlValue;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5694 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5695 /* :// not found adding */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5696 if (urlValue.substring(0, 1) != '#') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5697 //urlValue = 'http:/'+'/' + urlValue;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5698 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5699 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5700 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5701 el.setAttribute('href', urlValue);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5702 } else if (str !== null) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5703 var _span = this._getDoc().createElement('span');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5704 _span.innerHTML = el.innerHTML;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5705 Dom.addClass(_span, 'yui-non');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5706 el.parentNode.replaceChild(_span, el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5707 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5708 this.closeWindow();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5709 this.toolbar.set('disabled', false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5710 this.unsubscribe('afterExecCommand', _handleAEC, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5711 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5712 this.on('afterExecCommand', _handleAEC, this);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5713
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5714 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5715 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5716 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5717 * @method _handleCreateLinkWindowClose
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5718 * @description Handles the closing of the Link Properties Window.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5719 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5720 _handleCreateLinkWindowClose: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5721 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5722 this.currentElement = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5723 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5724 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5725 * @method render
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5726 * @description Calls the private method _render in a setTimeout to allow for other things on the page to continue to load.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5727 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5728 render: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5729 if (this._rendered) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5730 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5731 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5732 if (!this.DOMReady) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5733 this._queue[this._queue.length] = ['render', arguments];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5734 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5735 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5736 if (this.get('element')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5737 if (this.get('element').tagName) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5738 this._textarea = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5739 if (this.get('element').tagName.toLowerCase() !== 'textarea') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5740 this._textarea = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5741 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5742 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5743 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5744 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5745 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5746 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5747 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5748 this._rendered = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5749 var self = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5750 window.setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5751 self._render.call(self);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5752 }, 4);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5753 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5754 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5755 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5756 * @method _render
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5757 * @description Causes the toolbar and the editor to render and replace the textarea.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5758 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5759 _render: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5760 var self = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5761 this.set('textarea', this.get('element'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5762
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5763 this.get('element_cont').setStyle('display', 'none');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5764 this.get('element_cont').addClass(this.CLASS_CONTAINER);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5765
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5766 this.set('iframe', this._createIframe());
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5767
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5768 window.setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5769 self._setInitialContent.call(self);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5770 }, 10);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5771
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5772 this.get('editor_wrapper').appendChild(this.get('iframe').get('element'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5773
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5774 if (this.get('disabled')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5775 this._disableEditor(true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5776 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5777
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5778 var tbarConf = this.get('toolbar');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5779 //Create Toolbar instance
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5780 if (tbarConf instanceof Toolbar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5781 this.toolbar = tbarConf;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5782 //Set the toolbar to disabled until content is loaded
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5783 this.toolbar.set('disabled', true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5784 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5785 //Set the toolbar to disabled until content is loaded
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5786 tbarConf.disabled = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5787 this.toolbar = new Toolbar(this.get('toolbar_cont'), tbarConf);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5788 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5789
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5790 this.fireEvent('toolbarLoaded', { type: 'toolbarLoaded', target: this.toolbar });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5791
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5792
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5793 this.toolbar.on('toolbarCollapsed', function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5794 if (this.currentWindow) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5795 this.moveWindow();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5796 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5797 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5798 this.toolbar.on('toolbarExpanded', function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5799 if (this.currentWindow) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5800 this.moveWindow();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5801 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5802 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5803 this.toolbar.on('fontsizeClick', this._handleFontSize, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5804
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5805 this.toolbar.on('colorPickerClicked', function(o) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5806 this._handleColorPicker(o);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5807 return false; //Stop the buttonClick event
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5808 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5809
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5810 this.toolbar.on('alignClick', this._handleAlign, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5811 this.on('afterNodeChange', this._handleAfterNodeChange, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5812 this.toolbar.on('insertimageClick', this._handleInsertImageClick, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5813 this.on('windowinsertimageClose', this._handleInsertImageWindowClose, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5814 this.toolbar.on('createlinkClick', this._handleCreateLinkClick, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5815 this.on('windowcreatelinkClose', this._handleCreateLinkWindowClose, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5816
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5817
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5818 //Replace Textarea with editable area
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5819 this.get('parentNode').replaceChild(this.get('element_cont').get('element'), this.get('element'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5820
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5821
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5822 this.setStyle('visibility', 'hidden');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5823 this.setStyle('position', 'absolute');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5824 this.setStyle('top', '-9999px');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5825 this.setStyle('left', '-9999px');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5826 this.get('element_cont').appendChild(this.get('element'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5827 this.get('element_cont').setStyle('display', 'block');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5828
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5829
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5830 Dom.addClass(this.get('iframe').get('parentNode'), this.CLASS_EDITABLE_CONT);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5831 this.get('iframe').addClass(this.CLASS_EDITABLE);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5832
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5833 //Set height and width of editor container
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5834 this.get('element_cont').setStyle('width', this.get('width'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5835 Dom.setStyle(this.get('iframe').get('parentNode'), 'height', this.get('height'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5836
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5837 this.get('iframe').setStyle('width', '100%'); //WIDTH
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5838 this.get('iframe').setStyle('height', '100%');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5839
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5840 this._setupDD();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5841
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5842 window.setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5843 self._setupAfterElement.call(self);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5844 }, 0);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5845 this.fireEvent('afterRender', { type: 'afterRender', target: this });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5846 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5847 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5848 * @method execCommand
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5849 * @param {String} action The "execCommand" action to try to execute (Example: bold, insertimage, inserthtml)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5850 * @param {String} value (optional) The value for a given action such as action: fontname value: 'Verdana'
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5851 * @description This method attempts to try and level the differences in the various browsers and their support for execCommand actions
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5852 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5853 execCommand: function(action, value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5854 var beforeExec = this.fireEvent('beforeExecCommand', { type: 'beforeExecCommand', target: this, args: arguments });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5855 if ((beforeExec === false) || (this.STOP_EXEC_COMMAND)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5856 this.STOP_EXEC_COMMAND = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5857 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5858 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5859 this._lastCommand = action;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5860 this._setMarkupType(action);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5861 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5862 this._getWindow().focus();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5863 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5864 var exec = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5865
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5866 if (this.get('limitCommands')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5867 if (!this.toolbar.getButtonByValue(action)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5868 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5869 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5870 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5871
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5872 this.editorDirty = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5873
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5874 if ((typeof this['cmd_' + action.toLowerCase()] == 'function') && exec) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5875 var retValue = this['cmd_' + action.toLowerCase()](value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5876 exec = retValue[0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5877 if (retValue[1]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5878 action = retValue[1];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5879 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5880 if (retValue[2]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5881 value = retValue[2];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5882 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5883 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5884 if (exec) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5885 try {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5886 this._getDoc().execCommand(action, false, value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5887 } catch(e) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5888 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5889 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5890 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5891 this.on('afterExecCommand', function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5892 this.unsubscribeAll('afterExecCommand');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5893 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5894 }, this, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5895 this.fireEvent('afterExecCommand', { type: 'afterExecCommand', target: this });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5896
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5897 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5898 /* {{{ Command Overrides */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5899
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5900 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5901 * @method cmd_bold
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5902 * @param value Value passed from the execCommand method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5903 * @description This is an execCommand override method. It is called from execCommand when the execCommand('bold') is used.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5904 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5905 cmd_bold: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5906 if (!this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5907 var el = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5908 if (el && this._isElement(el, 'span') && this._hasSelection()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5909 if (el.style.fontWeight == 'bold') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5910 el.style.fontWeight = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5911 var b = this._getDoc().createElement('b'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5912 par = el.parentNode;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5913 par.replaceChild(b, el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5914 b.appendChild(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5915 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5916 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5917 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5918 return [true];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5919 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5920 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5921 * @method cmd_italic
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5922 * @param value Value passed from the execCommand method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5923 * @description This is an execCommand override method. It is called from execCommand when the execCommand('italic') is used.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5924 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5925
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5926 cmd_italic: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5927 if (!this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5928 var el = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5929 if (el && this._isElement(el, 'span') && this._hasSelection()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5930 if (el.style.fontStyle == 'italic') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5931 el.style.fontStyle = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5932 var i = this._getDoc().createElement('i'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5933 par = el.parentNode;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5934 par.replaceChild(i, el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5935 i.appendChild(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5936 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5937 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5938 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5939 return [true];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5940 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5941
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5942
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5943 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5944 * @method cmd_underline
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5945 * @param value Value passed from the execCommand method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5946 * @description This is an execCommand override method. It is called from execCommand when the execCommand('underline') is used.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5947 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5948 cmd_underline: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5949 if (!this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5950 var el = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5951 if (el && this._isElement(el, 'span')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5952 if (el.style.textDecoration == 'underline') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5953 el.style.textDecoration = 'none';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5954 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5955 el.style.textDecoration = 'underline';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5956 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5957 return [false];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5958 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5959 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5960 return [true];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5961 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5962 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5963 * @method cmd_backcolor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5964 * @param value Value passed from the execCommand method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5965 * @description This is an execCommand override method. It is called from execCommand when the execCommand('backcolor') is used.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5966 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5967 cmd_backcolor: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5968 var exec = true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5969 el = this._getSelectedElement(),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5970 action = 'backcolor';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5971
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5972 if (this.browser.gecko || this.browser.opera) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5973 this._setEditorStyle(true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5974 action = 'hilitecolor';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5975 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5976
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5977 if (!this._isElement(el, 'body') && !this._hasSelection()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5978 el.style.backgroundColor = value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5979 this._selectNode(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5980 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5981 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5982 if (this.get('insert')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5983 el = this._createInsertElement({ backgroundColor: value });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5984 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5985 this._createCurrentElement('span', { backgroundColor: value, color: el.style.color, fontSize: el.style.fontSize, fontFamily: el.style.fontFamily });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5986 this._selectNode(this.currentElement[0]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5987 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5988 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5989 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5990
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5991 return [exec, action];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5992 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5993 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5994 * @method cmd_forecolor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5995 * @param value Value passed from the execCommand method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5996 * @description This is an execCommand override method. It is called from execCommand when the execCommand('forecolor') is used.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5997 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5998 cmd_forecolor: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
5999 var exec = true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6000 el = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6001
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6002 if (!this._isElement(el, 'body') && !this._hasSelection()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6003 Dom.setStyle(el, 'color', value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6004 this._selectNode(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6005 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6006 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6007 if (this.get('insert')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6008 el = this._createInsertElement({ color: value });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6009 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6010 this._createCurrentElement('span', { color: value, fontSize: el.style.fontSize, fontFamily: el.style.fontFamily, backgroundColor: el.style.backgroundColor });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6011 this._selectNode(this.currentElement[0]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6012 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6013 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6014 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6015 return [exec];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6016 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6017 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6018 * @method cmd_unlink
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6019 * @param value Value passed from the execCommand method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6020 * @description This is an execCommand override method. It is called from execCommand when the execCommand('unlink') is used.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6021 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6022 cmd_unlink: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6023 this._swapEl(this.currentElement[0], 'span', function(el) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6024 el.className = 'yui-non';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6025 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6026 return [false];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6027 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6028 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6029 * @method cmd_createlink
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6030 * @param value Value passed from the execCommand method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6031 * @description This is an execCommand override method. It is called from execCommand when the execCommand('createlink') is used.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6032 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6033 cmd_createlink: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6034 var el = this._getSelectedElement(), _a = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6035 if (this._hasParent(el, 'a')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6036 this.currentElement[0] = this._hasParent(el, 'a');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6037 } else if (this._isElement(el, 'li')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6038 _a = this._getDoc().createElement('a');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6039 _a.innerHTML = el.innerHTML;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6040 el.innerHTML = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6041 el.appendChild(_a);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6042 this.currentElement[0] = _a;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6043 } else if (!this._isElement(el, 'a')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6044 this._createCurrentElement('a');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6045 _a = this._swapEl(this.currentElement[0], 'a');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6046 this.currentElement[0] = _a;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6047 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6048 this.currentElement[0] = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6049 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6050 return [false];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6051 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6052 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6053 * @method cmd_insertimage
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6054 * @param value Value passed from the execCommand method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6055 * @description This is an execCommand override method. It is called from execCommand when the execCommand('insertimage') is used.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6056 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6057 cmd_insertimage: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6058 var exec = true, _img = null, action = 'insertimage',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6059 el = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6060
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6061 if (value === '') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6062 value = this.get('blankimage');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6063 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6064
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6065 /*
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6066 * @knownissue Safari Cursor Position
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6067 * @browser Safari 2.x
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6068 * @description The issue here is that we have no way of knowing where the cursor position is
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6069 * inside of the iframe, so we have to place the newly inserted data in the best place that we can.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6070 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6071
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6072 if (this._isElement(el, 'img')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6073 this.currentElement[0] = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6074 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6075 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6076 if (this._getDoc().queryCommandEnabled(action)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6077 this._getDoc().execCommand(action, false, value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6078 var imgs = this._getDoc().getElementsByTagName('img');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6079 for (var i = 0; i < imgs.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6080 if (!YAHOO.util.Dom.hasClass(imgs[i], 'yui-img')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6081 YAHOO.util.Dom.addClass(imgs[i], 'yui-img');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6082 this.currentElement[0] = imgs[i];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6083 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6084 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6085 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6086 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6087 if (el == this._getDoc().body) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6088 _img = this._getDoc().createElement('img');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6089 _img.setAttribute('src', value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6090 YAHOO.util.Dom.addClass(_img, 'yui-img');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6091 this._getDoc().body.appendChild(_img);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6092 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6093 this._createCurrentElement('img');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6094 _img = this._getDoc().createElement('img');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6095 _img.setAttribute('src', value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6096 YAHOO.util.Dom.addClass(_img, 'yui-img');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6097 this.currentElement[0].parentNode.replaceChild(_img, this.currentElement[0]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6098 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6099 this.currentElement[0] = _img;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6100 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6101 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6102 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6103 return [exec];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6104 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6105 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6106 * @method cmd_inserthtml
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6107 * @param value Value passed from the execCommand method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6108 * @description This is an execCommand override method. It is called from execCommand when the execCommand('inserthtml') is used.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6109 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6110 cmd_inserthtml: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6111 var exec = true, action = 'inserthtml', _span = null, _range = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6112 /*
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6113 * @knownissue Safari cursor position
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6114 * @browser Safari 2.x
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6115 * @description The issue here is that we have no way of knowing where the cursor position is
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6116 * inside of the iframe, so we have to place the newly inserted data in the best place that we can.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6117 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6118 if (this.browser.webkit && !this._getDoc().queryCommandEnabled(action)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6119 this._createCurrentElement('img');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6120 _span = this._getDoc().createElement('span');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6121 _span.innerHTML = value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6122 this.currentElement[0].parentNode.replaceChild(_span, this.currentElement[0]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6123 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6124 } else if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6125 _range = this._getRange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6126 if (_range.item) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6127 _range.item(0).outerHTML = value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6128 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6129 _range.pasteHTML(value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6130 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6131 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6132 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6133 return [exec];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6134 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6135 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6136 * @method cmd_list
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6137 * @param tag The tag of the list you want to create (eg, ul or ol)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6138 * @description This is a combined execCommand override method. It is called from the cmd_insertorderedlist and cmd_insertunorderedlist methods.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6139 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6140 cmd_list: function(tag) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6141 var exec = true, list = null, li = 0, el = null, str = '',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6142 selEl = this._getSelectedElement(), action = 'insertorderedlist';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6143 if (tag == 'ul') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6144 action = 'insertunorderedlist';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6145 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6146 /*
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6147 * @knownissue Safari 2.+ doesn't support ordered and unordered lists
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6148 * @browser Safari 2.x
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6149 * The issue with this workaround is that when applied to a set of text
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6150 * that has BR's in it, Safari may or may not pick up the individual items as
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6151 * list items. This is fixed in WebKit (Safari 3)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6152 * 2.6.0: Seems there are still some issues with List Creation and Safari 3, reverting to previously working Safari 2.x code
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6153 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6154 //if ((this.browser.webkit && !this._getDoc().queryCommandEnabled(action))) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6155 if ((this.browser.webkit && !this.browser.webkit4) || (this.browser.opera)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6156 if (this._isElement(selEl, 'li') && this._isElement(selEl.parentNode, tag)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6157 el = selEl.parentNode;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6158 list = this._getDoc().createElement('span');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6159 YAHOO.util.Dom.addClass(list, 'yui-non');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6160 str = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6161 var lis = el.getElementsByTagName('li'), p_tag = ((this.browser.opera && this.get('ptags')) ? 'p' : 'div');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6162 for (li = 0; li < lis.length; li++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6163 str += '<' + p_tag + '>' + lis[li].innerHTML + '</' + p_tag + '>';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6164 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6165 list.innerHTML = str;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6166 this.currentElement[0] = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6167 this.currentElement[0].parentNode.replaceChild(list, this.currentElement[0]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6168 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6169 this._createCurrentElement(tag.toLowerCase());
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6170 list = this._getDoc().createElement(tag);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6171 for (li = 0; li < this.currentElement.length; li++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6172 var newli = this._getDoc().createElement('li');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6173 newli.innerHTML = this.currentElement[li].innerHTML + '<span class="yui-non">&nbsp;</span>&nbsp;';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6174 list.appendChild(newli);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6175 if (li > 0) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6176 this.currentElement[li].parentNode.removeChild(this.currentElement[li]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6177 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6178 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6179 var b_tag = ((this.browser.opera) ? '<BR>' : '<br>'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6180 items = list.firstChild.innerHTML.split(b_tag), i, item;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6181 if (items.length > 0) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6182 list.innerHTML = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6183 for (i = 0; i < items.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6184 item = this._getDoc().createElement('li');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6185 item.innerHTML = items[i];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6186 list.appendChild(item);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6187 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6188 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6189
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6190 this.currentElement[0].parentNode.replaceChild(list, this.currentElement[0]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6191 this.currentElement[0] = list;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6192 var _h = this.currentElement[0].firstChild;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6193 _h = Dom.getElementsByClassName('yui-non', 'span', _h)[0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6194 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6195 this._getSelection().setBaseAndExtent(_h, 1, _h, _h.innerText.length);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6196 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6197 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6198 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6199 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6200 el = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6201 if (this._isElement(el, 'li') && this._isElement(el.parentNode, tag) || (this.browser.ie && this._isElement(this._getRange().parentElement, 'li')) || (this.browser.ie && this._isElement(el, 'ul')) || (this.browser.ie && this._isElement(el, 'ol'))) { //we are in a list..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6202 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6203 if ((this.browser.ie && this._isElement(el, 'ul')) || (this.browser.ie && this._isElement(el, 'ol'))) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6204 el = el.getElementsByTagName('li')[0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6205 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6206 str = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6207 var lis2 = el.parentNode.getElementsByTagName('li');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6208 for (var j = 0; j < lis2.length; j++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6209 str += lis2[j].innerHTML + '<br>';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6210 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6211 var newEl = this._getDoc().createElement('span');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6212 newEl.innerHTML = str;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6213 el.parentNode.parentNode.replaceChild(newEl, el.parentNode);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6214 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6215 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6216 this._getDoc().execCommand(action, '', el.parentNode);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6217 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6218 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6219 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6220 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6221 if (this.browser.opera) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6222 var self = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6223 window.setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6224 var liso = self._getDoc().getElementsByTagName('li');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6225 for (var i = 0; i < liso.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6226 if (liso[i].innerHTML.toLowerCase() == '<br>') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6227 liso[i].parentNode.parentNode.removeChild(liso[i].parentNode);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6228 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6229 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6230 },30);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6231 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6232 if (this.browser.ie && exec) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6233 var html = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6234 if (this._getRange().html) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6235 html = '<li>' + this._getRange().html+ '</li>';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6236 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6237 var t = this._getRange().text.split('\n');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6238 if (t.length > 1) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6239 html = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6240 for (var ie = 0; ie < t.length; ie++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6241 html += '<li>' + t[ie] + '</li>';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6242 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6243 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6244 var txt = this._getRange().text;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6245 if (txt === '') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6246 html = '<li id="new_list_item">' + txt + '</li>';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6247 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6248 html = '<li>' + txt + '</li>';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6249 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6250 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6251 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6252 this._getRange().pasteHTML('<' + tag + '>' + html + '</' + tag + '>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6253 var new_item = this._getDoc().getElementById('new_list_item');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6254 if (new_item) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6255 var range = this._getDoc().body.createTextRange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6256 range.moveToElementText(new_item);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6257 range.collapse(false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6258 range.select();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6259 new_item.id = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6260 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6261 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6262 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6263 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6264 return exec;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6265 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6266 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6267 * @method cmd_insertorderedlist
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6268 * @param value Value passed from the execCommand method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6269 * @description This is an execCommand override method. It is called from execCommand when the execCommand('insertorderedlist ') is used.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6270 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6271 cmd_insertorderedlist: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6272 return [this.cmd_list('ol')];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6273 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6274 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6275 * @method cmd_insertunorderedlist
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6276 * @param value Value passed from the execCommand method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6277 * @description This is an execCommand override method. It is called from execCommand when the execCommand('insertunorderedlist') is used.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6278 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6279 cmd_insertunorderedlist: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6280 return [this.cmd_list('ul')];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6281 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6282 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6283 * @method cmd_fontname
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6284 * @param value Value passed from the execCommand method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6285 * @description This is an execCommand override method. It is called from execCommand when the execCommand('fontname') is used.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6286 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6287 cmd_fontname: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6288 var exec = true,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6289 selEl = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6290
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6291 this.currentFont = value;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6292 if (selEl && selEl.tagName && !this._hasSelection() && !this._isElement(selEl, 'body') && !this.get('insert')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6293 YAHOO.util.Dom.setStyle(selEl, 'font-family', value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6294 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6295 } else if (this.get('insert') && !this._hasSelection()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6296 var el = this._createInsertElement({ fontFamily: value });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6297 exec = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6298 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6299 return [exec];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6300 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6301 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6302 * @method cmd_fontsize
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6303 * @param value Value passed from the execCommand method
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6304 * @description This is an execCommand override method. It is called from execCommand when the execCommand('fontsize') is used.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6305 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6306 cmd_fontsize: function(value) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6307 var el = null, go = true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6308 el = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6309 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6310 if (this.currentElement[0]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6311 if (el == this.currentElement[0]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6312 go = false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6313 YAHOO.util.Dom.setStyle(el, 'fontSize', value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6314 this._selectNode(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6315 this.currentElement[0] = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6316 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6317 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6318 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6319 if (go) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6320 if (!this._isElement(this._getSelectedElement(), 'body') && (!this._hasSelection())) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6321 el = this._getSelectedElement();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6322 YAHOO.util.Dom.setStyle(el, 'fontSize', value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6323 if (this.get('insert') && this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6324 var r = this._getRange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6325 r.collapse(false);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6326 r.select();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6327 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6328 this._selectNode(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6329 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6330 } else if (this.currentElement && (this.currentElement.length > 0) && (!this._hasSelection()) && (!this.get('insert'))) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6331 YAHOO.util.Dom.setStyle(this.currentElement, 'fontSize', value);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6332 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6333 if (this.get('insert') && !this._hasSelection()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6334 el = this._createInsertElement({ fontSize: value });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6335 this.currentElement[0] = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6336 this._selectNode(this.currentElement[0]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6337 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6338 this._createCurrentElement('span', {'fontSize': value, fontFamily: el.style.fontFamily, color: el.style.color, backgroundColor: el.style.backgroundColor });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6339 this._selectNode(this.currentElement[0]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6340 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6341 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6342 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6343 return [false];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6344 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6345 /* }}} */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6346 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6347 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6348 * @method _swapEl
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6349 * @param {HTMLElement} el The element to swap with
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6350 * @param {String} tagName The tagname of the element that you wish to create
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6351 * @param {Function} callback (optional) A function to run on the element after it is created, but before it is replaced. An element reference is passed to this function.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6352 * @description This function will create a new element in the DOM and populate it with the contents of another element. Then it will assume it's place.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6353 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6354 _swapEl: function(el, tagName, callback) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6355 var _el = this._getDoc().createElement(tagName);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6356 if (el) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6357 _el.innerHTML = el.innerHTML;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6358 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6359 if (typeof callback == 'function') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6360 callback.call(this, _el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6361 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6362 if (el) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6363 el.parentNode.replaceChild(_el, el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6364 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6365 return _el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6366 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6367 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6368 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6369 * @method _createInsertElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6370 * @description Creates a new "currentElement" then adds some text (and other things) to make it selectable and stylable. Then the user can continue typing.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6371 * @param {Object} css (optional) Object literal containing styles to apply to the new element.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6372 * @return {HTMLElement}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6373 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6374 _createInsertElement: function(css) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6375 this._createCurrentElement('span', css);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6376 var el = this.currentElement[0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6377 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6378 //Little Safari Hackery here..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6379 el.innerHTML = '<span class="yui-non">&nbsp;</span>';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6380 el = el.firstChild;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6381 this._getSelection().setBaseAndExtent(el, 1, el, el.innerText.length);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6382 } else if (this.browser.ie || this.browser.opera) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6383 el.innerHTML = '&nbsp;';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6384 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6385 this.focus();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6386 this._selectNode(el, true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6387 return el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6388 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6389 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6390 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6391 * @method _createCurrentElement
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6392 * @param {String} tagName (optional defaults to a) The tagname of the element that you wish to create
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6393 * @param {Object} tagStyle (optional) Object literal containing styles to apply to the new element.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6394 * @description This is a work around for the various browser issues with execCommand. This method will run <code>execCommand('fontname', false, 'yui-tmp')</code> on the given selection.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6395 * It will then search the document for an element with the font-family set to <strong>yui-tmp</strong> and replace that with another span that has other information in it, then assign the new span to the
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6396 * <code>this.currentElement</code> array, so we now have element references to the elements that were just modified. At this point we can use standard DOM manipulation to change them as we see fit.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6397 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6398 _createCurrentElement: function(tagName, tagStyle) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6399 tagName = ((tagName) ? tagName : 'a');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6400 var tar = null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6401 el = [],
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6402 _doc = this._getDoc();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6403
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6404 if (this.currentFont) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6405 if (!tagStyle) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6406 tagStyle = {};
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6407 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6408 tagStyle.fontFamily = this.currentFont;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6409 this.currentFont = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6410 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6411 this.currentElement = [];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6412
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6413 var _elCreate = function(tagName, tagStyle) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6414 var el = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6415 tagName = ((tagName) ? tagName : 'span');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6416 tagName = tagName.toLowerCase();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6417 switch (tagName) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6418 case 'h1':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6419 case 'h2':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6420 case 'h3':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6421 case 'h4':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6422 case 'h5':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6423 case 'h6':
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6424 el = _doc.createElement(tagName);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6425 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6426 default:
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6427 el = _doc.createElement(tagName);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6428 if (tagName === 'span') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6429 YAHOO.util.Dom.addClass(el, 'yui-tag-' + tagName);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6430 YAHOO.util.Dom.addClass(el, 'yui-tag');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6431 el.setAttribute('tag', tagName);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6432 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6433
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6434 for (var k in tagStyle) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6435 if (YAHOO.lang.hasOwnProperty(tagStyle, k)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6436 el.style[k] = tagStyle[k];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6437 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6438 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6439 break;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6440 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6441 return el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6442 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6443
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6444 if (!this._hasSelection()) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6445 if (this._getDoc().queryCommandEnabled('insertimage')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6446 this._getDoc().execCommand('insertimage', false, 'yui-tmp-img');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6447 var imgs = this._getDoc().getElementsByTagName('img');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6448 for (var j = 0; j < imgs.length; j++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6449 if (imgs[j].getAttribute('src', 2) == 'yui-tmp-img') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6450 el = _elCreate(tagName, tagStyle);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6451 imgs[j].parentNode.replaceChild(el, imgs[j]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6452 this.currentElement[this.currentElement.length] = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6453 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6454 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6455 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6456 if (this.currentEvent) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6457 tar = YAHOO.util.Event.getTarget(this.currentEvent);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6458 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6459 //For Safari..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6460 tar = this._getDoc().body;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6461 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6462 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6463 if (tar) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6464 /*
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6465 * @knownissue Safari Cursor Position
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6466 * @browser Safari 2.x
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6467 * @description The issue here is that we have no way of knowing where the cursor position is
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6468 * inside of the iframe, so we have to place the newly inserted data in the best place that we can.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6469 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6470 el = _elCreate(tagName, tagStyle);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6471 if (this._isElement(tar, 'body') || this._isElement(tar, 'html')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6472 if (this._isElement(tar, 'html')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6473 tar = this._getDoc().body;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6474 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6475 tar.appendChild(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6476 } else if (tar.nextSibling) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6477 tar.parentNode.insertBefore(el, tar.nextSibling);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6478 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6479 tar.parentNode.appendChild(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6480 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6481 //this.currentElement = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6482 this.currentElement[this.currentElement.length] = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6483 this.currentEvent = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6484 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6485 //Force Safari to focus the new element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6486 this._getSelection().setBaseAndExtent(el, 0, el, 0);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6487 if (this.browser.webkit3) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6488 this._getSelection().collapseToStart();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6489 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6490 this._getSelection().collapse(true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6491 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6492 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6493 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6494 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6495 //Force CSS Styling for this action...
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6496 this._setEditorStyle(true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6497 this._getDoc().execCommand('fontname', false, 'yui-tmp');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6498 var _tmp = [], __tmp, __els = ['font', 'span', 'i', 'b', 'u'];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6499
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6500 if (!this._isElement(this._getSelectedElement(), 'body')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6501 __els[__els.length] = this._getDoc().getElementsByTagName(this._getSelectedElement().tagName);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6502 __els[__els.length] = this._getDoc().getElementsByTagName(this._getSelectedElement().parentNode.tagName);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6503 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6504 for (var _els = 0; _els < __els.length; _els++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6505 var _tmp1 = this._getDoc().getElementsByTagName(__els[_els]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6506 for (var e = 0; e < _tmp1.length; e++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6507 _tmp[_tmp.length] = _tmp1[e];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6508 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6509 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6510
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6511
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6512 for (var i = 0; i < _tmp.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6513 if ((YAHOO.util.Dom.getStyle(_tmp[i], 'font-family') == 'yui-tmp') || (_tmp[i].face && (_tmp[i].face == 'yui-tmp'))) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6514 if (tagName !== 'span') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6515 el = _elCreate(tagName, tagStyle);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6516 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6517 el = _elCreate(_tmp[i].tagName, tagStyle);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6518 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6519 el.innerHTML = _tmp[i].innerHTML;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6520 if (this._isElement(_tmp[i], 'ol') || (this._isElement(_tmp[i], 'ul'))) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6521 var fc = _tmp[i].getElementsByTagName('li')[0];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6522 _tmp[i].style.fontFamily = 'inherit';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6523 fc.style.fontFamily = 'inherit';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6524 el.innerHTML = fc.innerHTML;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6525 fc.innerHTML = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6526 fc.appendChild(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6527 this.currentElement[this.currentElement.length] = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6528 } else if (this._isElement(_tmp[i], 'li')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6529 _tmp[i].innerHTML = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6530 _tmp[i].appendChild(el);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6531 _tmp[i].style.fontFamily = 'inherit';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6532 this.currentElement[this.currentElement.length] = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6533 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6534 if (_tmp[i].parentNode) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6535 _tmp[i].parentNode.replaceChild(el, _tmp[i]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6536 this.currentElement[this.currentElement.length] = el;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6537 this.currentEvent = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6538 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6539 //Force Safari to focus the new element
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6540 this._getSelection().setBaseAndExtent(el, 0, el, 0);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6541 if (this.browser.webkit3) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6542 this._getSelection().collapseToStart();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6543 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6544 this._getSelection().collapse(true);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6545 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6546 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6547 if (this.browser.ie && tagStyle && tagStyle.fontSize) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6548 this._getSelection().empty();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6549 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6550 if (this.browser.gecko) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6551 this._getSelection().collapseToStart();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6552 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6553 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6554 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6555 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6556 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6557 var len = this.currentElement.length;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6558 for (var o = 0; o < len; o++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6559 if ((o + 1) != len) { //Skip the last one in the list
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6560 if (this.currentElement[o] && this.currentElement[o].nextSibling) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6561 if (this._isElement(this.currentElement[o], 'br')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6562 this.currentElement[this.currentElement.length] = this.currentElement[o].nextSibling;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6563 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6564 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6565 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6566 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6567 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6568 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6569 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6570 * @method saveHTML
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6571 * @description Cleans the HTML with the cleanHTML method then places that string back into the textarea.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6572 * @return String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6573 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6574 saveHTML: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6575 var html = this.cleanHTML();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6576 if (this._textarea) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6577 this.get('element').value = html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6578 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6579 this.get('element').innerHTML = html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6580 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6581 if (this.get('saveEl') !== this.get('element')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6582 var out = this.get('saveEl');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6583 if (Lang.isString(out)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6584 out = Dom.get(out);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6585 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6586 if (out) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6587 if (out.tagName.toLowerCase() === 'textarea') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6588 out.value = html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6589 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6590 out.innerHTML = html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6591 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6592 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6593 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6594 return html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6595 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6596 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6597 * @method setEditorHTML
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6598 * @param {String} incomingHTML The html content to load into the editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6599 * @description Loads HTML into the editors body
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6600 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6601 setEditorHTML: function(incomingHTML) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6602 var html = this._cleanIncomingHTML(incomingHTML);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6603 html = html.replace(/RIGHT_BRACKET/gi, '{');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6604 html = html.replace(/LEFT_BRACKET/gi, '}');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6605 this._getDoc().body.innerHTML = html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6606 this.nodeChange();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6607 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6608 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6609 * @method getEditorHTML
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6610 * @description Gets the unprocessed/unfiltered HTML from the editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6611 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6612 getEditorHTML: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6613 try {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6614 var b = this._getDoc().body;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6615 if (b === null) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6616 return null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6617 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6618 return this._getDoc().body.innerHTML;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6619 } catch (e) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6620 return '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6621 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6622 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6623 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6624 * @method show
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6625 * @description This method needs to be called if the Editor was hidden (like in a TabView or Panel). It is used to reset the editor after being in a container that was set to display none.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6626 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6627 show: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6628 if (this.browser.gecko) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6629 this._setDesignMode('on');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6630 this.focus();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6631 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6632 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6633 var self = this;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6634 window.setTimeout(function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6635 self._setInitialContent.call(self);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6636 }, 10);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6637 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6638 //Adding this will close all other Editor window's when showing this one.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6639 if (this.currentWindow) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6640 this.closeWindow();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6641 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6642 //Put the iframe back in place
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6643 this.get('iframe').setStyle('position', 'static');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6644 this.get('iframe').setStyle('left', '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6645 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6646 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6647 * @method hide
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6648 * @description This method needs to be called if the Editor is to be hidden (like in a TabView or Panel). It should be called to clear timeouts and close open editor windows.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6649 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6650 hide: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6651 //Adding this will close all other Editor window's.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6652 if (this.currentWindow) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6653 this.closeWindow();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6654 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6655 if (this._fixNodesTimer) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6656 clearTimeout(this._fixNodesTimer);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6657 this._fixNodesTimer = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6658 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6659 if (this._nodeChangeTimer) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6660 clearTimeout(this._nodeChangeTimer);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6661 this._nodeChangeTimer = null;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6662 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6663 this._lastNodeChange = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6664 //Move the iframe off of the screen, so that in containers with visiblity hidden, IE will not cover other elements.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6665 this.get('iframe').setStyle('position', 'absolute');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6666 this.get('iframe').setStyle('left', '-9999px');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6667 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6668 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6669 * @method _cleanIncomingHTML
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6670 * @param {String} html The unfiltered HTML
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6671 * @description Process the HTML with a few regexes to clean it up and stabilize the input
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6672 * @return {String} The filtered HTML
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6673 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6674 _cleanIncomingHTML: function(html) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6675 html = html.replace(/{/gi, 'RIGHT_BRACKET');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6676 html = html.replace(/}/gi, 'LEFT_BRACKET');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6677
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6678 html = html.replace(/<strong([^>]*)>/gi, '<b$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6679 html = html.replace(/<\/strong>/gi, '</b>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6680
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6681 //replace embed before em check
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6682 html = html.replace(/<embed([^>]*)>/gi, '<YUI_EMBED$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6683 html = html.replace(/<\/embed>/gi, '</YUI_EMBED>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6684
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6685 html = html.replace(/<em([^>]*)>/gi, '<i$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6686 html = html.replace(/<\/em>/gi, '</i>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6687 html = html.replace(/_moz_dirty=""/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6688
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6689 //Put embed tags back in..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6690 html = html.replace(/<YUI_EMBED([^>]*)>/gi, '<embed$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6691 html = html.replace(/<\/YUI_EMBED>/gi, '</embed>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6692 if (this.get('plainText')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6693 html = html.replace(/\n/g, '<br>').replace(/\r/g, '<br>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6694 html = html.replace(/ /gi, '&nbsp;&nbsp;'); //Replace all double spaces
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6695 html = html.replace(/\t/gi, '&nbsp;&nbsp;&nbsp;&nbsp;'); //Replace all tabs
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6696 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6697 //Removing Script Tags from the Editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6698 html = html.replace(/<script([^>]*)>/gi, '<bad>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6699 html = html.replace(/<\/script([^>]*)>/gi, '</bad>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6700 html = html.replace(/&lt;script([^>]*)&gt;/gi, '<bad>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6701 html = html.replace(/&lt;\/script([^>]*)&gt;/gi, '</bad>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6702 //Replace the line feeds
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6703 html = html.replace(/\r\n/g, '<YUI_LF>').replace(/\n/g, '<YUI_LF>').replace(/\r/g, '<YUI_LF>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6704
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6705 //Remove Bad HTML elements (used to be script nodes)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6706 html = html.replace(new RegExp('<bad([^>]*)>(.*?)<\/bad>', 'gi'), '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6707 //Replace the lines feeds
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6708 html = html.replace(/<YUI_LF>/g, '\n');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6709 return html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6710 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6711 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6712 * @method cleanHTML
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6713 * @param {String} html The unfiltered HTML
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6714 * @description Process the HTML with a few regexes to clean it up and stabilize the output
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6715 * @return {String} The filtered HTML
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6716 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6717 cleanHTML: function(html) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6718 //Start Filtering Output
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6719 //Begin RegExs..
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6720 if (!html) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6721 html = this.getEditorHTML();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6722 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6723 var markup = this.get('markup');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6724 //Make some backups...
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6725 html = this.pre_filter_linebreaks(html, markup);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6726
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6727 //Filter MS Word
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6728 html = this.filter_msword(html);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6729
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6730 html = html.replace(/<img([^>]*)\/>/gi, '<YUI_IMG$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6731 html = html.replace(/<img([^>]*)>/gi, '<YUI_IMG$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6732
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6733 html = html.replace(/<input([^>]*)\/>/gi, '<YUI_INPUT$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6734 html = html.replace(/<input([^>]*)>/gi, '<YUI_INPUT$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6735
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6736 html = html.replace(/<ul([^>]*)>/gi, '<YUI_UL$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6737 html = html.replace(/<\/ul>/gi, '<\/YUI_UL>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6738 html = html.replace(/<blockquote([^>]*)>/gi, '<YUI_BQ$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6739 html = html.replace(/<\/blockquote>/gi, '<\/YUI_BQ>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6740
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6741 html = html.replace(/<embed([^>]*)>/gi, '<YUI_EMBED$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6742 html = html.replace(/<\/embed>/gi, '<\/YUI_EMBED>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6743
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6744 //Convert b and i tags to strong and em tags
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6745 if ((markup == 'semantic') || (markup == 'xhtml')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6746 html = html.replace(/<i(\s+[^>]*)?>/gi, '<em$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6747 html = html.replace(/<\/i>/gi, '</em>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6748 html = html.replace(/<b(\s+[^>]*)?>/gi, '<strong$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6749 html = html.replace(/<\/b>/gi, '</strong>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6750 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6751
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6752 html = html.replace(/_moz_dirty=""/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6753
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6754 //normalize strikethrough
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6755 html = html.replace(/<strike/gi, '<span style="text-decoration: line-through;"');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6756 html = html.replace(/\/strike>/gi, '/span>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6757
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6758
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6759 //Case Changing
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6760 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6761 html = html.replace(/text-decoration/gi, 'text-decoration');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6762 html = html.replace(/font-weight/gi, 'font-weight');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6763 html = html.replace(/_width="([^>]*)"/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6764 html = html.replace(/_height="([^>]*)"/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6765 //Cleanup Image URL's
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6766 var url = this._baseHREF.replace(/\//gi, '\\/'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6767 re = new RegExp('src="' + url, 'gi');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6768 html = html.replace(re, 'src="');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6769 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6770 html = html.replace(/<font/gi, '<font');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6771 html = html.replace(/<\/font>/gi, '</font>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6772 html = html.replace(/<span/gi, '<span');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6773 html = html.replace(/<\/span>/gi, '</span>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6774 if ((markup == 'semantic') || (markup == 'xhtml') || (markup == 'css')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6775 html = html.replace(new RegExp('<font([^>]*)face="([^>]*)">(.*?)<\/font>', 'gi'), '<span $1 style="font-family: $2;">$3</span>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6776 html = html.replace(/<u/gi, '<span style="text-decoration: underline;"');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6777 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6778 html = html.replace(new RegExp('<span class="Apple-style-span" style="font-weight: bold;">([^>]*)<\/span>', 'gi'), '<strong>$1</strong>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6779 html = html.replace(new RegExp('<span class="Apple-style-span" style="font-style: italic;">([^>]*)<\/span>', 'gi'), '<em>$1</em>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6780 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6781 html = html.replace(/\/u>/gi, '/span>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6782 if (markup == 'css') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6783 html = html.replace(/<em([^>]*)>/gi, '<i$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6784 html = html.replace(/<\/em>/gi, '</i>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6785 html = html.replace(/<strong([^>]*)>/gi, '<b$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6786 html = html.replace(/<\/strong>/gi, '</b>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6787 html = html.replace(/<b/gi, '<span style="font-weight: bold;"');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6788 html = html.replace(/\/b>/gi, '/span>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6789 html = html.replace(/<i/gi, '<span style="font-style: italic;"');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6790 html = html.replace(/\/i>/gi, '/span>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6791 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6792 html = html.replace(/ /gi, ' '); //Replace all double spaces and replace with a single
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6793 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6794 html = html.replace(/<u/gi, '<u');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6795 html = html.replace(/\/u>/gi, '/u>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6796 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6797 html = html.replace(/<ol([^>]*)>/gi, '<ol$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6798 html = html.replace(/\/ol>/gi, '/ol>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6799 html = html.replace(/<li/gi, '<li');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6800 html = html.replace(/\/li>/gi, '/li>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6801 html = this.filter_safari(html);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6802
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6803 html = this.filter_internals(html);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6804
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6805 html = this.filter_all_rgb(html);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6806
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6807 //Replace our backups with the real thing
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6808 html = this.post_filter_linebreaks(html, markup);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6809
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6810 if (markup == 'xhtml') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6811 html = html.replace(/<YUI_IMG([^>]*)>/g, '<img $1 />');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6812 html = html.replace(/<YUI_INPUT([^>]*)>/g, '<input $1 />');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6813 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6814 html = html.replace(/<YUI_IMG([^>]*)>/g, '<img $1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6815 html = html.replace(/<YUI_INPUT([^>]*)>/g, '<input $1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6816 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6817 html = html.replace(/<YUI_UL([^>]*)>/g, '<ul$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6818 html = html.replace(/<\/YUI_UL>/g, '<\/ul>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6819
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6820 html = this.filter_invalid_lists(html);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6821
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6822 html = html.replace(/<YUI_BQ([^>]*)>/g, '<blockquote$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6823 html = html.replace(/<\/YUI_BQ>/g, '<\/blockquote>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6824
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6825 html = html.replace(/<YUI_EMBED([^>]*)>/g, '<embed$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6826 html = html.replace(/<\/YUI_EMBED>/g, '<\/embed>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6827
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6828 //This should fix &amp;'s in URL's
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6829 html = html.replace(/ &amp; /gi, ' YUI_AMP ');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6830 html = html.replace(/ &amp;/gi, ' YUI_AMP_F ');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6831 html = html.replace(/&amp; /gi, ' YUI_AMP_R ');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6832 html = html.replace(/&amp;/gi, '&');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6833 html = html.replace(/ YUI_AMP /gi, ' &amp; ');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6834 html = html.replace(/ YUI_AMP_F /gi, ' &amp;');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6835 html = html.replace(/ YUI_AMP_R /gi, '&amp; ');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6836
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6837 //Trim the output, removing whitespace from the beginning and end
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6838 html = YAHOO.lang.trim(html);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6839
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6840 if (this.get('removeLineBreaks')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6841 html = html.replace(/\n/g, '').replace(/\r/g, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6842 html = html.replace(/ /gi, ' '); //Replace all double spaces and replace with a single
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6843 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6844
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6845 for (var v in this.invalidHTML) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6846 if (YAHOO.lang.hasOwnProperty(this.invalidHTML, v)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6847 if (Lang.isObject(v) && v.keepContents) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6848 html = html.replace(new RegExp('<' + v + '([^>]*)>(.*?)<\/' + v + '>', 'gi'), '$1');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6849 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6850 html = html.replace(new RegExp('<' + v + '([^>]*)>(.*?)<\/' + v + '>', 'gi'), '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6851 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6852 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6853 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6854
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6855 /* LATER -- Add DOM manipulation
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6856 console.log(html);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6857 var frag = document.createDocumentFragment();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6858 frag.innerHTML = html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6859
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6860 var ps = frag.getElementsByTagName('p'),
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6861 len = ps.length;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6862 for (var i = 0; i < len; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6863 var ps2 = ps[i].getElementsByTagName('p');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6864 if (ps2.length) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6865
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6866 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6867
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6868 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6869 html = frag.innerHTML;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6870 console.log(html);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6871 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6872
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6873 this.fireEvent('cleanHTML', { type: 'cleanHTML', target: this, html: html });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6874
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6875 return html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6876 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6877 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6878 * @method filter_msword
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6879 * @param String html The HTML string to filter
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6880 * @description Filters out msword html attributes and other junk. Activate with filterWord: true in config
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6881 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6882 filter_msword: function(html) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6883 if (!this.get('filterWord')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6884 return html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6885 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6886 //Remove the ms o: tags
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6887 html = html.replace(/<o:p>\s*<\/o:p>/g, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6888 html = html.replace(/<o:p>[\s\S]*?<\/o:p>/g, '&nbsp;');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6889
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6890 //Remove the ms w: tags
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6891 html = html.replace( /<w:[^>]*>[\s\S]*?<\/w:[^>]*>/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6892
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6893 //Remove mso-? styles.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6894 html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6895
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6896 //Remove more bogus MS styles.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6897 html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6898 html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6899 html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6900 html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6901 html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6902 html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" );
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6903 html = html.replace( /\s*tab-stops:[^;"]*;?/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6904 html = html.replace( /\s*tab-stops:[^"]*/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6905
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6906 //Remove XML declarations
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6907 html = html.replace(/<\\?\?xml[^>]*>/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6908
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6909 //Remove lang
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6910 html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6911
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6912 //Remove language tags
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6913 html = html.replace( /<(\w[^>]*) language=([^ |>]*)([^>]*)/gi, "<$1$3");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6914
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6915 //Remove onmouseover and onmouseout events (from MS Word comments effect)
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6916 html = html.replace( /<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi, "<$1$3");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6917 html = html.replace( /<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi, "<$1$3");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6918
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6919 return html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6920 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6921 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6922 * @method filter_invalid_lists
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6923 * @param String html The HTML string to filter
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6924 * @description Filters invalid ol and ul list markup, converts this: <li></li><ol>..</ol> to this: <li></li><li><ol>..</ol></li>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6925 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6926 filter_invalid_lists: function(html) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6927 html = html.replace(/<\/li>\n/gi, '</li>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6928
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6929 html = html.replace(/<\/li><ol>/gi, '</li><li><ol>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6930 html = html.replace(/<\/ol>/gi, '</ol></li>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6931 html = html.replace(/<\/ol><\/li>\n/gi, "</ol>");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6932
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6933 html = html.replace(/<\/li><ul>/gi, '</li><li><ul>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6934 html = html.replace(/<\/ul>/gi, '</ul></li>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6935 html = html.replace(/<\/ul><\/li>\n?/gi, "</ul>");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6936
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6937 html = html.replace(/<\/li>/gi, "</li>");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6938 html = html.replace(/<\/ol>/gi, "</ol>");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6939 html = html.replace(/<ol>/gi, "<ol>");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6940 html = html.replace(/<ul>/gi, "<ul>");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6941 return html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6942 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6943 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6944 * @method filter_safari
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6945 * @param String html The HTML string to filter
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6946 * @description Filters strings specific to Safari
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6947 * @return String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6948 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6949 filter_safari: function(html) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6950 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6951 //<span class="Apple-tab-span" style="white-space:pre"> </span>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6952 html = html.replace(/<span class="Apple-tab-span" style="white-space:pre">([^>])<\/span>/gi, '&nbsp;&nbsp;&nbsp;&nbsp;');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6953 html = html.replace(/Apple-style-span/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6954 html = html.replace(/style="line-height: normal;"/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6955 html = html.replace(/yui-wk-div/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6956 html = html.replace(/yui-wk-p/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6957
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6958
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6959 //Remove bogus LI's
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6960 html = html.replace(/<li><\/li>/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6961 html = html.replace(/<li> <\/li>/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6962 html = html.replace(/<li> <\/li>/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6963 //Remove bogus DIV's - updated from just removing the div's to replacing /div with a break
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6964 if (this.get('ptags')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6965 html = html.replace(/<div([^>]*)>/g, '<p$1>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6966 html = html.replace(/<\/div>/gi, '</p>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6967 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6968 //html = html.replace(/<div>/gi, '<br>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6969 html = html.replace(/<div([^>]*)>([ tnr]*)<\/div>/gi, '<br>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6970 html = html.replace(/<\/div>/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6971 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6972 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6973 return html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6974 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6975 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6976 * @method filter_internals
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6977 * @param String html The HTML string to filter
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6978 * @description Filters internal RTE strings and bogus attrs we don't want
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6979 * @return String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6980 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6981 filter_internals: function(html) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6982 html = html.replace(/\r/g, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6983 //Fix stuff we don't want
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6984 html = html.replace(/<\/?(body|head|html)[^>]*>/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6985 //Fix last BR in LI
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6986 html = html.replace(/<YUI_BR><\/li>/gi, '</li>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6987
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6988 html = html.replace(/yui-tag-span/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6989 html = html.replace(/yui-tag/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6990 html = html.replace(/yui-non/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6991 html = html.replace(/yui-img/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6992 html = html.replace(/ tag="span"/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6993 html = html.replace(/ class=""/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6994 html = html.replace(/ style=""/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6995 html = html.replace(/ class=" "/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6996 html = html.replace(/ class=" "/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6997 html = html.replace(/ target=""/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6998 html = html.replace(/ title=""/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
6999
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7000 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7001 html = html.replace(/ class= /gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7002 html = html.replace(/ class= >/gi, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7003 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7004
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7005 return html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7006 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7007 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7008 * @method filter_all_rgb
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7009 * @param String str The HTML string to filter
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7010 * @description Converts all RGB color strings found in passed string to a hex color, example: style="color: rgb(0, 255, 0)" converts to style="color: #00ff00"
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7011 * @return String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7012 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7013 filter_all_rgb: function(str) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7014 var exp = new RegExp("rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)", "gi");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7015 var arr = str.match(exp);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7016 if (Lang.isArray(arr)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7017 for (var i = 0; i < arr.length; i++) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7018 var color = this.filter_rgb(arr[i]);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7019 str = str.replace(arr[i].toString(), color);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7020 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7021 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7022
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7023 return str;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7024 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7025 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7026 * @method filter_rgb
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7027 * @param String css The CSS string containing rgb(#,#,#);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7028 * @description Converts an RGB color string to a hex color, example: rgb(0, 255, 0) converts to #00ff00
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7029 * @return String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7030 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7031 filter_rgb: function(css) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7032 if (css.toLowerCase().indexOf('rgb') != -1) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7033 var exp = new RegExp("(.*?)rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)(.*?)", "gi");
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7034 var rgb = css.replace(exp, "$1,$2,$3,$4,$5").split(',');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7035
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7036 if (rgb.length == 5) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7037 var r = parseInt(rgb[1], 10).toString(16);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7038 var g = parseInt(rgb[2], 10).toString(16);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7039 var b = parseInt(rgb[3], 10).toString(16);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7040
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7041 r = r.length == 1 ? '0' + r : r;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7042 g = g.length == 1 ? '0' + g : g;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7043 b = b.length == 1 ? '0' + b : b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7044
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7045 css = "#" + r + g + b;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7046 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7047 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7048 return css;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7049 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7050 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7051 * @method pre_filter_linebreaks
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7052 * @param String html The HTML to filter
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7053 * @param String markup The markup type to filter to
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7054 * @description HTML Pre Filter
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7055 * @return String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7056 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7057 pre_filter_linebreaks: function(html, markup) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7058 if (this.browser.webkit) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7059 html = html.replace(/<br class="khtml-block-placeholder">/gi, '<YUI_BR>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7060 html = html.replace(/<br class="webkit-block-placeholder">/gi, '<YUI_BR>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7061 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7062 html = html.replace(/<br>/gi, '<YUI_BR>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7063 html = html.replace(/<br (.*?)>/gi, '<YUI_BR>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7064 html = html.replace(/<br\/>/gi, '<YUI_BR>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7065 html = html.replace(/<br \/>/gi, '<YUI_BR>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7066 html = html.replace(/<div><YUI_BR><\/div>/gi, '<YUI_BR>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7067 html = html.replace(/<p>(&nbsp;|&#160;)<\/p>/g, '<YUI_BR>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7068 html = html.replace(/<p><br>&nbsp;<\/p>/gi, '<YUI_BR>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7069 html = html.replace(/<p>&nbsp;<\/p>/gi, '<YUI_BR>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7070 //Fix last BR
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7071 html = html.replace(/<YUI_BR>$/, '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7072 //Fix last BR in P
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7073 html = html.replace(/<YUI_BR><\/p>/g, '</p>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7074 if (this.browser.ie) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7075 html = html.replace(/&nbsp;&nbsp;&nbsp;&nbsp;/g, '\t');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7076 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7077 return html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7078 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7079 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7080 * @method post_filter_linebreaks
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7081 * @param String html The HTML to filter
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7082 * @param String markup The markup type to filter to
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7083 * @description HTML Pre Filter
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7084 * @return String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7085 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7086 post_filter_linebreaks: function(html, markup) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7087 if (markup == 'xhtml') {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7088 html = html.replace(/<YUI_BR>/g, '<br />');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7089 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7090 html = html.replace(/<YUI_BR>/g, '<br>');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7091 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7092 return html;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7093 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7094 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7095 * @method clearEditorDoc
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7096 * @description Clear the doc of the Editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7097 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7098 clearEditorDoc: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7099 this._getDoc().body.innerHTML = '&nbsp;';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7100 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7101 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7102 * @method openWindow
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7103 * @description Override Method for Advanced Editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7104 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7105 openWindow: function(win) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7106 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7107 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7108 * @method moveWindow
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7109 * @description Override Method for Advanced Editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7110 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7111 moveWindow: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7112 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7113 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7114 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7115 * @method _closeWindow
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7116 * @description Override Method for Advanced Editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7117 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7118 _closeWindow: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7119 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7120 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7121 * @method closeWindow
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7122 * @description Override Method for Advanced Editor
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7123 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7124 closeWindow: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7125 //this.unsubscribeAll('afterExecCommand');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7126 this.toolbar.resetAllButtons();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7127 this.focus();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7128 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7129 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7130 * @method destroy
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7131 * @description Destroys the editor, all of it's elements and objects.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7132 * @return {Boolean}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7133 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7134 destroy: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7135 if (this._nodeChangeDelayTimer) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7136 clearTimeout(this._nodeChangeDelayTimer);
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7137 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7138 this.hide();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7139
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7140 if (this.resize) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7141 this.resize.destroy();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7142 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7143 if (this.dd) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7144 this.dd.unreg();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7145 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7146 if (this.get('panel')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7147 this.get('panel').destroy();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7148 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7149 this.saveHTML();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7150 this.toolbar.destroy();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7151 this.setStyle('visibility', 'visible');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7152 this.setStyle('position', 'static');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7153 this.setStyle('top', '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7154 this.setStyle('left', '');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7155 var textArea = this.get('element');
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7156 this.get('element_cont').get('parentNode').replaceChild(textArea, this.get('element_cont').get('element'));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7157 this.get('element_cont').get('element').innerHTML = '';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7158 this.set('handleSubmit', false); //Remove the submit handler
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7159 return true;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7160 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7161 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7162 * @method toString
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7163 * @description Returns a string representing the editor.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7164 * @return {String}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7165 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7166 toString: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7167 var str = 'SimpleEditor';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7168 if (this.get && this.get('element_cont')) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7169 str = 'SimpleEditor (#' + this.get('element_cont').get('id') + ')' + ((this.get('disabled') ? ' Disabled' : ''));
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7170 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7171 return str;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7172 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7173 });
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7174
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7175 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7176 * @event toolbarLoaded
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7177 * @description Event is fired during the render process directly after the Toolbar is loaded. Allowing you to attach events to the toolbar. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7178 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7179 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7180 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7181 * @event cleanHTML
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7182 * @description Event is fired after the cleanHTML method is called.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7183 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7184 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7185 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7186 * @event afterRender
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7187 * @description Event is fired after the render process finishes. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7188 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7189 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7190 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7191 * @event editorContentLoaded
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7192 * @description Event is fired after the editor iframe's document fully loads and fires it's onload event. From here you can start injecting your own things into the document. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7193 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7194 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7195 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7196 * @event beforeNodeChange
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7197 * @description Event fires at the beginning of the nodeChange process. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7198 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7199 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7200 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7201 * @event afterNodeChange
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7202 * @description Event fires at the end of the nodeChange process. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7203 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7204 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7205 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7206 * @event beforeExecCommand
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7207 * @description Event fires at the beginning of the execCommand process. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7208 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7209 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7210 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7211 * @event afterExecCommand
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7212 * @description Event fires at the end of the execCommand process. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7213 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7214 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7215 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7216 * @event editorMouseUp
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7217 * @param {Event} ev The DOM Event that occured
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7218 * @description Passed through HTML Event. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7219 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7220 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7221 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7222 * @event editorMouseDown
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7223 * @param {Event} ev The DOM Event that occured
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7224 * @description Passed through HTML Event. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7225 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7226 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7227 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7228 * @event editorDoubleClick
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7229 * @param {Event} ev The DOM Event that occured
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7230 * @description Passed through HTML Event. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7231 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7232 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7233 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7234 * @event editorClick
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7235 * @param {Event} ev The DOM Event that occured
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7236 * @description Passed through HTML Event. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7237 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7238 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7239 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7240 * @event editorKeyUp
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7241 * @param {Event} ev The DOM Event that occured
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7242 * @description Passed through HTML Event. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7243 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7244 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7245 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7246 * @event editorKeyPress
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7247 * @param {Event} ev The DOM Event that occured
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7248 * @description Passed through HTML Event. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7249 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7250 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7251 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7252 * @event editorKeyDown
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7253 * @param {Event} ev The DOM Event that occured
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7254 * @description Passed through HTML Event. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7255 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7256 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7257 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7258 * @event beforeEditorMouseUp
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7259 * @param {Event} ev The DOM Event that occured
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7260 * @description Fires before editor event, returning false will stop the internal processing.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7261 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7262 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7263 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7264 * @event beforeEditorMouseDown
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7265 * @param {Event} ev The DOM Event that occured
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7266 * @description Fires before editor event, returning false will stop the internal processing.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7267 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7268 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7269 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7270 * @event beforeEditorDoubleClick
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7271 * @param {Event} ev The DOM Event that occured
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7272 * @description Fires before editor event, returning false will stop the internal processing.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7273 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7274 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7275 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7276 * @event beforeEditorClick
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7277 * @param {Event} ev The DOM Event that occured
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7278 * @description Fires before editor event, returning false will stop the internal processing.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7279 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7280 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7281 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7282 * @event beforeEditorKeyUp
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7283 * @param {Event} ev The DOM Event that occured
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7284 * @description Fires before editor event, returning false will stop the internal processing.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7285 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7286 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7287 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7288 * @event beforeEditorKeyPress
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7289 * @param {Event} ev The DOM Event that occured
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7290 * @description Fires before editor event, returning false will stop the internal processing.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7291 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7292 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7293 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7294 * @event beforeEditorKeyDown
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7295 * @param {Event} ev The DOM Event that occured
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7296 * @description Fires before editor event, returning false will stop the internal processing.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7297 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7298 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7299
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7300 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7301 * @event editorWindowFocus
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7302 * @description Fires when the iframe is focused. Note, this is window focus event, not an Editor focus event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7303 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7304 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7305 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7306 * @event editorWindowBlur
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7307 * @description Fires when the iframe is blurred. Note, this is window blur event, not an Editor blur event.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7308 * @type YAHOO.util.CustomEvent
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7309 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7310
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7311
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7312 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7313 * @description Singleton object used to track the open window objects and panels across the various open editors
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7314 * @class EditorInfo
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7315 * @static
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7316 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7317 YAHOO.widget.EditorInfo = {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7318 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7319 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7320 * @property _instances
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7321 * @description A reference to all editors on the page.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7322 * @type Object
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7323 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7324 _instances: {},
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7325 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7326 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7327 * @property blankImage
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7328 * @description A reference to the blankImage url
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7329 * @type String
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7330 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7331 blankImage: '',
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7332 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7333 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7334 * @property window
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7335 * @description A reference to the currently open window object in any editor on the page.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7336 * @type Object <a href="YAHOO.widget.EditorWindow.html">YAHOO.widget.EditorWindow</a>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7337 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7338 window: {},
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7339 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7340 * @private
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7341 * @property panel
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7342 * @description A reference to the currently open panel in any editor on the page.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7343 * @type Object <a href="YAHOO.widget.Overlay.html">YAHOO.widget.Overlay</a>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7344 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7345 panel: null,
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7346 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7347 * @method getEditorById
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7348 * @description Returns a reference to the Editor object associated with the given textarea
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7349 * @param {String/HTMLElement} id The id or reference of the textarea to return the Editor instance of
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7350 * @return Object <a href="YAHOO.widget.Editor.html">YAHOO.widget.Editor</a>
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7351 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7352 getEditorById: function(id) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7353 if (!YAHOO.lang.isString(id)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7354 //Not a string, assume a node Reference
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7355 id = id.id;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7356 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7357 if (this._instances[id]) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7358 return this._instances[id];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7359 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7360 return false;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7361 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7362 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7363 * @method saveAll
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7364 * @description Saves all Editor instances on the page. If a form reference is passed, only Editor's bound to this form will be saved.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7365 * @param {HTMLElement} form The form to check if this Editor instance belongs to
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7366 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7367 saveAll: function(form) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7368 var i, e, items = YAHOO.widget.EditorInfo._instances;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7369 if (form) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7370 for (i in items) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7371 if (Lang.hasOwnProperty(items, i)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7372 e = items[i];
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7373 if (e.get('element').form && (e.get('element').form == form)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7374 e.saveHTML();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7375 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7376 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7377 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7378 } else {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7379 for (i in items) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7380 if (Lang.hasOwnProperty(items, i)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7381 items[i].saveHTML();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7382 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7383 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7384 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7385 },
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7386 /**
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7387 * @method toString
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7388 * @description Returns a string representing the EditorInfo.
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7389 * @return {String}
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7390 */
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7391 toString: function() {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7392 var len = 0;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7393 for (var i in this._instances) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7394 if (Lang.hasOwnProperty(this._instances, i)) {
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7395 len++;
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7396 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7397 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7398 return 'Editor Info (' + len + ' registered intance' + ((len > 1) ? 's' : '') + ')';
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7399 }
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7400 };
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7401
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7402
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7403
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7404
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7405 })();
564e40829f80 initial commit.
Marcin Kuzminski
parents:
diff changeset
7406 YAHOO.register("simpleeditor", YAHOO.widget.SimpleEditor, {version: "2.8.0r4", build: "2449"});