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.