1 // Copyright (c) 2006 spinelz.org (http://script.spinelz.org/)
\r
3 // Permission is hereby granted, free of charge, to any person obtaining
\r
4 // a copy of this software and associated documentation files (the
\r
5 // "Software"), to deal in the Software without restriction, including
\r
6 // without limitation the rights to use, copy, modify, merge, publish,
\r
7 // distribute, sublicense, and/or sell copies of the Software, and to
\r
8 // permit persons to whom the Software is furnished to do so, subject to
\r
9 // the following conditions:
\r
11 // The above copyright notice and this permission notice shall be
\r
12 // included in all copies or substantial portions of the Software.
\r
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
\r
15 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
\r
16 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
\r
17 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
\r
18 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
\r
19 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
\r
20 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\r
22 var ToolBar = Class.create();
\r
23 ToolBar.className = {
\r
24 container : 'toolbar_container',
\r
25 containerLeft : 'toolbar_containerLeft',
\r
26 containerMiddle : 'toolbar_containerMiddle',
\r
27 containerRight : 'toolbar_containerRight',
\r
28 toolbarItem : 'toolbar_item',
\r
29 toolbarItemHover : 'toolbar_itemHov',
\r
30 toolbarItemPres : 'toolbar_itemPres',
\r
31 toolbarContent : 'toolbar_content',
\r
32 toolbarContentPres: 'toolbar_contentPres'
\r
35 ToolBar.prototype = {
\r
37 initialize: function(element) {
\r
38 var options = Object.extend({
\r
39 cssPrefix : 'custom_'
\r
40 }, arguments[1] || {});
\r
42 this.element = $(element);
\r
43 Element.setStyle(this.element, {visibility: 'hidden'});
\r
44 Element.hide(this.element);
\r
45 this.options = options;
\r
47 var customCss = CssUtil.appendPrefix(this.options.cssPrefix, ToolBar.className);
\r
48 this.classNames = new CssUtil([ToolBar.className, customCss]);
\r
51 Element.setStyle(this.element, {visibility: 'visible'});
\r
52 Element.show(this.element);
\r
56 // Element.cleanWhitespace(this.element);
\r
57 this.classNames.addClassNames(this.element, 'container');
\r
58 var iconList = this.element.childNodes;
\r
60 var containerLeft = Builder.node('div');
\r
61 this.classNames.addClassNames(containerLeft, 'containerLeft');
\r
63 this.containerMiddle = Builder.node('div');
\r
64 this.classNames.addClassNames(this.containerMiddle, 'containerMiddle');
\r
66 var containerRight = Builder.node('div');
\r
67 this.classNames.addClassNames(containerRight, 'containerRight');
\r
69 var removeList = [];
\r
70 var toolbar = this;
\r
71 $A(iconList).each(function(i) {
\r
72 if (i.nodeType != 1) {
\r
75 toolbar.buildIcon(i);
\r
78 this.element.appendChild(containerLeft);
\r
79 this.element.appendChild(this.containerMiddle);
\r
80 this.element.appendChild(containerRight);
\r
83 buildIcon: function(icon) {
\r
84 var toolbarItem = Builder.node('div');
\r
85 this.classNames.addClassNames(toolbarItem, 'toolbarItem');
\r
87 var toolbarContent = Builder.node('div');
\r
88 this.classNames.addClassNames(toolbarContent, 'toolbarContent');
\r
90 toolbarContent.appendChild(icon);
\r
91 toolbarItem.appendChild(toolbarContent);
\r
92 this.containerMiddle.appendChild(toolbarItem);
\r
93 this.setHovEvent(toolbarItem);
\r
94 this.setPresEvent(toolbarItem);
\r
97 addIcon: function(options) {
\r
98 var iconOptions = Object.extend({
\r
104 }, arguments[0] || {});
\r
105 if (!$(iconOptions.id)) {
\r
106 var icon = Builder.node('img', {id: iconOptions.id, src: iconOptions.src, alt: iconOptions.alt, style: 'width: ' + iconOptions.width + 'px; height: ' + iconOptions.height + 'px;'});
\r
107 this.buildIcon(icon);
\r
111 removeIcon: function(icon) {
\r
112 var target = $(icon);
\r
114 var itemNode = target.parentNode.parentNode;
\r
115 Element.remove(itemNode);
\r
119 addEvent: function(icon, eventName, func) {
\r
120 var target = $(icon);
\r
122 var itemNode = target.parentNode.parentNode;
\r
123 Event.observe(itemNode, eventName, func);
\r
127 removeEvent: function(icon, eventName, func) {
\r
128 var target = $(icon);
\r
130 var itemNode = target.parentNode.parentNode;
\r
131 Event.stopObserving(itemNode, eventName, func);
\r
134 setHovEvent: function(element) {
\r
135 Event.observe(element, "mouseout", this.toggleItemClass(element, 'toolbarItem').bindAsEventListener(this));
\r
136 Event.observe(element, "mouseover", this.toggleItemClass(element, 'toolbarItemHover').bindAsEventListener(this));
\r
137 Event.observe(element, "mouseout", this.toggleItemClass(element.childNodes[0], 'toolbarContent').bindAsEventListener(this));
\r
140 setPresEvent: function(element) {
\r
141 Event.observe(element, "mousedown", this.toggleItemClass(element, 'toolbarItemPres').bindAsEventListener(this));
\r
142 Event.observe(element, "mouseup", this.toggleItemClass(element, 'toolbarItem').bindAsEventListener(this));
\r
143 Event.observe(element, "mousedown", this.toggleItemClass(element.childNodes[0], 'toolbarContentPres').bindAsEventListener(this));
\r
144 Event.observe(element, "mouseup", this.toggleItemClass(element.childNodes[0], 'toolbarContent').bindAsEventListener(this));
\r
147 toggleItemClass: function(target, className) {
\r
148 return function() {
\r
149 this.classNames.refreshClassNames(target, className);
\r