tabs.js
2.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/**
* @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
Object.append(Browser.Features, {
localstorage: (function() {
return ('localStorage' in window) && window.localStorage !== null;
})()
});
/**
* Tabs behavior
*
* @package Joomla!
* @subpackage JavaScript
* @since 1.5
*/
var JTabs = new Class({
Implements: [Options, Events],
options : {
display: 0,
useStorage: true,
onActive: function(title, description) {
description.setStyle('display', 'block');
title.addClass('open').removeClass('closed');
},
onBackground: function(title, description){
description.setStyle('display', 'none');
title.addClass('closed').removeClass('open');
},
titleSelector: 'dt',
descriptionSelector: 'dd'
},
initialize: function(dlist, options){
this.setOptions(options);
this.dlist = document.id(dlist);
this.titles = this.dlist.getChildren(this.options.titleSelector);
this.descriptions = this.dlist.getChildren(this.options.descriptionSelector);
this.content = new Element('div').inject(this.dlist, 'after').addClass('current');
this.storageName = 'jpanetabs_'+this.dlist.id;
if (this.options.useStorage) {
if (Browser.Features.localstorage) {
this.options.display = this.options.display || localStorage[this.storageName];
} else {
this.options.display = this.options.display || Cookie.read(this.storageName);
}
}
if (this.options.display === null || this.options.display === undefined) {
this.options.display = 0;
}
this.options.display = this.options.display.toInt().limit(0, this.titles.length-1);
for (var i = 0, l = this.titles.length; i < l; i++)
{
var title = this.titles[i];
var description = this.descriptions[i];
title.setStyle('cursor', 'pointer');
title.addEvent('click', this.display.bind(this, i));
description.inject(this.content);
}
this.display(this.options.display);
if (this.options.initialize) this.options.initialize.call(this);
},
hideAllBut: function(but) {
for (var i = 0, l = this.titles.length; i < l; i++)
{
if (i != but) this.fireEvent('onBackground', [this.titles[i], this.descriptions[i]]);
}
},
display: function(i) {
this.hideAllBut(i);
this.fireEvent('onActive', [this.titles[i], this.descriptions[i]]);
if (this.options.useStorage) {
if (Browser.Features.localstorage) {
localStorage[this.storageName] = i;
} else {
Cookie.write(this.storageName, i);
}
}
}
});