Mercurial > repos > jankanis > blast2html
comparison Blast output page example trimmed_files/toggle.js @ 1:ffe82516a83c
add trimmed down html example
author | Jan Kanis <jan.code@jankanis.nl> |
---|---|
date | Tue, 06 May 2014 17:36:10 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:bad241dc701f | 1:ffe82516a83c |
---|---|
1 | |
2 Toggle = function(node) { | |
3 this.init(node); | |
4 } | |
5 | |
6 /** | |
7 * @class Creates a new Toggle class with "node" as src | |
8 * @return Reutrns a new toggle instance | |
9 */ | |
10 Toggle.prototype = { | |
11 | |
12 init: function(node) { | |
13 | |
14 // Subclass instance? | |
15 if (typeof(arguments[0]) == 'undefined') return; | |
16 | |
17 var oThis = this; | |
18 this.node = node; | |
19 | |
20 // Initialize "showing" variable based on presence of "showing" or | |
21 // "hiding" class. If neither, then showing. Be sure class is | |
22 // set to reflect variable value | |
23 node.showing = | |
24 utils.hasClass(node, "showing") || !utils.hasClass(node, "hiding"); | |
25 utils.addClass(node, node.showing ? "showing" : "hiding"); | |
26 | |
27 // Set notifier for node | |
28 utils.addEvent(node, "click", function(e) { | |
29 e = e || window.event; | |
30 utils.preventDefault(e); | |
31 | |
32 var theNode = utils.getTargetObj(e); | |
33 | |
34 // Send message to global notifier, if one exists | |
35 if (typeof(Notifier) != 'undefined') { | |
36 var notifier = Notifier.getInstance(); | |
37 // Notify before change | |
38 notifier.Notify(oThis, "change:" + theNode.id, !this.showing); | |
39 } | |
40 | |
41 // Hide or show based on current state | |
42 if (this.showing) { | |
43 oThis.hide(); | |
44 } else { | |
45 oThis.show(); | |
46 } | |
47 | |
48 }, false); | |
49 | |
50 utils.addEvent(node, "selectstart", function(e) { utils.preventDefault(e); }, true); | |
51 utils.addEvent(node, "drag", function(e) { utils.preventDefault(e); }, true); | |
52 | |
53 // Cache "this" for ID lookup | |
54 if (!node.id) { | |
55 node.id = utils.createNewId(); | |
56 } | |
57 var m = Toggle.getSrcs(); | |
58 m[node.id] = this; | |
59 }, | |
60 | |
61 // Hide targets, and set self to hiding. | |
62 hide: function() { | |
63 var oThis = this; | |
64 | |
65 oThis.setHiding(); | |
66 if (oThis.listeners) { | |
67 forEach(oThis.listeners, function(l) { | |
68 oThis.hideTarget(l); | |
69 }); | |
70 } | |
71 }, | |
72 | |
73 // Show targets, and set self to showing. | |
74 show: function() { | |
75 var oThis = this; | |
76 | |
77 oThis.setShowing(); | |
78 if (oThis.listeners) { | |
79 forEach(oThis.listeners, function(l) { | |
80 oThis.showTarget(l); | |
81 }); | |
82 } | |
83 }, | |
84 | |
85 // Set own presentation to "showing" | |
86 setShowing: function() { | |
87 utils.addClass(this.node, "showing"); | |
88 utils.removeClass(this.node, "hiding"); | |
89 this.node.showing = true; | |
90 }, | |
91 | |
92 // Set own presentation to "hiding" | |
93 setHiding: function() { | |
94 utils.addClass(this.node, "hiding"); | |
95 utils.removeClass(this.node, "showing"); | |
96 this.node.showing = false; | |
97 }, | |
98 | |
99 // Show a target | |
100 showTarget: function(l) { | |
101 utils.addClass(l, "shown"); | |
102 utils.removeClass(l, "hidden"); | |
103 }, | |
104 | |
105 // Hide a target | |
106 hideTarget: function(l) { | |
107 utils.addClass(l, "hidden"); | |
108 utils.removeClass(l, "shown"); | |
109 }, | |
110 | |
111 // Add a target to this toggle. | |
112 add: function(target) { | |
113 if (!this.listeners) { | |
114 this.listeners = new Array(); | |
115 } | |
116 this.listeners[this.listeners.length] = target; | |
117 | |
118 if (utils.hasClass(target, "hidden")) { | |
119 this.setHiding(); | |
120 this.node.showing = false; | |
121 } else { | |
122 this.setShowing(); | |
123 this.node.showing = true; | |
124 } | |
125 } | |
126 } | |
127 | |
128 // Show/hide a "target" (a node controlled by the node with the given ID) | |
129 Toggle.addTarget = function(srcid, target) { | |
130 var tn = Toggle.findOrMake(srcid); | |
131 tn.add(target); | |
132 } | |
133 | |
134 // Assoc array of srcs indexed by their ids | |
135 Toggle.getSrcs = function() { | |
136 if (!Toggle.srcs) { | |
137 Toggle.srcs = new Object(); | |
138 } | |
139 return Toggle.srcs; | |
140 } | |
141 | |
142 // Find or make toggle for given id | |
143 Toggle.findOrMake = function(srcid) { | |
144 var ts = Toggle.getSrcs(); | |
145 var tn = ts[srcid]; | |
146 if (!tn) { | |
147 tn = new Toggle($(srcid)); | |
148 } | |
149 return tn; | |
150 } | |
151 | |
152 // This dispatches the call to Toggle.onload, which may be | |
153 // overridden by instances (subclasses) | |
154 Toggle._onload = function() { | |
155 Toggle.onload(); | |
156 } | |
157 | |
158 // A toggle source node controls other nodes that reference it by id using | |
159 // their toggle= attribute. A node may be both a toggle source and destination. | |
160 Toggle.onload = function() { | |
161 //alert("toggle start"); | |
162 if(utils.hasClass(document.body,"noToggleCheck")) return; | |
163 | |
164 shnodes = jQuery("[toggle]"); | |
165 // Now hook up dst nodes | |
166 forEach(shnodes, function(node) { | |
167 // Link toggle node to its source | |
168 var srcid = node.getAttribute("toggle"); | |
169 Toggle.addTarget(srcid, node); | |
170 }); | |
171 //alert("toggle 2 end"); | |
172 } | |
173 | |
174 utils.addEvent(window, 'load', Toggle._onload, false); |