source: binary-improvements/webserver/js/tabs.js@ 278

Last change on this file since 278 was 274, checked in by alloc, 9 years ago

Fixes #117: Collapsible menu

File size: 3.0 KB
Line 
1$.widget( "7dtd.tabbedContent", {
2 options: {
3 contentdiv: null,
4 hidebuttondiv: null,
5 menubardiv: null,
6 hideOnStart: false,
7 hideClass: "hidenav",
8 currentTabClass: "current_tab",
9 menuButtonClass: "menu_button",
10 allowedMenuButtonClass: "allowed",
11 contentDivClass: "contenttab",
12 },
13
14 _create: function () {
15 var options = this.options;
16 var self = this;
17
18 if (options.contentdiv == null) {
19 console.log ("contentdiv has to be set!");
20 }
21
22 if (options.hidebuttondiv == null) {
23 console.log ("hidebuttondiv has to be set!");
24 }
25
26 if (options.menubardiv == null) {
27 console.log ("menubardiv has to be set!");
28 }
29
30 options.hidebuttondiv.on ('click.action', function (event) {
31 if (options.hidebuttondiv.hasClass (options.hideClass)) {
32 $("*").removeClass (options.hideClass);
33 } else {
34 options.hidebuttondiv.addClass (options.hideClass);
35 options.contentdiv.addClass (options.hideClass);
36 options.menubardiv.addClass (options.hideClass);
37 }
38 });
39
40 this.element.find ("ul > li").addClass (options.menuButtonClass);
41
42 options.contentdiv.children ("div").addClass (options.contentDivClass);
43 this.element.on ('click.action', "ul > li", function (event) {
44 var menuElement = $(this);
45 var linkElement = menuElement.children ("a");
46 var linkName = linkElement.attr ("href");
47 self.openTab (linkName);
48 });
49
50 self.tabs = {};
51 this.element.find (".menu_button").each (function () {
52 self.tabs [$(this).children ("a").attr ("href")] = $(this);
53 });
54 },
55
56 applyPermissions: function () {
57 var self = this;
58 this.element.find (".menu_button").each (function () {
59 if ($(this).children ("a").data ("permission")) {
60 var perm = $(this).children ("a").data ("permission");
61 if (HasPermission (perm)) {
62 $(this).addClass (self.options.allowedMenuButtonClass);
63 }
64 } else {
65 $(this).addClass (self.options.allowedMenuButtonClass);
66 }
67 });
68
69 this.element.find ("." + self.options.allowedMenuButtonClass).first ().click ();
70 },
71
72 openTab: function (name) {
73 if (name.indexOf ("#") != 0)
74 name = "#" + name;
75
76 if (!this.tabs.hasOwnProperty(name)) {
77 console.log ("no tab named " + name + " in " + this);
78 return;
79 }
80
81 var menuElement = $(".menu_button > a[href=" + name + "]").parent ();
82
83 $("*").removeClass (this.options.currentTabClass);
84 menuElement.addClass (this.options.currentTabClass);
85 $(name).addClass (this.options.currentTabClass);
86 var oldTab = this.currentTab;
87 this.currentTab = name;
88
89 if (oldTab != name) {
90 this._trigger ("tabopened", null, { oldTab: oldTab, newTab: name } );
91 }
92 },
93
94 currentOpenTab: function () {
95 return this.currentTab;
96 },
97
98 isTabOpen: function (name) {
99 if (name.indexOf ("#") != 0)
100 name = "#" + name;
101
102 return this.currentTab == name;
103 },
104
105/*
106 value: function (value) {
107 if ( value === undefined ) {
108 return this.options.value;
109 } else {
110 this.options.value = this._constrain( value );
111 var progress = this.options.value + "%";
112 this.element.text( progress );
113 }
114 },
115*/
116});
Note: See TracBrowser for help on using the repository browser.