Christophe Dumez
15 years ago
15 changed files with 278 additions and 335 deletions
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
@ -1,92 +0,0 @@ |
|||||||
/* |
|
||||||
* MIT License |
|
||||||
* Copyright (c) 2008 Christophe Dumez <chris@qbittorrent.org> |
|
||||||
* |
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy |
|
||||||
* of this software and associated documentation files (the "Software"), to deal |
|
||||||
* in the Software without restriction, including without limitation the rights |
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|
||||||
* copies of the Software, and to permit persons to whom the Software is |
|
||||||
* furnished to do so, subject to the following conditions: |
|
||||||
* |
|
||||||
* The above copyright notice and this permission notice shall be included in |
|
||||||
* all copies or substantial portions of the Software. |
|
||||||
* |
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
|
||||||
* THE SOFTWARE. |
|
||||||
*/ |
|
||||||
|
|
||||||
/* |
|
||||||
* Original code from http://www.silverscripting.com/mootabs/ |
|
||||||
* Edited by Christophe Dumez |
|
||||||
*/ |
|
||||||
|
|
||||||
.toolbarTabs { |
|
||||||
padding: 0 5px 2px 2px; |
|
||||||
background: url(../images/skin/tabs.gif) repeat-x; |
|
||||||
background-position: left -70px; |
|
||||||
overflow: visible; |
|
||||||
} |
|
||||||
|
|
||||||
.mootabs_title { |
|
||||||
padding-top: 1px; |
|
||||||
list-style: none; |
|
||||||
margin: 0; |
|
||||||
padding: 0; |
|
||||||
line-height: 16px; |
|
||||||
font-size: 11px; |
|
||||||
} |
|
||||||
|
|
||||||
.mootabs_title li { |
|
||||||
display: block; |
|
||||||
float: left; |
|
||||||
margin: 0 0 5px 0; |
|
||||||
cursor: pointer; |
|
||||||
background: url(../images/skin/tabs.gif) repeat-x; |
|
||||||
background-position: left -35px; |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
.mootabs_title li.active { |
|
||||||
background: url(../images/skin/tabs.gif) repeat-x; |
|
||||||
background-position: left 0; |
|
||||||
} |
|
||||||
|
|
||||||
.mootabs_title li a { |
|
||||||
display: block; |
|
||||||
margin-left: 8px; |
|
||||||
padding: 6px 16px 5px 10px; |
|
||||||
text-align: center; |
|
||||||
font-weight: normal; |
|
||||||
color: #141414; |
|
||||||
background: url(../images/skin/tabs.gif) repeat-x; |
|
||||||
background-position: right -35px; |
|
||||||
} |
|
||||||
|
|
||||||
.mootabs_title li.active a { |
|
||||||
color: #141414; |
|
||||||
font-weight: bold; |
|
||||||
background: url(../images/skin/tabs.gif) repeat-x; |
|
||||||
background-position: right 0; |
|
||||||
} |
|
||||||
|
|
||||||
.mootabs_panel { |
|
||||||
display: none; |
|
||||||
background-color: #ddd; |
|
||||||
position: relative; |
|
||||||
width: 100%; |
|
||||||
top: -1px; |
|
||||||
clear: both; |
|
||||||
overflow: auto; |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
.mootabs_panel.active { |
|
||||||
background-color: #e6e6e6; |
|
||||||
display: block; |
|
||||||
} |
|
@ -0,0 +1,155 @@ |
|||||||
|
var ContextMenu = new Class({ |
||||||
|
|
||||||
|
//implements
|
||||||
|
Implements: [Options,Events], |
||||||
|
|
||||||
|
//options
|
||||||
|
options: { |
||||||
|
actions: {}, |
||||||
|
menu: 'contextmenu', |
||||||
|
stopEvent: true, |
||||||
|
targets: 'body', |
||||||
|
trigger: 'contextmenu', |
||||||
|
offsets: { x:0, y:0 }, |
||||||
|
onShow: $empty, |
||||||
|
onHide: $empty, |
||||||
|
onClick: $empty, |
||||||
|
fadeSpeed: 200 |
||||||
|
}, |
||||||
|
|
||||||
|
//initialization
|
||||||
|
initialize: function(options) { |
||||||
|
//set options
|
||||||
|
this.setOptions(options) |
||||||
|
|
||||||
|
//option diffs menu
|
||||||
|
this.menu = $(this.options.menu); |
||||||
|
this.targets = $$(this.options.targets); |
||||||
|
|
||||||
|
//fx
|
||||||
|
this.fx = new Fx.Tween(this.menu, { property: 'opacity', duration:this.options.fadeSpeed }); |
||||||
|
|
||||||
|
//hide and begin the listener
|
||||||
|
this.hide().startListener(); |
||||||
|
|
||||||
|
//hide the menu
|
||||||
|
this.menu.setStyles({ 'position':'absolute','top':'-900000px', 'display':'block' }); |
||||||
|
}, |
||||||
|
|
||||||
|
addTarget: function(t) { |
||||||
|
this.targets[this.targets.length] = t; |
||||||
|
t.addEvent(this.options.trigger,function(e) { |
||||||
|
//enabled?
|
||||||
|
if(!this.options.disabled) { |
||||||
|
//prevent default, if told to
|
||||||
|
if(this.options.stopEvent) { e.stop(); } |
||||||
|
//record this as the trigger
|
||||||
|
this.options.element = $(t); |
||||||
|
//position the menu
|
||||||
|
this.menu.setStyles({ |
||||||
|
top: (e.page.y + this.options.offsets.y), |
||||||
|
left: (e.page.x + this.options.offsets.x), |
||||||
|
position: 'absolute', |
||||||
|
'z-index': '2000' |
||||||
|
}); |
||||||
|
//show the menu
|
||||||
|
this.show(); |
||||||
|
} |
||||||
|
}.bind(this)); |
||||||
|
}, |
||||||
|
|
||||||
|
//get things started
|
||||||
|
startListener: function() { |
||||||
|
/* all elements */ |
||||||
|
this.targets.each(function(el) { |
||||||
|
/* show the menu */ |
||||||
|
el.addEvent(this.options.trigger,function(e) { |
||||||
|
//enabled?
|
||||||
|
if(!this.options.disabled) { |
||||||
|
//prevent default, if told to
|
||||||
|
if(this.options.stopEvent) { e.stop(); } |
||||||
|
//record this as the trigger
|
||||||
|
this.options.element = $(el); |
||||||
|
//position the menu
|
||||||
|
this.menu.setStyles({ |
||||||
|
top: (e.page.y + this.options.offsets.y), |
||||||
|
left: (e.page.x + this.options.offsets.x), |
||||||
|
position: 'absolute', |
||||||
|
'z-index': '2000' |
||||||
|
}); |
||||||
|
//show the menu
|
||||||
|
this.show(); |
||||||
|
} |
||||||
|
}.bind(this)); |
||||||
|
},this); |
||||||
|
|
||||||
|
/* menu items */ |
||||||
|
this.menu.getElements('a').each(function(item) { |
||||||
|
item.addEvent('click',function(e) { |
||||||
|
if(!item.hasClass('disabled')) { |
||||||
|
this.execute(item.get('href').split('#')[1],$(this.options.element)); |
||||||
|
this.fireEvent('click',[item,e]); |
||||||
|
} |
||||||
|
}.bind(this)); |
||||||
|
},this); |
||||||
|
|
||||||
|
//hide on body click
|
||||||
|
$(document.body).addEvent('click', function() { |
||||||
|
this.hide(); |
||||||
|
}.bind(this)); |
||||||
|
}, |
||||||
|
|
||||||
|
//show menu
|
||||||
|
show: function(trigger) { |
||||||
|
//this.menu.fade('in');
|
||||||
|
this.fx.start(1); |
||||||
|
this.fireEvent('show'); |
||||||
|
this.shown = true; |
||||||
|
return this; |
||||||
|
}, |
||||||
|
|
||||||
|
//hide the menu
|
||||||
|
hide: function(trigger) { |
||||||
|
if(this.shown) |
||||||
|
{ |
||||||
|
this.fx.start(0); |
||||||
|
//this.menu.fade('out');
|
||||||
|
this.fireEvent('hide'); |
||||||
|
this.shown = false; |
||||||
|
} |
||||||
|
return this; |
||||||
|
}, |
||||||
|
|
||||||
|
//disable an item
|
||||||
|
disableItem: function(item) { |
||||||
|
this.menu.getElements('a[href$=' + item + ']').addClass('disabled'); |
||||||
|
return this; |
||||||
|
}, |
||||||
|
|
||||||
|
//enable an item
|
||||||
|
enableItem: function(item) { |
||||||
|
this.menu.getElements('a[href$=' + item + ']').removeClass('disabled'); |
||||||
|
return this; |
||||||
|
}, |
||||||
|
|
||||||
|
//diable the entire menu
|
||||||
|
disable: function() { |
||||||
|
this.options.disabled = true; |
||||||
|
return this; |
||||||
|
}, |
||||||
|
|
||||||
|
//enable the entire menu
|
||||||
|
enable: function() { |
||||||
|
this.options.disabled = false; |
||||||
|
return this; |
||||||
|
}, |
||||||
|
|
||||||
|
//execute an action
|
||||||
|
execute: function(action,element) { |
||||||
|
if(this.options.actions[action]) { |
||||||
|
this.options.actions[action](element,this); |
||||||
|
} |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
}); |
@ -1,223 +0,0 @@ |
|||||||
/* |
|
||||||
* MIT License |
|
||||||
* Copyright (c) 2008 Christophe Dumez <chris@qbittorrent.org> |
|
||||||
* |
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy |
|
||||||
* of this software and associated documentation files (the "Software"), to deal |
|
||||||
* in the Software without restriction, including without limitation the rights |
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|
||||||
* copies of the Software, and to permit persons to whom the Software is |
|
||||||
* furnished to do so, subject to the following conditions: |
|
||||||
* |
|
||||||
* The above copyright notice and this permission notice shall be included in |
|
||||||
* all copies or substantial portions of the Software. |
|
||||||
* |
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
|
||||||
* THE SOFTWARE. |
|
||||||
*/ |
|
||||||
|
|
||||||
/* |
|
||||||
* Original code from http://www.silverscripting.com/mootabs/
|
|
||||||
* Ported to Mootools 1.2 by Christophe Dumez |
|
||||||
*/ |
|
||||||
|
|
||||||
var mootabs = new Class({ |
|
||||||
|
|
||||||
Implements: [Options], |
|
||||||
|
|
||||||
options: { |
|
||||||
width: '300px', |
|
||||||
height: '200px', |
|
||||||
changeTransition: Fx.Transitions.Bounce.easeOut, |
|
||||||
duration: 1000, |
|
||||||
mouseOverClass: 'over', |
|
||||||
activateOnLoad: 'first', |
|
||||||
useAjax: false, |
|
||||||
ajaxUrl: '', |
|
||||||
ajaxOptions: {method:'get', evalScripts: true}, |
|
||||||
ajaxLoadingText: 'Loading...' |
|
||||||
}, |
|
||||||
|
|
||||||
initialize: function(element, options) { |
|
||||||
|
|
||||||
if(options) this.setOptions(options); |
|
||||||
|
|
||||||
this.el = $(element); |
|
||||||
this.elid = element; |
|
||||||
|
|
||||||
this.el.setStyles({ |
|
||||||
height: this.options.height, |
|
||||||
width: this.options.width |
|
||||||
}); |
|
||||||
|
|
||||||
this.titles = $$('#' + this.elid + ' ul li'); |
|
||||||
this.panelHeight = this.el.getSize().y - (this.titles[0].getSize().y + 4); |
|
||||||
this.panels = $$('#' + this.elid + ' .mootabs_panel'); |
|
||||||
|
|
||||||
|
|
||||||
this.panels.setStyle('height', this.panelHeight); |
|
||||||
|
|
||||||
this.titles.each(function(item) { |
|
||||||
item.addEvent('click', function(){ |
|
||||||
if(item != this.activeTitle) |
|
||||||
{ |
|
||||||
item.removeClass(this.options.mouseOverClass); |
|
||||||
this.activate(item); |
|
||||||
} |
|
||||||
|
|
||||||
}.bind(this)); |
|
||||||
|
|
||||||
item.addEvent('mouseover', function() { |
|
||||||
if(item != this.activeTitle) |
|
||||||
{ |
|
||||||
item.addClass(this.options.mouseOverClass); |
|
||||||
} |
|
||||||
}.bind(this)); |
|
||||||
|
|
||||||
item.addEvent('mouseout', function() { |
|
||||||
if(item != this.activeTitle) |
|
||||||
{ |
|
||||||
item.removeClass(this.options.mouseOverClass); |
|
||||||
} |
|
||||||
}.bind(this)); |
|
||||||
}.bind(this)); |
|
||||||
|
|
||||||
|
|
||||||
if(this.options.activateOnLoad != 'none') |
|
||||||
{ |
|
||||||
if(this.options.activateOnLoad == 'first') |
|
||||||
{ |
|
||||||
this.activate(this.titles[0], true); |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
this.activate(this.options.activateOnLoad, true); |
|
||||||
} |
|
||||||
} |
|
||||||
}, |
|
||||||
|
|
||||||
activate: function(tab, skipAnim){ |
|
||||||
if(! $defined(skipAnim)) |
|
||||||
{ |
|
||||||
skipAnim = false; |
|
||||||
} |
|
||||||
if($type(tab) == 'string') |
|
||||||
{ |
|
||||||
myTab = $$('#' + this.elid + ' ul li').filter('[title=' + tab + ']')[0]; |
|
||||||
tab = myTab; |
|
||||||
} |
|
||||||
|
|
||||||
if($type(tab) == 'element') |
|
||||||
{ |
|
||||||
var newTab = tab.getProperty('title'); |
|
||||||
|
|
||||||
this.panels.removeClass('active'); |
|
||||||
|
|
||||||
this.activePanel = this.panels.filter('#' + newTab)[0]; |
|
||||||
|
|
||||||
this.activePanel.addClass('active'); |
|
||||||
|
|
||||||
if(this.options.changeTransition != 'none' && skipAnim==false) |
|
||||||
{ |
|
||||||
this.panels.filter('#' + newTab).setStyle('height', 0); |
|
||||||
var changeEffect = new Fx.Elements(this.panels.filter('#' + newTab), {duration: this.options.duration, transition: this.options.changeTransition}); |
|
||||||
changeEffect.start({ |
|
||||||
'0': { |
|
||||||
'height': [0, this.panelHeight] |
|
||||||
} |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
this.titles.removeClass('active'); |
|
||||||
|
|
||||||
tab.addClass('active'); |
|
||||||
|
|
||||||
this.activeTitle = tab; |
|
||||||
|
|
||||||
if(this.options.useAjax) |
|
||||||
{ |
|
||||||
this._getContent(); |
|
||||||
} |
|
||||||
} |
|
||||||
}, |
|
||||||
|
|
||||||
_getContent: function(){ |
|
||||||
this.activePanel.setHTML(this.options.ajaxLoadingText); |
|
||||||
var newOptions = { |
|
||||||
url: this.options.ajaxUrl + '?tab=' + this.activeTitle.getProperty('title'), |
|
||||||
update: this.activePanel.getProperty('id') |
|
||||||
}; |
|
||||||
this.options.ajaxOptions = $merge(this.options.ajaxOptions, newOptions); |
|
||||||
var tabRequest = new Request.HTML(this.options.ajaxOptions); |
|
||||||
tabRequest.send(); |
|
||||||
}, |
|
||||||
|
|
||||||
addTab: function(title, label, content){ |
|
||||||
//the new title
|
|
||||||
var newTitle = new Element('li', { |
|
||||||
'title': title |
|
||||||
}); |
|
||||||
newTitle.appendText(label); |
|
||||||
this.titles.include(newTitle); |
|
||||||
$$('#' + this.elid + ' ul').adopt(newTitle); |
|
||||||
newTitle.addEvent('click', function() { |
|
||||||
this.activate(newTitle); |
|
||||||
}.bind(this)); |
|
||||||
|
|
||||||
newTitle.addEvent('mouseover', function() { |
|
||||||
if(newTitle != this.activeTitle) |
|
||||||
{ |
|
||||||
newTitle.addClass(this.options.mouseOverClass); |
|
||||||
} |
|
||||||
}.bind(this)); |
|
||||||
newTitle.addEvent('mouseout', function() { |
|
||||||
if(newTitle != this.activeTitle) |
|
||||||
{ |
|
||||||
newTitle.removeClass(this.options.mouseOverClass); |
|
||||||
} |
|
||||||
}.bind(this)); |
|
||||||
//the new panel
|
|
||||||
var newPanel = new Element('div', { |
|
||||||
'style': {'height': this.options.panelHeight}, |
|
||||||
'id': title, |
|
||||||
'class': 'mootabs_panel' |
|
||||||
}); |
|
||||||
if(!this.options.useAjax) |
|
||||||
{ |
|
||||||
newPanel.setHTML(content); |
|
||||||
} |
|
||||||
this.panels.include(newPanel); |
|
||||||
this.el.adopt(newPanel); |
|
||||||
}, |
|
||||||
|
|
||||||
removeTab: function(title){ |
|
||||||
if(this.activeTitle.title == title) |
|
||||||
{ |
|
||||||
this.activate(this.titles[0]); |
|
||||||
} |
|
||||||
$$('#' + this.elid + ' ul li').filter('[title=' + title + ']')[0].remove(); |
|
||||||
|
|
||||||
$$('#' + this.elid + ' .mootabs_panel').filter('#' + title)[0].remove(); |
|
||||||
}, |
|
||||||
|
|
||||||
next: function(){ |
|
||||||
var nextTab = this.activeTitle.getNext(); |
|
||||||
if(!nextTab) { |
|
||||||
nextTab = this.titles[0]; |
|
||||||
} |
|
||||||
this.activate(nextTab); |
|
||||||
}, |
|
||||||
|
|
||||||
previous: function(){ |
|
||||||
var previousTab = this.activeTitle.getPrevious(); |
|
||||||
if(!previousTab) { |
|
||||||
previousTab = this.titles[this.titles.length - 1]; |
|
||||||
} |
|
||||||
this.activate(previousTab); |
|
||||||
} |
|
||||||
}); |
|
Loading…
Reference in new issue