PageSourceSearch

https://saimm.co.za/components/com_roksprocket/layouts/lists/themes/portrait/portrait.js

js saimm.co.za collected 2026-10-02 05:34:55 UTC 10,484 bytes, 340 lines download raw bytes

1/*!
2 * @version   $Id: lists.js 10889 2013-05-30 07:48:35Z btowles $
3 * @author    RocketTheme http://www.rockettheme.com
4 * @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
5 * @license   http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 only
6 */
7((function(){
8	if (typeof this.RokSprocket == 'undefined') this.RokSprocket = {};
9	else Object.merge(this.RokSprocket, {Lists: null});
10
11	var Lists = new Class({
12
13		Implements: [Options, Events],
14
15		options: {
16			settings: {}
17		},
18
19		initialize: function(options){
20			this.setOptions(options);
21
22			this.lists = document.getElements('[data-lists]');
23			this.settings = {};
24			this.timers = {};
25			this.statuses = {};
26
27		},
28
29		attach: function(list, settings){
30			list = typeOf(list) == 'number' ?
31					document.getElements('[data-lists=' + this.getID(list) + ']')
32					:
33					list;
34			settings = typeOf(settings) == 'string' ? JSON.decode(settings) : settings;
35
36			var containers = (list ? new Elements([list]).flatten() : this.lists);
37
38			containers.each(function(container){
39				container.store('roksprocket:lists:attached', true);
40
41				this.setSettings(container, settings, 'restore');
42
43				var relay = {
44					mouseenter: container.retrieve('roksprocket:lists:mouseenter', function(event){
45						this.stopTimer.call(this, container);
46						this.pause.call(this, container);
47					}.bind(this)),
48
49					mouseleave: container.retrieve('roksprocket:lists:mouseleave', function(event){
50						this.resume.call(this, container);
51						this.startTimer.call(this, container);
52					}.bind(this)),
53
54					page: container.retrieve('roksprocket:lists:relay', function(event, page){
55						if (event) event.preventDefault();
56						this.toPage.call(this, container, page);
57					}.bind(this)),
58
59					next: container.retrieve('roksprocket:lists:next', function(event, element){
60						this.direction.call(this, event, container, element, 'next');
61					}.bind(this)),
62
63					previous: container.retrieve('roksprocket:lists:previous', function(event, element){
64						this.direction.call(this, event, container, element, 'previous');
65					}.bind(this)),
66
67					swipe: container.retrieve('roksprocket:lists:swipe', function(event, element){
68						event.preventDefault();
69						this.direction.call(this, event, container, element, (event.direction == 'right' ? 'previous' : 'next'));
70					}.bind(this))
71				};
72
73				['mouseenter', 'mouseleave'].each(function(type){
74					container.addEvent(type, relay[type]);
75				});
76
77				['page', 'next', 'previous'].each(function(dir, i){
78					var query = '[data-lists-' + dir + ']';
79					if (i > 0) query += ', [data-' + dir + ']';
80
81					container.addEvent('click:relay(' + query + ')', relay[dir]);
82				}, this);
83
84				container.retrieve('roksprocket:lists:ajax', new RokSprocket.Request({
85					model: 'lists',
86					model_action: 'getPage',
87					onRequest: this.onRequest.bind(this, container),
88					onSuccess: function(response){
89						this.onSuccess(response, container, container.retrieve('roksprocket:lists:ajax'));
90					}.bind(this)
91				}));
92
93				if (Browser.Features.Touch) container.addEvent('swipe', relay['swipe']);
94
95				var active = container.getElement('[data-lists-page].active');
96				if (!active) this.toPage(container, 0);
97				else {
98					if (this.getSettings(container).autoplay && this.getSettings(container).autoplay.toInt())
99						this.startTimer(container);
100				}
101
102				this._setAccordion(container);
103
104			}, this);
105		},
106
107		detach: function(list){
108			list = typeOf(list) == 'number' ?
109					document.getElements('[data-lists=' + this.getID(list) + ']')
110					:
111					list;
112
113			var containers = (list ? new Elements([list]).flatten() : this.lists);
114
115			containers.each(function(container){
116				container.store('roksprocket:lists:attached', false);
117				var relay = {
118					mouseenter: container.retrieve('roksprocket:lists:mouseenter'),
119					mouseleave: container.retrieve('roksprocket:lists:mouseleave'),
120					page: container.retrieve('roksprocket:lists:relay'),
121					next: container.retrieve('roksprocket:lists:next'),
122					previous: container.retrieve('roksprocket:lists:previous')
123				};
124
125				['mouseenter', 'mouseleave'].each(function(type){
126					container.removeEvent(type, relay[type]);
127				});
128
129				['page', 'next', 'previous'].each(function(dir, i){
130					var query = '[data-lists-' + dir + ']';
131					if (i > 0) query += ', [data-' + dir + ']';
132
133					container.removeEvent('click:relay(' + query + ')', relay[dir]);
134				}, this);
135
136				if (Browser.Features.Touch) container.removeEvent('swipe', relay['swipe']);
137
138			}, this);
139		},
140
141		setSettings: function(container, settings, restore){
142			var id = this.getID(container),
143				options = Object.clone(this.options.settings);
144
145			if (!restore || !this.settings['id-' + id]){
146				this.settings['id-' + id] = Object.merge(options, settings || options);
147			}
148		},
149
150		getSettings: function(container){
151			var id = this.getID(container);
152
153			return this.settings['id-' + id];
154		},
155
156		getContainer: function(container){
157			if (!container) container = document.getElements('[data-lists]');
158			if (typeOf(container) == 'number') container = document.getElement('[data-lists='+container+']');
159			if (typeOf(container) == 'string') container = document.getElement(container);
160
161			return container;
162		},
163
164		getID: function(id){
165			if (typeOf(id) == 'number') id = document.getElement('[data-lists='+id+']');
166			if (typeOf(id) == 'string') id = document.getElement(id);
167			return !id ? id : id.get('data-lists');
168		},
169
170		toPage: function(container, page){
171			container = this.getContainer(container);
172			page = (typeOf(page) == 'element') ? page.get('data-lists-page') : page;
173			if (!container.retrieve('roksprocket:lists:attached')) return;
174
175			var lists = container.getElements('[data-lists-page]'),
176				ajax = container.retrieve('roksprocket:lists:ajax');
177
178			if (!lists.length) return;
179
180			if (page > lists.length) page = 1;
181			if (page < 1) page = lists.length;
182
183			if (lists[page - 1].hasClass('active')) return;
184
185			if (!ajax.isRunning()){
186				ajax.cancel().setParams({
187					moduleid: container.get('data-lists'),
188					page: page
189				}).send();
190			}
191		},
192
193		direction: function(event, container, element, dir){
194			if (event) event.preventDefault();
195
196			dir = dir || 'next';
197			this[dir](container, element);
198		},
199
200		next: function(container, element){
201			container = this.getContainer(container);
202			if (!container.retrieve('roksprocket:lists:attached')) return;
203			if (typeOf(container) == 'elements') return this.nextAll(container, element);
204
205			var lists = container.getElements('[data-lists-page]');
206			if (!lists.length) return;
207
208			var	current = container.getElement('[data-lists-page].active').get('data-lists-page'),
209				next = current.toInt() + 1;
210
211			if (next > lists.length) next = 1;
212			this.toPage(container, next);
213		},
214
215		nextAll: function(containers, element){
216			containers = this.getContainer(containers);
217			if (typeOf(containers) == 'element') return this.next(containers, element);
218
219			containers.each(function(container){
220				this.next(container, element);
221			}, this);
222		},
223
224		previous: function(container, element){
225			container = this.getContainer(container);
226			if (!container.retrieve('roksprocket:lists:attached')) return;
227			if (typeOf(container) == 'elements') return this.nextAll(container, element);
228
229			var lists = container.getElements('[data-lists-page]');
230			if (!lists.length) return;
231
232			var	current = container.getElement('[data-lists-page].active').get('data-lists-page'),
233				previous = current.toInt() - 1;
234
235			if (previous < 1) previous = lists.length;
236			this.toPage(container, previous);
237		},
238
239		previousAll: function(containers, element){
240			containers = this.getContainer(containers);
241			if (typeOf(containers) == 'element') return this.previous(containers, element);
242
243			containers.each(function(container){
244				this.previous(container, element);
245			}, this);
246		},
247
248		startTimer: function(container){
249			container = this.getContainer(container);
250			if (!container.retrieve('roksprocket:lists:attached')) return;
251
252			var settings = this.getSettings(container),
253				id = this.getID(container),
254				status = this.statuses['id-' + id],
255				autoplay = settings.autoplay.toInt(),
256				delay = (settings.delay.toInt()) * 1000;
257
258			clearTimeout(this.timers['id-' + id]);
259			if (autoplay && status != 'pause') this.timers['id-' + id] = this.next.delay(delay, this, container);
260		},
261
262		stopTimer: function(container){
263			container = this.getContainer(container);
264
265			var id = this.getID(container);
266			clearTimeout(this.timers['id-' + id]);
267		},
268
269		pause: function(container){
270			container = this.getContainer(container);
271
272			var id = this.getID(container);
273			this.statuses['id-' + id] = 'pause';
274		},
275
276		resume: function(container){
277			container = this.getContainer(container);
278
279			var id = this.getID(container);
280			this.statuses['id-' + id] = 'play';
281		},
282
283		onRequest: function(container){
284			container.addClass('loading');
285		},
286
287		onSuccess: function(response, container){
288			var items = container.getElement('[data-lists-items]'),
289				html = response.getPath('payload.html'),
290				page = response.getPath('payload.page'),
291				settings = this.getSettings(container);
292
293			container.removeClass('loading');
294
295			var dummy = new Element('div', {html: html}),
296				elements = dummy.getChildren()
297							.setStyle('opacity', 0)
298							.set('tween', {duration: 250, transition: 'quad:in:out'});
299
300			items.empty().adopt(elements);
301			elements.tween('opacity', 1);
302			this._switchPage(container, page);
303			this._setAccordion(container);
304
305			if (settings.autoplay && settings.autoplay.toInt()) this.startTimer(container);
306		},
307
308		_setAccordion: function(container){
309			if (!this.getSettings(container).accordion.toInt()) return;
310
311			var togglers = container.getElements('[data-lists-toggler]'),
312				elements = container.getElements('[data-lists-content]');
313
314			container.store('roksprocket:lists:accordion', new Fx.Accordion(togglers, elements, {
315				duration: 200,
316				transition: 'quad:out',
317				show: 1,
318				resetHeight: true,
319				initialDisplayFx: false,
320				onActive: function(toggler, element){
321					element.getParent('[data-lists-item]').addClass('active');
322				},
323				onBackground: function(toggler, element){
324					element.getParent('[data-lists-item]').removeClass('active');
325				}
326			}));
327		},
328
329		_switchPage: function(container, page){
330			var lists = container.getElements('[data-lists-page]');
331
332			lists.removeClass('active');
333			lists[page - 1].addClass('active');
334		}
335
336	});
337
338	this.RokSprocket.Lists = Lists;
339
340})());

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.