Mercurial > judyates
view e2gallerypro/e2upload/Source/Additions.js @ 8:1b77e8657088 judyates
[svn r9] saving for transference to cd
author | rlm |
---|---|
date | Fri, 19 Mar 2010 07:17:36 -0400 |
parents | 3f6b44aa6b35 |
children |
line wrap: on
line source
1 /*2 Script: Additions.js3 MooTools Additions - Various Helpers, Overlay-Class, Dialog-Class5 License:6 MIT-style license.8 Copyright:9 Copyright (c) 2009 [Christoph Pojer](http://og5.net/christoph).11 Dependencies:12 - MooTools Core 1.2.213 - MooTools More 1.2.2.1 or newer: Tips.js15 Contains:16 - FileManager.Tips: Augmented version of Tips for use within the FileManager17 - FileManager.Request: Simple extension to request to always use the loader-icon specified by the FileManager instance18 - Element.appearOn: Can be used to show an element when another is hovered: $(myElement).appearOn(myWrapper)19 - Element.center: Centers an element20 - Dialog, Overlay: Nice Classes used by the FileManager21 */23 if(!window.FileManager) var FileManager = {};25 FileManager.Tips = new Class({27 Extends: Tips,29 options: {30 offsets: {x: 15, y: 0},31 text: null,32 onShow: function(tip, el){33 if(tip.get('opacity')==0.8 && tip.getStyle('visibility')=='visible') return;35 tip.get('tween').pause();36 tip.set({37 opacity: 0,38 tween: {39 duration: 200,40 link: 'cancel'41 }42 }).fade(0.8);43 },45 onHide: function(tip, el){46 tip.get('tween').pause().start('opacity', 0).chain(function(){47 tip.setStyle('left', 0);48 });49 }50 },52 initialize: function(el, options){53 this.parent(el, options);54 this.tip.addClass('tip-filebrowser');55 }57 });59 FileManager.Request = new Class({61 Extends: Request.JSON,63 initialize: function(options, filebrowser){64 this.parent(options);66 if(filebrowser) this.addEvents({67 request: filebrowser.onRequest.bind(filebrowser),68 complete: filebrowser.onComplete.bind(filebrowser)69 });70 }72 });74 Element.implement({76 appearOn: function(el, opacity, options){77 opacity = $type(opacity) == 'array' ? [opacity[0] || 1, opacity[1] || 0] : [opacity || 1, 0];79 this.set({80 opacity: opacity[1],81 tween: options || {duration: 200}82 });84 $(el).addEvents({85 mouseenter: this.fade.bind(this, opacity[0]),86 mouseleave: this.fade.bind(this, opacity[1])87 });89 return this;90 },92 center: function(offsets){93 var scroll = document.getScroll(),94 offset = document.getSize(),95 size = this.getSize(),96 values = {x: 'left', y: 'top'};98 if(!offsets) offsets = {};100 for(var z in values){101 var style = scroll[z]+(offset[z]-size[z])/2+(offsets[z] || 0);102 this.setStyle(values[z], style < 10 ? 10 : style);103 }105 return this;106 }108 });110 var Dialog = new Class({112 Implements: [Options, Events],114 options: {115 /*onShow: $empty,116 onOpen: $empty,117 onConfirm: $empty,118 onDecline: $empty,119 onClose: $empty,*/120 request: null,121 buttons: ['confirm', 'decline'],122 language: {}123 },125 initialize: function(text, options){126 this.setOptions(options);128 this.el = new Element('div', {129 'class': 'dialog dialog-engine-'+Browser.Engine.name+(Browser.Engine.trident ? Browser.Engine.version : ''),130 opacity: 0,131 tween: {duration: 250}132 }).adopt([133 $type(text)=='string' ? new Element('div', {text: text}) : text134 ]);136 if(this.options.content) this.el.getElement('div').adopt(this.options.content);138 Array.each(this.options.buttons, function(v){139 new Element('button', {'class': 'dialog-'+v, text: this.options.language[v]}).addEvent('click', (function(e){140 if(e) e.stop();141 this.fireEvent(v).fireEvent('close');142 this.overlay.hide();143 this.destroy();144 }).bind(this)).inject(this.el);145 }, this);147 this.overlay = new Overlay({148 'class': 'overlay overlay-dialog',149 events: {click: this.fireEvent.bind(this, ['close'])},150 tween: {duration: 250}151 });153 this.bound = {154 scroll: (function(){155 if(!this.el) this.destroy();156 else this.el.center();157 }).bind(this),158 keyesc: (function(e){159 if(e.key=='esc') this.fireEvent('close').destroy();160 }).bind(this)161 };163 this.show();164 },166 show: function(){167 this.overlay.show();168 var self = this.fireEvent('open');169 this.el.setStyle('display', 'block').inject(document.body).center().fade(1).get('tween').chain(function(){170 self.fireEvent('show');171 });173 window.addEvents({174 scroll: this.bound.scroll,175 resize: this.bound.scroll,176 keyup: this.bound.keyesc177 });178 },180 destroy: function(){181 if(this.el) this.el.fade(0).get('tween').chain((function(){182 this.overlay.destroy();183 this.el.destroy();184 }).bind(this));186 window.removeEvent('scroll', this.bound.scroll).removeEvent('resize', this.bound.scroll).removeEvent('keyup', this.bound.keyesc);187 }189 }),190 Overlay = new Class({192 initialize: function(options){193 this.el = new Element('div', $extend({194 'class': 'overlay'195 }, options)).inject(document.body);196 },198 show: function(){199 this.objects = $$('object, select, embed').filter(function(el){200 return el.id=='SwiffFileManagerUpload' || el.style.visibility=='hidden' ? false : !!(el.style.visibility = 'hidden');201 });203 this.resize = (function(){204 if(!this.el) this.destroy();205 else this.el.setStyles({206 width: document.getScrollWidth(),207 height: document.getScrollHeight()208 });209 }).bind(this);211 this.resize();213 this.el.setStyles({214 opacity: 0,215 display: 'block'216 }).get('tween').pause().start('opacity', 0.5);218 window.addEvent('resize', this.resize);220 return this;221 },223 hide: function(){224 this.el.fade(0).get('tween').chain((function(){225 this.revertObjects();226 this.el.setStyle('display', 'none');227 }).bind(this));229 window.removeEvent('resize', this.resize);231 return this;232 },234 destroy: function(){235 this.revertObjects().el.destroy();236 },238 revertObjects: function(){239 if(this.objects && this.objects.length)240 this.objects.each(function(el){241 el.style.visibility = 'visible';242 });244 return this;245 }247 });