|
- /*
- Accordion Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- // Plugin
- $.fn.accordion = function(options)
- {
- return this.each(function()
- {
- $.data(this, 'accordion', {});
- $.data(this, 'accordion', Accordion(this, options));
- });
-
- };
-
- // Initialization
- function Accordion(el, options)
- {
- return new Accordion.prototype.init(el, options);
- }
-
- $.Accordion = Accordion;
- $.Accordion.NAME = 'accordion';
- $.Accordion.VERSION = '1.0';
- $.Accordion.opts = {
-
- scroll: false,
- collapse: true,
- toggle: true,
- titleClass: '.accordion-title',
- panelClass: '.accordion-panel'
-
- };
-
- // Functionality
- Accordion.fn = $.Accordion.prototype = {
-
- // Initialization
- init: function(el, options)
- {
- this.$element = el !== false ? $(el) : false;
- this.loadOptions(options);
-
- this.build();
-
- if (this.opts.collapse)
- {
- this.closeAll();
- }
- else
- {
- this.openAll();
- }
-
- this.loadFromHash();
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.Accordion.opts),
- this.$element.data(),
- options
- );
- },
- setCallback: function(type, e, data)
- {
- var events = $._data(this.$element[0], 'events');
- if (events && typeof events[type] != 'undefined')
- {
- var value = [];
- var len = events[type].length;
- for (var i = 0; i < len; i++)
- {
- var namespace = events[type][i].namespace;
- if (namespace == 'tools.' + $.Accordion.NAME || namespace == $.Accordion.NAME + '.tools')
- {
- var callback = events[type][i].handler;
- value.push((typeof data == 'undefined') ? callback.call(this, e) : callback.call(this, e, data));
- }
- }
-
- if (value.length == 1) return value[0];
- else return value;
- }
-
- return (typeof data == 'undefined') ? e : data;
-
- },
- getTitles: function()
- {
- this.titles = this.$element.find(this.opts.titleClass);
- this.titles.append($('<span />').addClass('accordion-toggle'));
- this.titles.each(function()
- {
- var $el = $(this);
- $el.attr('rel', $el.attr('href'));
- });
-
- },
- getPanels: function()
- {
- this.panels = this.$element.find(this.opts.panelClass);
- },
- build: function()
- {
- this.getTitles();
- this.getPanels();
-
- this.titles.on('click', $.proxy(this.toggle, this));
- },
- loadFromHash: function()
- {
- if (top.location.hash === '') return;
- if (!this.opts.scroll) return;
- if (this.$element.find('[rel=' + top.location.hash +']').size() === 0) return;
-
- this.open(top.location.hash);
- this.scrollTo(top.location.hash);
- },
- toggle: function(e)
- {
- e.preventDefault();
- e.stopPropagation();
-
- var hash = $(e.target).attr('rel');
-
- if (this.opts.toggle)
- {
- var $target = $(e.target);
- var $title = $target.closest(this.opts.titleClass);
- var opened = $title.hasClass('accordion-title-opened');
-
- this.closeAll();
-
- if (!opened) this.open(hash);
- }
- else
- {
- if ($('[rel=' + hash + ']').hasClass('accordion-title-opened'))
- {
- this.close(hash);
- }
- else
- {
- this.open(hash);
- }
- }
- },
- open: function(hash)
- {
- this.$title = $('[rel=' + hash + ']');
- this.$panel = $(hash);
-
- top.location.hash = hash;
-
- this.setStatus('open');
- this.$panel.show();
-
- this.setCallback('opened', this.$title, this.$panel);
- },
- close: function(hash)
- {
- this.$title = $('[rel=' + hash + ']');
- this.$panel = $(hash);
-
- this.setStatus('close');
- this.$panel.hide();
-
- this.setCallback('closed', this.$title, this.$panel);
- },
- setStatus: function(command)
- {
- var items = { toggle: this.$title.find('span.accordion-toggle'), title: this.$title, panel: this.$panel };
-
- $.each(items, function(i, s)
- {
- if (command == 'close')
- {
- s.removeClass('accordion-' + i + '-opened').addClass('accordion-' + i + '-closed');
- }
- else
- {
- s.removeClass('accordion-' + i + '-closed').addClass('accordion-' + i + '-opened');
- }
- });
- },
- openAll: function()
- {
- this.titles.each($.proxy(function(i, s)
- {
- this.open($(s).attr('rel'));
-
- }, this));
- },
- closeAll: function()
- {
- this.titles.each($.proxy(function(i, s)
- {
- this.close($(s).attr('rel'));
-
- }, this));
- },
- scrollTo: function(id)
- {
- $('html, body').animate(
- {
- scrollTop: $(id).offset().top - 50
-
- }, 500);
- }
- };
-
- $(window).on('load.tools.accordion', function()
- {
- $('[data-tools="accordion"]').accordion();
- });
-
- // constructor
- Accordion.prototype.init.prototype = Accordion.prototype;
-
-
- })(jQuery);
- /*
- Autocomplete Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- // Plugin
- $.fn.autocomplete = function(options)
- {
- return this.each(function()
- {
- $.data(this, 'autocomplete', {});
- $.data(this, 'autocomplete', Autocomplete(this, options));
- });
-
- };
-
- // Initialization
- function Autocomplete(el, options)
- {
- return new Autocomplete.prototype.init(el, options);
- }
-
- $.Autocomplete = Autocomplete;
- $.Autocomplete.NAME = 'autocomplete';
- $.Autocomplete.VERSION = '1.0';
- $.Autocomplete.opts = {
-
- url: false,
- min: 2,
- set: 'value' // value or id
-
- };
-
- // Functionality
- Autocomplete.fn = $.Autocomplete.prototype = {
-
- // Initialization
- init: function(el, options)
- {
- this.$element = el !== false ? $(el) : false;
- this.loadOptions(options);
-
- this.build();
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.Autocomplete.opts),
- this.$element.data(),
- options
- );
- },
- setCallback: function(type, e, data)
- {
- var events = $._data(this.$element[0], 'events');
- if (events && typeof events[type] != 'undefined')
- {
- var value = [];
- var len = events[type].length;
- for (var i = 0; i < len; i++)
- {
- var namespace = events[type][i].namespace;
- if (namespace == 'tools.' + $.Autocomplete.NAME || namespace == $.Autocomplete.NAME + '.tools')
- {
- var callback = events[type][i].handler;
- value.push((typeof data == 'undefined') ? callback.call(this, e) : callback.call(this, e, data));
- }
- }
-
- if (value.length == 1) return value[0];
- else return value;
- }
-
- return (typeof data == 'undefined') ? e : data;
-
- },
- build: function()
- {
- this.result = $('<ul class="autocomplete">').hide();
-
- this.pos = this.$element.offset();
- this.elementHeight = this.$element.innerHeight();
-
- $('body').append(this.result);
-
- this.placement = (($(document).height() - (this.pos.top + this.elementHeight)) < this.result.height()) ? 'top' : 'bottom';
- $(document).on('click', $.proxy(this.hide, this));
-
- this.$element.on('keyup', $.proxy(function(e)
- {
- var value = this.$element.val();
- if (value.length >= this.opts.min)
- {
- this.$element.addClass('autocomplete-in');
- this.result.addClass('autocomplete-open');
-
- this.listen(e);
- }
- else
- {
- this.hide();
- }
-
- }, this));
- },
- lookup: function()
- {
- $.ajax({
- url: this.opts.url,
- type: 'post',
- data: this.$element.attr('name') + '=' + this.$element.val(),
- success: $.proxy(function(json)
- {
- var data = $.parseJSON(json);
-
- this.result.html('');
-
- $.each(data, $.proxy(function(i,s)
- {
- var li = $('<li>');
- var a = $('<a href="#" rel="' + s.id + '">').html(s.value).on('click', $.proxy(this.set, this));
-
- li.append(a);
- this.result.append(li);
-
- }, this));
-
- var top = (this.placement === 'top') ? (this.pos.top - this.result.height() - this.elementHeight) : (this.pos.top + this.elementHeight);
-
- this.result.css({ top: top + 'px', left: this.pos.left + 'px' });
- this.result.show();
- this.active = false;
-
- }, this)
- });
-
- },
- listen: function(e)
- {
- if (!this.$element.hasClass('autocomplete-in')) return;
-
- e.stopPropagation();
- e.preventDefault();
-
- switch(e.keyCode)
- {
- case 40: // down arrow
- this.select('next');
- break;
-
- case 38: // up arrow
- this.select('prev');
- break;
-
- case 13: // enter
- this.set();
- break;
-
- case 27: // escape
- this.hide();
- break;
-
- default:
- this.lookup();
- break;
- }
-
- },
- select: function(type)
- {
- var $links = this.result.find('a');
- var size = $links.size();
-
- var $active = this.result.find('a.active');
- $active.removeClass('active');
-
- var $item = (type === 'next') ? $active.parent().next().children('a') : $active.parent().prev().children('a');
- if ($item.size() === 0)
- {
- $item = (type === 'next') ? $links.eq(0) : $links.eq(size-1);
- }
-
- $item.addClass('active');
- this.active = $item;
- },
- set: function(e)
- {
- var $el = $(this.active);
- if (e)
- {
- e.preventDefault();
- $el = $(e.target);
- }
-
- var id = $el.attr('rel');
- var value = $el.html();
-
- if (this.opts.set == 'value')
- {
- this.$element.val(value);
- }
- else
- {
- this.$element.val(id);
- }
-
- this.setCallback('set', id, value);
-
-
- this.hide();
- },
- hide: function(e)
- {
- if (e && ($(e.target).hasClass('autocomplete-in') || $(e.target).hasClass('autocomplete-open') || $(e.target).parents().hasClass('autocomplete-open')))
- {
- return;
- }
-
- this.$element.removeClass('autocomplete-in');
- this.result.removeClass('autocomplete-open');
- this.result.hide();
- }
- };
-
- $(window).on('load.tools.autocomplete', function()
- {
- $('[data-tools="autocomplete"]').autocomplete();
- });
-
- // constructor
- Autocomplete.prototype.init.prototype = Autocomplete.prototype;
-
-
- })(jQuery);
- /*
- Buttons Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- // Plugin
- $.fn.buttons = function(options)
- {
- return this.each(function()
- {
- $.data(this, 'buttons', {});
- $.data(this, 'buttons', Buttons(this, options));
- });
-
- };
-
- // Initialization
- function Buttons(el, options)
- {
- return new Buttons.prototype.init(el, options);
- }
-
- $.Buttons = Buttons;
- $.Buttons.NAME = 'buttons';
- $.Buttons.VERSION = '1.0';
- $.Buttons.opts = {
-
- className: 'btn',
- activeClassName: 'btn-active',
- target: false,
- type: 'switch' // switch, toggle, segmented
-
- };
-
- // Functionality
- Buttons.fn = $.Buttons.prototype = {
-
- // Initialization
- init: function(el, options)
- {
-
- this.$element = el !== false ? $(el) : false;
- this.loadOptions(options);
-
- this.buttons = this.getButtons();
- this.value = this.getValue();
-
- this.buttons.each($.proxy(function(i,s)
- {
- var $s = $(s);
-
- this.setDefault($s);
-
- $s.click($.proxy(function(e)
- {
- e.preventDefault();
-
- if (this.opts.type === 'segmented') this.setSegmented($s);
- else if (this.opts.type === 'toggle') this.setToggle($s);
- else this.setBasic($s);
-
- }, this));
-
- }, this));
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.Buttons.opts),
- this.$element.data(),
- options
- );
- },
- getButtons: function()
- {
- return (this.opts.type === 'toggle') ? this.$element : this.$element.find('.' + this.opts.className);
- },
- getValue: function()
- {
- return (this.opts.type === 'segmented') ? $(this.opts.target).val().split(',') : $(this.opts.target).val();
- },
- setDefault: function($el)
- {
- if (this.opts.type === 'segmented' && $.inArray($el.val(), this.value) !== -1)
- {
- this.setActive($el);
- }
- else if ((this.opts.type === 'toggle' && this.value === 1) || this.value === $el.val())
- {
- this.setActive($el);
- }
- },
- setBasic: function($el)
- {
- this.setInActive(this.buttons);
- this.setActive($el);
- $(this.opts.target).val($el.val());
- },
- setSegmented: function($el)
- {
- var $target = $(this.opts.target);
- this.value = $target.val().split(',');
-
- if (!$el.hasClass(this.opts.activeClassName))
- {
- this.setActive($el);
- this.value.push($el.val());
- }
- else
- {
- this.setInActive($el);
- this.value.splice(this.value.indexOf($el.val()), 1);
- }
-
- $target.val(this.value.join(',').replace(/^,/, ''));
- },
- setToggle: function($el)
- {
- if ($el.hasClass(this.opts.activeClassName))
- {
- this.setInActive($el);
- $(this.opts.target).val(0);
- }
- else
- {
- this.setActive($el);
- $(this.opts.target).val(1);
- }
- },
- setActive: function($el)
- {
- $el.addClass(this.opts.activeClassName);
- },
- setInActive: function($el)
- {
- $el.removeClass(this.opts.activeClassName);
- }
- };
-
- $(window).on('load.tools.buttons', function()
- {
- $('[data-tools="buttons"]').buttons();
- });
-
- // constructor
- Buttons.prototype.init.prototype = Buttons.prototype;
-
-
- })(jQuery);
- /*
- CheckAll Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- // Plugin
- $.fn.checkAll = function(options)
- {
- return this.each(function()
- {
- $.data(this, 'checkAll', {});
- $.data(this, 'checkAll', CheckAll(this, options));
- });
-
- };
-
- // Initialization
- function CheckAll(el, options)
- {
- return new CheckAll.prototype.init(el, options);
- }
-
- $.CheckAll = CheckAll;
- $.CheckAll.opts = {
-
- classname: false,
- parent: false,
- highlight: 'highlight',
- target: false
-
- };
-
- // Functionality
- CheckAll.fn = $.CheckAll.prototype = {
-
- // Initialization
- init: function(el, options)
- {
- this.$element = el !== false ? $(el) : false;
- this.loadOptions(options);
-
- this.$elements = $('.' + this.opts.classname);
- this.$target = $(this.opts.target);
-
- // load
- this.$element.on('click', $.proxy(this.load, this));
-
- this.setter = (this.opts.target) ? this.$target.val().split(',') : [];
- this.$elements.each($.proxy(this.setOnStart, this));
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.CheckAll.opts),
- this.$element.data(),
- options
- );
- },
- load: function()
- {
- if (this.$element.prop('checked'))
- {
- this.$elements.prop('checked', true);
-
- if (this.opts.parent || this.opts.target)
- {
- this.$elements.each($.proxy(function(i,s)
- {
- var $s = $(s);
- this.setHighlight($s);
- this.setValue($s.val());
-
- }, this));
- }
- }
- else
- {
- this.$elements.prop('checked', false);
- if (this.opts.parent) this.$elements.each($.proxy(this.removeHighlight, this));
- if (this.opts.target) this.$target.val('');
- }
- },
- setOnStart: function(i, el)
- {
- var $el = $(el);
- if (this.$element.prop('checked') || (this.setter && ($.inArray($el.val(), this.setter) !== -1)))
- {
- $el.prop('checked', true);
- this.setHighlight($el);
- }
-
- $el.on('click', $.proxy(function()
- {
- var checkedSize = this.$elements.filter(':checked').size();
-
- if ($el.prop('checked'))
- {
- this.setValue($el.val());
- this.setHighlight($el);
- }
- else
- {
- this.removeValue($el.val());
- this.removeHighlight($el);
- }
-
- var prop = (checkedSize !== this.$elements.size()) ? false : true;
- this.$element.prop('checked', prop);
-
-
- }, this));
- },
- setHighlight: function($el)
- {
- if (!this.opts.parent) return;
-
- $el.closest(this.opts.parent).addClass(this.opts.highlight);
- },
- removeHighlight: function(i, $el)
- {
- if (!this.opts.parent) return;
-
- $($el).closest(this.opts.parent).removeClass(this.opts.highlight);
- },
- setValue: function(value)
- {
- if (!this.opts.target) return;
-
- var str = this.$target.val();
- var arr = str.split(',');
- arr.push(value);
-
- if (str === '')
- {
- arr = [value];
- }
-
- this.$target.val(arr.join(','));
- },
- removeValue: function(value)
- {
- if (!this.opts.target) return;
-
- var arr = this.$target.val().split(',');
-
- var index = arr.indexOf(value);
- arr.splice(index, 1);
-
- this.$target.val(arr.join(','));
- }
- };
-
-
- $(window).on('load.tools.buttons', function()
- {
- $('[data-tools="check-all"]').checkAll();
- });
-
- // constructor
- CheckAll.prototype.init.prototype = CheckAll.prototype;
-
-
- })(jQuery);
- /*
- Dropdown Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
-
- // Plugin
- $.fn.dropdown = function(options)
- {
- return this.each(function()
- {
- $.data(this, 'dropdown', {});
- $.data(this, 'dropdown', Dropdown(this, options));
- });
-
- };
-
-
- // Initialization
- function Dropdown(el, options)
- {
- return new Dropdown.prototype.init(el, options);
- }
-
- $.Dropdown = Dropdown;
- $.Dropdown.NAME = 'dropdown';
- $.Dropdown.VERSION = '1.0';
- $.Dropdown.opts = {
-
- target: false,
- targetClose: false,
- height: false, // number
- width: false // number
-
- };
-
- // Functionality
- Dropdown.fn = $.Dropdown.prototype = {
-
- // Initialization
- init: function(el, options)
- {
- this.$element = el !== false ? $(el) : false;
- this.loadOptions(options);
-
- this.build();
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.Dropdown.opts),
- this.$element.data(),
- options
- );
- },
- setCallback: function(type, e, data)
- {
- var events = $._data(this.$element[0], 'events');
- if (events && typeof events[type] != 'undefined')
- {
- var value = [];
- var len = events[type].length;
- for (var i = 0; i < len; i++)
- {
- var namespace = events[type][i].namespace;
- if (namespace == 'tools.' + $.Dropdown.NAME || namespace == $.Dropdown.NAME + '.tools')
- {
- var callback = events[type][i].handler;
- value.push((typeof data == 'undefined') ? callback.call(this, e) : callback.call(this, e, data));
- }
- }
-
- if (value.length == 1) return value[0];
- else return value;
- }
-
- return (typeof data == 'undefined') ? e : data;
-
- },
- build: function()
- {
- this.$dropdown = $(this.opts.target);
- this.$dropdown.hide();
-
- this.$caret = $('<b class="caret"></b>');
- this.$element.append(this.$caret);
-
- this.setCaretUp();
- this.preventBodyScroll();
-
- this.$element.click($.proxy(this.toggle, this));
- },
- setCaretUp: function()
- {
- var height = this.$element.offset().top + this.$element.innerHeight() + this.$dropdown.innerHeight();
- if ($(document).height() > height) return;
-
- this.$caret.addClass('caret-up');
- },
- toggle: function(e)
- {
- e.preventDefault();
- if (this.$element.hasClass('dropdown-in'))
- {
- this.hide();
- }
- else
- {
- this.show();
- }
- },
- getPlacement: function(height)
- {
- return ($(document).height() < height) ? 'top' : 'bottom';
- },
- getPosition: function()
- {
- return (this.$element.closest('.navigation-fixed').size() !== 0) ? 'fixed' : 'absolute';
- },
- setPosition: function()
- {
- var pos = this.$element.position();
- var elementHeight = this.$element.innerHeight();
- var elementWidth = this.$element.innerWidth();
- var height = this.$dropdown.innerHeight();
- var width = this.$dropdown.innerWidth();
-
- var position = this.getPosition();
- var placement = this.getPlacement(pos.top + height + elementHeight);
-
- var leftFix = 0;
- if ($(window).width() < (pos.left + width))
- {
- leftFix = (width - elementWidth);
- }
-
- var top;
- var left = pos.left - leftFix;
- if (placement == 'bottom')
- {
- this.$caret.removeClass('caret-up');
- top = (position == 'fixed') ? elementHeight : pos.top + elementHeight;
- }
- else
- {
- this.$caret.addClass('caret-up');
- top = (position == 'fixed') ? height : pos.top - height;
- }
-
- this.$dropdown.css({ position: position, top: top + 'px', left: left + 'px' });
- },
- show: function()
- {
- $('.dropdown-in').removeClass('dropdown-in');
- $('.dropdown').removeClass('dropdown-open').hide();
-
- if (this.opts.height) this.$dropdown.css('min-height', this.opts.height + 'px');
- if (this.opts.width) this.$dropdown.width(this.opts.width);
-
- this.setPosition();
-
- this.$dropdown.addClass('dropdown-open').show();
- this.$element.addClass('dropdown-in');
-
- $(document).on('scroll.tools.dropdown', $.proxy(this.setPosition, this));
- $(window).on('resize.tools.dropdown', $.proxy(this.setPosition, this));
- $(document).on('click.tools.dropdown touchstart.tools.dropdown', $.proxy(this.hide, this));
-
- if (this.opts.targetClose)
- {
- $(this.opts.targetClose).on('click.tools.dropdown', $.proxy(function(e)
- {
- e.preventDefault();
-
- this.hide(false);
-
- }, this));
- }
-
- $(document).on('keydown.tools.dropdown', $.proxy(function(e)
- {
- // esc
- if (e.which === 27) this.hide();
-
- }, this));
-
- this.setCallback('opened', this.$dropdown, this.$element);
-
- },
- preventBodyScroll: function()
- {
- this.$dropdown.on('mouseover', function() { $('html').css('overflow', 'hidden'); });
- this.$dropdown.on('mouseout', function() { $('html').css('overflow', ''); });
- },
- hide: function(e)
- {
- if (e)
- {
- e = e.originalEvent || e;
-
- var $target = $(e.target);
- if ($target.hasClass('caret') || $target.hasClass('dropdown-in') || $target.closest('.dropdown-open').size() !== 0)
- {
- return;
- }
- }
-
- this.$dropdown.removeClass('dropdown-open').hide();
- this.$element.removeClass('dropdown-in');
-
- $(document).off('.tools.dropdown');
- $(window).off('.tools.dropdown');
-
- this.setCallback('closed', this.$dropdown, this.$element);
- }
- };
-
- $(window).on('load.tools.dropdown', function()
- {
- $('[data-tools="dropdown"]').dropdown();
- });
-
- // constructor
- Dropdown.prototype.init.prototype = Dropdown.prototype;
-
-
- })(jQuery);
- /*
- FilterBox Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- // Plugin
- $.fn.filterbox = function(options)
- {
- return this.each(function()
- {
- $.data(this, 'filterbox', {});
- $.data(this, 'filterbox', Filterbox(this, options));
- });
- };
-
- // Initialization
- function Filterbox(el, options)
- {
- return new Filterbox.prototype.init(el, options);
- }
-
- $.Filterbox = Filterbox;
- $.Filterbox.NAME = 'filterbox';
- $.Filterbox.VERSION = '1.0';
- $.Filterbox.opts = {
-
- // settings
- placeholder: false
- };
-
- // Functionality
- Filterbox.fn = $.Filterbox.prototype = {
-
- // Initialization
- init: function(el, options)
- {
- this.$element = el !== false ? $(el) : false;
-
- this.loadOptions(options);
- this.build();
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.Filterbox.opts),
- this.$element.data(),
- options
- );
- },
- setCallback: function(type, e, data)
- {
- var events = $._data(this.$element[0], 'events');
- if (events && typeof events[type] != 'undefined')
- {
- var value = [];
- var len = events[type].length;
- for (var i = 0; i < len; i++)
- {
- var namespace = events[type][i].namespace;
- if (namespace == 'tools.' + $.Filterbox.NAME || namespace == $.Filterbox.NAME + '.tools')
- {
- var callback = events[type][i].handler;
- value.push((typeof data == 'undefined') ? callback.call(this, e) : callback.call(this, e, data));
- }
- }
-
- if (value.length == 1) return value[0];
- else return value;
- }
-
- return (typeof data == 'undefined') ? e : data;
-
- },
- build: function()
- {
- this.$sourceBox = $('<div class="filterbox" />');
- this.$sourceSelect = $('<span class="filterbox-toggle" />');
- this.$sourceLayer = $('<ul class="filterbox-list hide" />');
- this.$source = $('<input type="text" id="' + this.$element.attr('id') + '-input" class="' + this.$element.attr('class') + '" />');
-
- this.$sourceBox.append(this.$source);
- this.$sourceBox.append(this.$sourceSelect);
- this.$sourceBox.append(this.$sourceLayer);
-
- this.setPlaceholder();
-
- this.$element.hide().after(this.$sourceBox);
- this.$element.find('option').each($.proxy(this.buildListItemsFromOptions, this));
-
- this.$source.on('keyup', $.proxy(this.clearSelected, this));
- this.$sourceSelect.on('click', $.proxy(this.load, this));
-
- this.preventBodyScroll();
-
- },
- load: function(e)
- {
- e.preventDefault();
-
- if (this.$sourceLayer.hasClass('open'))
- {
- this.close();
- return;
- }
-
- var value = this.$element.val();
-
- this.$sourceLayer.addClass('open').show();
-
- var items = this.$sourceLayer.find('li').removeClass('active');
- this.setSelectedItem(items, value);
-
- $(document).on('click.tools.filterbox', $.proxy(this.close, this));
- $(document).on('keydown.tools.filterbox', $.proxy(function(e)
- {
- var key = e.which;
- var $el;
- var item;
-
- if (key === 38) // up
- {
- e.preventDefault();
-
- if (items.hasClass('active'))
- {
- item = items.filter('li.active');
- item.removeClass('active');
-
- var prev = item.prev();
- $el = (prev.size() !== 0) ? $el = prev : items.last();
- }
- else
- {
- $el = items.last();
- }
-
- $el.addClass('active');
- this.setScrollTop($el);
- }
- else if (key === 40) // down
- {
- e.preventDefault();
-
- if (items.hasClass('active'))
- {
- item = items.filter('li.active');
- item.removeClass('active');
-
- var next = item.next();
- $el = (next.size() !== 0) ? next : items.first();
- }
- else
- {
- $el = items.first();
- }
-
- $el.addClass('active');
- this.setScrollTop($el);
-
- }
- else if (key === 13) // enter
- {
- if (!items.hasClass('active')) return;
-
- item = items.filter('li.active');
- this.onItemClick(e, item);
- }
- else if (key === 27) // esc
- {
- this.close();
- }
-
- }, this));
-
- },
- clearSelected: function()
- {
- if (this.$source.val().length === 0) this.$element.val(0);
- },
- setSelectedItem: function(items, value)
- {
- var selectEl = items.filter('[rel=' + value + ']');
- if (selectEl.size() === 0)
- {
- selectEl = false;
-
- // if user typed value
- var sourceValue = this.$source.val();
- $.each(items, function(i,s)
- {
- var $s = $(s);
- if ($s.text() == sourceValue)
- {
- selectEl = $s;
- }
- });
-
- if (selectEl === false) return;
- }
-
- selectEl.addClass('active');
- this.setScrollTop(selectEl);
- },
- setScrollTop: function($el)
- {
- this.$sourceLayer.scrollTop(this.$sourceLayer.scrollTop() + $el.position().top - 40);
- },
- buildListItemsFromOptions: function(i,s)
- {
- var $el = $(s);
- var val = $el.val();
- if (val === 0) return;
-
- var item = $('<li />');
-
- item.attr('rel', val).text($el.html());
- item.on('click', $.proxy(this.onItemClick, this));
-
- this.$sourceLayer.append(item);
- },
- onItemClick: function(e, item)
- {
- e.preventDefault();
-
- var $el = $(item || e.target);
- var rel = $el.attr('rel');
- var text = $el.text();
-
- this.$source.val(text);
- this.$element.val(rel);
-
- this.close();
-
- this.setCallback('select', { id: rel, value: text });
- },
- preventBodyScroll: function()
- {
- this.$sourceLayer.on('mouseover', function() { $('html').css('overflow', 'hidden'); });
- this.$sourceLayer.on('mouseout', function() { $('html').css('overflow', ''); });
- },
- setPlaceholder: function()
- {
- if (!this.opts.placeholder) return;
- this.$source.attr('placeholder', this.opts.placeholder);
- },
- close: function(e)
- {
- if (e && ($(e.target).hasClass('filterbox-toggle') || $(e.target).closest('div.filterbox').size() == 1))
- {
- return;
- }
-
- this.$sourceLayer.removeClass('open').hide();
- $(document).off('.tools.filterbox');
- }
- };
-
- $(window).on('load.tools.filterbox', function()
- {
- $('[data-tools="filterbox"]').filterbox();
- });
-
- // constructor
- Filterbox.prototype.init.prototype = Filterbox.prototype;
-
-
- })(jQuery);
- /*
- Infinity Scroll Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- // Plugin
- $.fn.infinityScroll = function(options)
- {
- return this.each(function()
- {
- $.data(this, 'infinity-scroll', {});
- $.data(this, 'infinity-scroll', InfinityScroll(this, options));
- });
- };
-
- // Initialization
- function InfinityScroll(el, options)
- {
- return new InfinityScroll.prototype.init(el, options);
- }
-
- $.InfinityScroll = InfinityScroll;
- $.InfinityScroll.NAME = 'infinity-scroll';
- $.InfinityScroll.VERSION = '1.0';
- $.InfinityScroll.opts = {
-
- url: false,
- offset: 0,
- limit: 20,
- tolerance: 50,
- pagination: false
-
- };
-
- // Functionality
- InfinityScroll.fn = $.InfinityScroll.prototype = {
-
- // Initialization
- init: function(el, options)
- {
- this.$element = el !== false ? $(el) : false;
- this.loadOptions(options);
-
- this.hidePagination();
- this.build();
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.InfinityScroll.opts),
- this.$element.data(),
- options
- );
- },
- setCallback: function(type, e, data)
- {
- var events = $._data(this.$element[0], 'events');
- if (events && typeof events[type] != 'undefined')
- {
- var value = [];
- var len = events[type].length;
- for (var i = 0; i < len; i++)
- {
- var namespace = events[type][i].namespace;
- if (namespace == 'tools.' + $.InfinityScroll.NAME || namespace == $.InfinityScroll.NAME + '.tools')
- {
- var callback = events[type][i].handler;
- value.push((typeof data == 'undefined') ? callback.call(this, e) : callback.call(this, e, data));
- }
- }
-
- if (value.length == 1) return value[0];
- else return value;
- }
-
- return (typeof data == 'undefined') ? e : data;
-
- },
- build: function()
- {
- $(window).on('DOMContentLoaded.tools.infinite-scroll load.tools.infinite-scroll resize.tools.infinite-scroll scroll.tools.infinite-scroll', $.proxy(function()
- {
- var $last = this.$element.children().last();
- if (this.isElementInViewport($last[0]))
- {
- this.getData();
- }
-
- }, this));
- },
- getData: function()
- {
- $.ajax({
- url: this.opts.url,
- type: 'post',
- data: 'limit=' + this.opts.limit + '&offset=' + this.opts.offset,
- success: $.proxy(function(data)
- {
- if (data === '')
- {
- $(window).off('.tools.infinite-scroll');
- return;
- }
-
- this.opts.offset = this.opts.offset + this.opts.limit;
- this.$element.append(data);
-
- this.setCallback('loaded', data);
-
- }, this)
- });
- },
- hidePagination: function()
- {
- if (!this.opts.pagination) return;
-
- $(this.opts.pagination).hide();
- },
- isElementInViewport: function(el)
- {
- var rect = el.getBoundingClientRect();
- return (
- rect.top >= 0 &&
- rect.left >= 0 &&
- rect.bottom <= $(window).height() + this.opts.tolerance &&
- rect.right <= $(window).width()
- );
- }
- };
-
- $(window).on('load.tools.infinity-scroll', function()
- {
- $('[data-tools="infinity-scroll"]').infinityScroll();
- });
-
- // constructor
- InfinityScroll.prototype.init.prototype = InfinityScroll.prototype;
-
- })(jQuery);
-
-
- /*
- Livesearch Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- // Plugin
- $.fn.livesearch = function(options)
- {
- return this.each(function()
- {
- $.data(this, 'livesearch', {});
- $.data(this, 'livesearch', Livesearch(this, options));
- });
-
- };
-
- // Initialization
- function Livesearch(el, options)
- {
- return new Livesearch.prototype.init(el, options);
- }
-
- $.Livesearch = Livesearch;
- $.Livesearch.NAME = 'livesearch';
- $.Livesearch.VERSION = '1.0';
- $.Livesearch.opts = {
-
- // settings
- url: false,
- target: false,
- min: 2,
- params: false,
- appendForms: false
- };
-
- // Functionality
- Livesearch.fn = $.Livesearch.prototype = {
-
- // Initialization
- init: function(el, options)
- {
- this.$element = el !== false ? $(el) : false;
- this.loadOptions(options);
-
- this.build();
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.Livesearch.opts),
- this.$element.data(),
- options
- );
- },
- setCallback: function(type, e, data)
- {
- var events = $._data(this.$element[0], 'events');
- if (events && typeof events[type] != 'undefined')
- {
- var value = [];
- var len = events[type].length;
- for (var i = 0; i < len; i++)
- {
- var namespace = events[type][i].namespace;
- if (namespace == 'tools.' + $.Livesearch.NAME || namespace == $.Livesearch.NAME + '.tools')
- {
- var callback = events[type][i].handler;
- value.push((typeof data == 'undefined') ? callback.call(this, e) : callback.call(this, e, data));
- }
- }
-
- if (value.length == 1) return value[0];
- else return value;
- }
-
- return (typeof data == 'undefined') ? e : data;
-
- },
- build: function()
- {
- this.$box = $('<span class="livesearch-box" />');
-
- this.$element.after(this.$box);
- this.$box.append(this.$element);
-
- this.$element.off('keyup.tools.livesearch');
- this.$element.on('keyup.tools.livesearch', $.proxy(this.load, this));
-
- this.$icon = $('<span class="livesearch-icon" />');
- this.$box.append(this.$icon);
-
- this.$close = $('<span class="close" />').hide();
- this.$box.append(this.$close);
-
- this.$close.off('click.tools.livesearch');
- this.$close.on('click.tools.livesearch', $.proxy(function()
- {
- this.search();
- this.$element.val('').focus();
- this.$close.hide();
-
- }, this));
-
- },
- toggleClose: function(length)
- {
- if (length === 0) this.$close.hide();
- else this.$close.show();
- },
- load: function()
- {
- var value = this.$element.val();
- var data = '';
-
- if (value.length > this.opts.min)
- {
- var name = 'q';
- if (typeof this.$element.attr('name') != 'undefined') name = this.$element.attr('name');
-
- data += '&' + name + '=' + value;
- data = this.appendForms(data);
-
- var str = '';
- if (this.opts.params)
- {
- this.opts.params = $.trim(this.opts.params.replace('{', '').replace('}', ''))
- var properties = this.opts.params.split(',');
- var obj = {};
- $.each(properties, function(k, v)
- {
- var tup = v.split(':');
- obj[$.trim(tup[0])] = $.trim(tup[1]);
- });
-
- str = [];
- $.each(obj, $.proxy(function(k, v)
- {
- str.push(k + "=" + v);
-
- }, this));
-
- str = str.join("&");
-
- data += '&' + str;
- }
- }
-
- this.toggleClose(value.length);
- this.search(data);
-
- },
- appendForms: function(data)
- {
- if (!this.opts.appendForms) return data;
-
- $.each(this.opts.appendForms, function(i, s)
- {
- data += '&' + $(s).serialize();
- });
-
- return data;
- },
- search: function(data)
- {
- $.ajax({
- url: this.opts.url,
- type: 'post',
- data: data,
- success: $.proxy(function(result)
- {
- $(this.opts.target).html(result);
- this.setCallback('result', result);
-
- }, this)
- });
- }
- };
-
- $(window).on('load.tools.livesearch', function()
- {
- $('[data-tools="livesearch"]').livesearch();
- });
-
- // constructor
- Livesearch.prototype.init.prototype = Livesearch.prototype;
-
-
- })(jQuery);
-
- /*
- Tabs Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- // Plugin
- $.fn.message = function(options)
- {
- var val = [];
- var args = Array.prototype.slice.call(arguments, 1);
-
- if (typeof options === 'string')
- {
- this.each(function()
- {
- var instance = $.data(this, 'message');
- if (typeof instance !== 'undefined' && $.isFunction(instance[options]))
- {
- var methodVal = instance[options].apply(instance, args);
- if (methodVal !== undefined && methodVal !== instance) val.push(methodVal);
- }
- else return $.error('No such method "' + options + '" for Message');
- });
- }
- else
- {
- this.each(function()
- {
- $.data(this, 'message', {});
- $.data(this, 'message', Message(this, options));
- });
- }
-
- if (val.length === 0) return this;
- else if (val.length === 1) return val[0];
- else return val;
- };
-
- // Initialization
- function Message(el, options)
- {
- return new Message.prototype.init(el, options);
- }
-
- $.Message = Message;
- $.Message.NAME = 'message';
- $.Message.VERSION = '1.0';
- $.Message.opts = {
-
- target: false,
- delay: 10 // message delay - seconds or false
-
- };
-
- // Functionality
- Message.fn = $.Message.prototype = {
-
- // Initialization
- init: function(el, options)
- {
- this.$element = el !== false ? $(el) : false;
-
- this.loadOptions(options);
- this.build();
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.Message.opts),
- this.$element.data(),
- options
- );
- },
- setCallback: function(type, e, data)
- {
- var events = $._data(this.$message[0], 'events');
- if (events && typeof events[type] != 'undefined')
- {
- var value = [];
- var len = events[type].length;
- for (var i = 0; i < len; i++)
- {
- var namespace = events[type][i].namespace;
- if (namespace == 'tools.' + $.Message.NAME || namespace == $.Message.NAME + '.tools')
- {
- var callback = events[type][i].handler;
- value.push((typeof data == 'undefined') ? callback.call(this, e) : callback.call(this, e, data));
- }
- }
-
- if (value.length == 1) return value[0];
- else return value;
- }
-
- return (typeof data == 'undefined') ? e : data;
-
- },
- build: function()
- {
-
- if (!this.opts.target)
- {
- this.$message = this.$element;
- this.show();
- }
- else
- {
- this.$message = $(this.opts.target);
-
- this.$message.data('message', '');
- this.$message.data('message', this);
-
- this.$element.on('click', $.proxy(this.show, this));
- }
- },
- show: function()
- {
- if (this.$message.hasClass('open'))
- {
- this.hide();
- return;
- }
-
- $('.tools-message').hide().removeClass('open');
- this.$message.addClass('open').fadeIn('fast').on('click.tools.message', $.proxy(this.hide, this));
-
- $(document).on('keyup.tools.message', $.proxy(this.hideHandler, this));
-
- if (this.opts.delay)
- {
- setTimeout($.proxy(this.hide, this), this.opts.delay * 1000);
- }
-
- this.setCallback('opened');
- },
- hideHandler: function(e)
- {
- if (e.which != 27) return;
-
- this.hide();
- },
- hide: function()
- {
- if (!this.$message.hasClass('open')) return;
-
- this.$message.off('click.tools.message');
- $(document).off('keyup.tools.message');
- this.$message.fadeOut('fast', $.proxy(function()
- {
- this.$message.removeClass('open');
- this.setCallback('closed');
-
- }, this));
- }
- };
-
- // Constructor
- Message.prototype.init.prototype = Message.prototype;
-
- $(function()
- {
- $('[data-tools="message"]').message();
- });
-
- })(jQuery);
-
-
- /*
- Modal Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- // Plugin
- $.fn.modal = function(options)
- {
- var val = [];
- var args = Array.prototype.slice.call(arguments, 1);
-
- if (typeof options === 'string')
- {
- this.each(function()
- {
- var instance = $.data(this, 'modal');
- if (typeof instance !== 'undefined' && $.isFunction(instance[options]))
- {
- var methodVal = instance[options].apply(instance, args);
- if (methodVal !== undefined && methodVal !== instance) val.push(methodVal);
- }
- else return $.error('No such method "' + options + '" for Modal');
- });
- }
- else
- {
- this.each(function()
- {
- $.data(this, 'modal', {});
- $.data(this, 'modal', Modal(this, options));
- });
- }
-
- if (val.length === 0) return this;
- else if (val.length === 1) return val[0];
- else return val;
- };
-
- // Initialization
- function Modal(el, options)
- {
- return new Modal.prototype.init(el, options);
- }
-
- $.Modal = Modal;
- $.Modal.NAME = 'modal';
- $.Modal.VERSION = '1.0';
- $.Modal.opts = {
-
- title: '',
- width: 500,
- blur: false
-
- };
-
- // Functionality
- Modal.fn = $.Modal.prototype = {
-
- // Initialization
- init: function(el, options)
- {
- this.$element = el !== false ? $(el) : false;
- this.loadOptions(options);
-
- this.$element.on('click.tools.modal', $.proxy(this.load, this));
-
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.Modal.opts),
- this.$element.data(),
- options
- );
- },
- setCallback: function(type, e, data)
- {
- var events = $._data(this.$element[0], 'events');
- if (events && typeof events[type] != 'undefined')
- {
- var value = [];
- var len = events[type].length;
- for (var i = 0; i < len; i++)
- {
- var namespace = events[type][i].namespace;
- if (namespace == 'tools.' + $.Modal.NAME || namespace == $.Modal.NAME + '.tools')
- {
- var callback = events[type][i].handler;
- value.push((typeof data == 'undefined') ? callback.call(this, e) : callback.call(this, e, data));
- }
- }
-
- if (value.length == 1) return value[0];
- else return value;
- }
-
- return (typeof data == 'undefined') ? e : data;
-
- },
- load: function()
- {
- this.build();
- this.enableEvents();
- this.setTitle();
- this.setDraggable();
- this.setContent();
- },
- build: function()
- {
- this.buildOverlay();
-
- this.$modalBox = $('<div class="modal-box" />').hide();
- this.$modal = $('<div class="modal" />');
- this.$modalHeader = $('<header />');
- this.$modalClose = $('<span class="modal-close" />').html('×');
- this.$modalBody = $('<section />');
- this.$modalFooter = $('<footer />');
-
- this.$modal.append(this.$modalHeader);
- this.$modal.append(this.$modalClose);
- this.$modal.append(this.$modalBody);
- this.$modal.append(this.$modalFooter);
- this.$modalBox.append(this.$modal);
- this.$modalBox.appendTo(document.body);
- },
- buildOverlay: function()
- {
- this.$modalOverlay = $('<div id="modal-overlay">').hide();
- $('body').prepend(this.$modalOverlay);
-
- if (this.opts.blur)
- {
- this.blurredElements = $('body').children('div, section, header, article, pre, aside, table').not('.modal, .modal-box, #modal-overlay');
- this.blurredElements.addClass('modal-blur');
- }
- },
- show: function()
- {
- // modal loading callback
- this.setCallback('loading', this.$modal);
-
- this.bodyOveflow = $(document.body).css('overflow');
- $(document.body).css('overflow', 'hidden');
-
- if (this.isMobile())
- {
- this.showOnMobile();
- }
- else
- {
- this.showOnDesktop();
- }
-
- this.$modalOverlay.show();
- this.$modalBox.show();
-
- this.setButtonsWidth();
-
- // resize
- if (!this.isMobile())
- {
- setTimeout($.proxy(this.showOnDesktop, this), 0);
- $(window).on('resize.tools.modal', $.proxy(this.resize, this));
- }
-
- // modal shown callback
- this.setCallback('opened', this.$modal);
-
- // fix bootstrap modal focus
- $(document).off('focusin.modal');
-
- },
- showOnDesktop: function()
- {
- var height = this.$modal.outerHeight();
- var windowHeight = $(window).height();
- var windowWidth = $(window).width();
-
- if (this.opts.width > windowWidth)
- {
- this.$modal.css({
- width: '96%',
- marginTop: (windowHeight/2 - height/2) + 'px'
- });
- return;
- }
-
- if (height > windowHeight)
- {
- this.$modal.css({
- width: this.opts.width + 'px',
- marginTop: '20px'
- });
- }
- else
- {
- this.$modal.css({
- width: this.opts.width + 'px',
- marginTop: (windowHeight/2 - height/2) + 'px'
- });
- }
- },
- showOnMobile: function()
- {
- this.$modal.css({
- width: '96%',
- marginTop: '2%'
- });
-
- },
- resize: function()
- {
- if (this.isMobile())
- {
- this.showOnMobile();
- }
- else
- {
- this.showOnDesktop();
- }
- },
- setTitle: function()
- {
- this.$modalHeader.html(this.opts.title);
- },
- setContent: function()
- {
- if (typeof this.opts.content == 'object' || this.opts.content.search('#') === 0)
- {
- this.type = 'html';
-
- this.$modalBody.html($(this.opts.content).html());
- this.show();
- }
- else
- {
- $.ajax({
- url: this.opts.content,
- cache: false,
- success: $.proxy(function(data)
- {
- this.$modalBody.html(data);
- this.show();
-
- }, this)
- });
- }
-
- },
- setDraggable: function()
- {
- if (typeof $.fn.draggable === 'undefined') return;
-
- this.$modal.draggable({ handle: this.$modalHeader });
- this.$modalHeader.css('cursor', 'move');
- },
- createCancelButton: function(label)
- {
- if (typeof label == 'undefined') label = 'Cancel';
-
- var button = $('<button>').addClass('btn modal-close-btn').html(label);
- button.on('click', $.proxy(this.close, this));
-
- this.$modalFooter.append(button);
- },
- createDeleteButton: function(label)
- {
- if (typeof label == 'undefined') label = 'Delete';
-
- return this.createButton(label, 'red');
- },
- createActionButton: function(label)
- {
- if (typeof label == 'undefined') label = 'Ok';
-
- return this.createButton(label, 'blue');
- },
- createButton: function(label, className)
- {
- var button = $('<button>').addClass('btn').addClass('btn-' + className).html(label);
- this.$modalFooter.append(button);
-
- return button;
- },
- setButtonsWidth: function()
- {
- var buttons = this.$modalFooter.find('button');
- var buttonsSize = buttons.size();
- if (buttonsSize === 0) return;
-
- buttons.css('width', (100/buttonsSize) + '%');
- },
- enableEvents: function()
- {
- this.$modalClose.on('click.tools.modal', $.proxy(this.close, this));
- $(document).on('keyup.tools.modal', $.proxy(this.closeHandler, this));
- this.$modalBox.on('click.tools.modal', $.proxy(this.close, this));
- },
- disableEvents: function()
- {
- this.$modalClose.off('click.tools.modal');
- $(document).off('keyup.tools.modal');
- this.$modalBox.off('click.tools.modal');
- $(window).off('resize.tools.modal');
- },
- closeHandler: function(e)
- {
- if (e.which != 27) return;
-
- this.close();
- },
- close: function(e)
- {
- if (e)
- {
- if (!$(e.target).hasClass('modal-close-btn') && e.target != this.$modalClose[0] && e.target != this.$modalBox[0])
- {
- return;
- }
-
- e.preventDefault();
- }
-
- if (!this.$modalBox) return;
-
- this.disableEvents();
-
- this.$modalOverlay.remove();
- this.$modalBox.fadeOut('fast', $.proxy(function()
- {
- this.$modalBox.remove();
-
- $(document.body).css('overflow', this.bodyOveflow);
-
- // remove blur
- if (this.opts.blur && typeof this.blurredElements != 'undefined')
- {
- this.blurredElements.removeClass('modal-blur');
- }
-
- this.setCallback('closed');
-
- }, this));
- },
- isMobile: function()
- {
- var mq = window.matchMedia("(max-width: 767px)");
- return (mq.matches) ? true : false;
- }
- };
-
- $(window).on('load.tools.modal', function()
- {
- $('[data-tools="modal"]').modal();
- });
-
- // constructor
- Modal.prototype.init.prototype = Modal.prototype;
-
- })(jQuery);
-
-
- /*
- Navigation Fixed Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- // Plugin
- $.fn.navigationFixed = function(options)
- {
- return this.each(function()
- {
- $.data(this, 'navigationFixed', {});
- $.data(this, 'navigationFixed', NavigationFixed(this, options));
- });
-
- };
-
- // Initialization
- function NavigationFixed(el, options)
- {
- return new NavigationFixed.prototype.init(el, options);
- }
-
- $.NavigationFixed = NavigationFixed;
- $.NavigationFixed.NAME = 'navigation-fixed';
- $.NavigationFixed.VERSION = '1.0';
- $.NavigationFixed.opts = {
-
- // settings
-
- };
-
- // Functionality
- NavigationFixed.fn = $.NavigationFixed.prototype = {
-
- // Initialization
- init: function(el, options)
- {
- var mq = window.matchMedia("(max-width: 767px)");
- if (mq.matches) return;
-
- this.$element = el !== false ? $(el) : false;
- this.loadOptions(options);
-
- this.navBoxOffsetTop = this.$element.offset().top;
-
- this.build();
- $(window).scroll($.proxy(this.build, this));
-
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.NavigationFixed.opts),
- this.$element.data(),
- options
- );
- },
- setCallback: function(type, e, data)
- {
- var events = $._data(this.$element[0], 'events');
- if (events && typeof events[type] != 'undefined')
- {
- var value = [];
- var len = events[type].length;
- for (var i = 0; i < len; i++)
- {
- var namespace = events[type][i].namespace;
- if (namespace == 'tools.' + $.NavigationFixed.NAME || namespace == $.NavigationFixed.NAME + '.tools')
- {
- var callback = events[type][i].handler;
- value.push((typeof data == 'undefined') ? callback.call(this, e) : callback.call(this, e, data));
- }
- }
-
- if (value.length == 1) return value[0];
- else return value;
- }
-
- return (typeof data == 'undefined') ? e : data;
-
- },
- build: function()
- {
- if ($(window).scrollTop() > this.navBoxOffsetTop)
- {
- this.$element.addClass('navigation-fixed');
- this.setCallback('fixed');
- }
- else
- {
- this.$element.removeClass('navigation-fixed');
- this.setCallback('unfixed');
- }
-
-
- }
- };
-
- $(window).on('load.tools.navigation-fixed', function()
- {
- $('[data-tools="navigation-fixed"]').navigationFixed();
- });
-
- // constructor
- NavigationFixed.prototype.init.prototype = NavigationFixed.prototype;
-
-
- })(jQuery);
- /*
- Navigation Toggle Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- // Plugin
- $.fn.navigationToggle = function(options)
- {
- return this.each(function()
- {
- $.data(this, 'navigationToggle', {});
- $.data(this, 'navigationToggle', NavigationToggle(this, options));
- });
-
- };
-
- // Initialization
- function NavigationToggle(el, options)
- {
- return new NavigationToggle.prototype.init(el, options);
- }
-
- $.NavigationToggle = NavigationToggle;
- $.NavigationToggle.NAME = 'navigation-toggle';
- $.NavigationToggle.VERSION = '1.0';
- $.NavigationToggle.opts = {
-
- target: false
-
- };
-
- // Functionality
- NavigationToggle.fn = $.NavigationToggle.prototype = {
-
- // Initialization
- init: function(el, options)
- {
- this.$element = el !== false ? $(el) : false;
- this.loadOptions(options);
-
- this.$target = $(this.opts.target);
-
- this.$toggle = this.$element.find('span');
- this.$toggle.on('click', $.proxy(this.onClick, this));
-
- this.build();
- $(window).resize($.proxy(this.build, this));
-
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.NavigationToggle.opts),
- this.$element.data(),
- options
- );
- },
- setCallback: function(type, e, data)
- {
- var events = $._data(this.$element[0], 'events');
- if (events && typeof events[type] != 'undefined')
- {
- var value = [];
- var len = events[type].length;
- for (var i = 0; i < len; i++)
- {
- var namespace = events[type][i].namespace;
- if (namespace == 'tools.' + $.NavigationToggle.NAME || namespace == $.NavigationToggle.NAME + '.tools')
- {
- var callback = events[type][i].handler;
- value.push((typeof data == 'undefined') ? callback.call(this, e) : callback.call(this, e, data));
- }
- }
-
- if (value.length == 1) return value[0];
- else return value;
- }
-
- return (typeof data == 'undefined') ? e : data;
-
- },
- build: function()
- {
- var mq = window.matchMedia("(max-width: 767px)");
- if (mq.matches)
- {
- // hide
- if (!this.$target.hasClass('navigation-target-show'))
- {
- this.$element.addClass('navigation-toggle-show').show();
- this.$target.addClass('navigation-target-show').hide();
- }
-
- }
- else
- {
- // show
- this.$element.removeClass('navigation-toggle-show').hide();
- this.$target.removeClass('navigation-target-show').show();
- }
- },
- onClick: function(e)
- {
- e.stopPropagation();
- e.preventDefault();
-
- if (this.isTargetHide())
- {
- this.$element.addClass('navigation-toggle-show');
- this.$target.show();
- this.setCallback('show', this.$target);
- }
- else
- {
- this.$element.removeClass('navigation-toggle-show');
- this.$target.hide();
- this.setCallback('hide', this.$target);
- }
- },
- isTargetHide: function()
- {
- return (this.$target[0].style.display == 'none') ? true : false;
- }
- };
-
- $(window).on('load.tools.navigation-toggle', function()
- {
- $('[data-tools="navigation-toggle"]').navigationToggle();
- });
-
- // constructor
- NavigationToggle.prototype.init.prototype = NavigationToggle.prototype;
-
-
- })(jQuery);
- /*
- Progress Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- $.progress = {
- show: function()
- {
- if ($('#tools-progress').length !== 0)
- {
- $('#tools-progress').fadeIn();
- }
- else
- {
- var $progress = $('<div id="tools-progress"><span></span></div>').hide();
- $(document.body).append($progress);
- $('#tools-progress').fadeIn();
- }
- },
- update: function(value)
- {
- this.show();
- $('#tools-progress').find('span').css('width', value + '%');
- },
- hide: function()
- {
- $('#tools-progress').fadeOut(1500);
- }
- };
-
-
- })(jQuery);
-
- /*
- Tabs Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- // Plugin
- $.fn.tabs = function(options)
- {
- var val = [];
- var args = Array.prototype.slice.call(arguments, 1);
-
- if (typeof options === 'string')
- {
- this.each(function()
- {
- var instance = $.data(this, 'tabs');
- if (typeof instance !== 'undefined' && $.isFunction(instance[options]))
- {
- var methodVal = instance[options].apply(instance, args);
- if (methodVal !== undefined && methodVal !== instance) val.push(methodVal);
- }
- else return $.error('No such method "' + options + '" for Tabs');
- });
- }
- else
- {
- this.each(function()
- {
- $.data(this, 'tabs', {});
- $.data(this, 'tabs', Tabs(this, options));
- });
- }
-
- if (val.length === 0) return this;
- else if (val.length === 1) return val[0];
- else return val;
- };
-
- // Initialization
- function Tabs(el, options)
- {
- return new Tabs.prototype.init(el, options);
- }
-
- $.Tabs = Tabs;
- $.Tabs.NAME = 'tabs';
- $.Tabs.VERSION = '1.0';
- $.Tabs.opts = {
-
- equals: false,
- active: false
-
- };
-
- // Functionality
- Tabs.fn = $.Tabs.prototype = {
-
- // Initialization
- init: function(el, options)
- {
- this.$element = el !== false ? $(el) : false;
-
- this.loadOptions(options);
-
- this.links = this.$element.find('a');
- this.tabs = [];
-
- this.links.each($.proxy(this.load, this));
-
- this.setEquals();
- this.setCallback('init');
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.Tabs.opts),
- this.$element.data(),
- options
- );
- },
- setCallback: function(type, e, data)
- {
- var events = $._data(this.$element[0], 'events');
- if (events && typeof events[type] != 'undefined')
- {
- var value = [];
- var len = events[type].length;
- for (var i = 0; i < len; i++)
- {
- var namespace = events[type][i].namespace;
- if (namespace == 'tools.' + $.Tabs.NAME || namespace == $.Tabs.NAME + '.tools')
- {
- var callback = events[type][i].handler;
- value.push((typeof data == 'undefined') ? callback.call(this, e) : callback.call(this, e, data));
- }
- }
-
- if (value.length == 1) return value[0];
- else return value;
- }
-
- return (typeof data == 'undefined') ? e : data;
-
- },
- load: function(i, el)
- {
- var $el = $(el);
- var hash = $el.attr('href');
- $el.attr('rel', hash);
-
- this.tabs.push($(hash));
-
- if (!$el.parent().hasClass('active'))
- {
- $(hash).hide();
- }
-
- // is hash in url
- this.readLocationHash(hash);
-
- // is active
- if (this.opts.active !== false && this.opts.active === hash)
- {
- this.show(hash);
- }
-
- $el.on('click', $.proxy(this.onClick, this));
- },
- onClick: function(e)
- {
- e.preventDefault();
-
- var hash = $(e.target).attr('rel');
- top.location.hash = hash;
- this.show(hash);
- },
- readLocationHash: function(hash)
- {
- if (top.location.hash === '' || top.location.hash != hash) return;
-
- this.opts.active = top.location.hash;
- },
- setActive: function(hash)
- {
- this.activeHash = hash;
- this.activeTab = $('[rel=' + hash + ']');
-
- this.links.parent().removeClass('active');
- this.activeTab.parent().addClass('active');
- },
- getActiveHash: function()
- {
- return this.activeHash;
- },
- getActiveTab: function()
- {
- return this.activeTab;
- },
- show: function(hash)
- {
- this.hideAll();
- $(hash).show();
- this.setActive(hash);
-
- this.setCallback('show', $('[rel=' + hash + ']'), hash);
- },
- hideAll: function()
- {
- $.each(this.tabs, function()
- {
- $(this).hide();
- });
- },
- setEquals: function()
- {
- if (!this.opts.equals) return;
-
- this.setMaxHeight(this.getMaxHeight());
- },
- setMaxHeight: function(height)
- {
- $.each(this.tabs, function()
- {
- $(this).css('min-height', height + 'px');
- });
- },
- getMaxHeight: function()
- {
- var max = 0;
- $.each(this.tabs, function()
- {
- var h = $(this).height();
- max = h > max ? h : max;
- });
-
- return max;
- }
- };
-
- $(window).on('load.tools.tabs', function()
- {
- $('[data-tools="tabs"]').tabs();
- });
-
- // constructor
- Tabs.prototype.init.prototype = Tabs.prototype;
-
- })(jQuery);
-
-
- /*
- TextFit Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- // Plugin
- $.fn.textfit = function(options)
- {
- return this.each(function()
- {
- $.data(this, 'textfit', {});
- $.data(this, 'textfit', Textfit(this, options));
- });
-
- };
-
- // Initialization
- function Textfit(el, options)
- {
- return new Textfit.prototype.init(el, options);
- }
-
- $.Textfit = Textfit;
- $.Textfit.NAME = 'textfit';
- $.Textfit.VERSION = '1.0';
- $.Textfit.opts = {
-
- min: '10px',
- max: '100px',
- compressor: 1
-
- };
-
- // Functionality
- Textfit.fn = $.Textfit.prototype = {
-
- // Initialization
- init: function(el, options)
- {
-
- this.$element = el !== false ? $(el) : false;
- this.loadOptions(options);
-
- this.$element.css('font-size', Math.max(Math.min(this.$element.width() / (this.opts.compressor*10), parseFloat(this.opts.max)), parseFloat(this.opts.min)));
-
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.Textfit.opts),
- this.$element.data(),
- options
- );
- }
- };
-
- $(window).on('load.tools.textfit', function()
- {
- $('[data-tools="textfit"]').textfit();
- });
-
- // constructor
- Textfit.prototype.init.prototype = Textfit.prototype;
-
-
- })(jQuery);
- /*
- Tooltip Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- // Plugin
- $.fn.tooltip = function(options)
- {
- return this.each(function()
- {
- $.data(this, 'tooltip', {});
- $.data(this, 'tooltip', Tooltip(this, options));
- });
- };
-
- // Initialization
- function Tooltip(el, options)
- {
- return new Tooltip.prototype.init(el, options);
- }
-
- $.Tooltip = Tooltip;
- $.Tooltip.NAME = 'tooltip';
- $.Tooltip.VERSION = '1.0';
- $.Tooltip.opts = {
-
- theme: false
-
- };
-
- // Functionality
- Tooltip.fn = $.Tooltip.prototype = {
-
- // Initialization
- init: function(el, options)
- {
- this.$element = el !== false ? $(el) : false;
-
- this.loadOptions(options);
-
- this.$element.on('mouseover', $.proxy(this.show, this));
- this.$element.on('mouseout', $.proxy(this.hide, this));
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.Tooltip.opts),
- this.$element.data(),
- options
- );
- },
- show: function()
- {
- $('.tooltip').hide();
-
- var text = this.$element.attr('title');
- this.$element.data('cached-title', text);
- this.$element.attr('title', '');
-
- this.tooltip = $('<div class="tooltip" />').html(text).hide();
-
- if (this.opts.theme !== false)
- {
- this.tooltip.addClass('tooltip-theme-' + this.opts.theme);
- }
-
- this.tooltip.css({
- top: (this.$element.offset().top + this.$element.innerHeight()) + 'px',
- left: this.$element.offset().left + 'px'
- });
-
- $('body').append(this.tooltip);
-
- this.tooltip.show();
-
- },
- hide: function()
- {
- this.tooltip.fadeOut('fast', $.proxy(function()
- {
- this.tooltip.remove();
-
- }, this));
-
- this.$element.attr('title', this.$element.data('cached-title'));
- this.$element.data('cached-title', '');
- }
- };
-
- // Constructor
- Tooltip.prototype.init.prototype = Tooltip.prototype;
-
- $(function()
- {
- $('[data-tools="tooltip"]').tooltip();
- });
-
- })(jQuery);
-
- /*
- Upload Tool
-
- http://imperavi.com/kube/
-
- Copyright (c) 2009-2014, Imperavi LLC.
- */
- (function($)
- {
- // Plugin
- $.fn.upload = function(options)
- {
- return this.each(function()
- {
- $.data(this, 'upload', {});
- $.data(this, 'upload', Upload(this, options));
- });
- };
-
- // Initialization
- function Upload(el, options)
- {
- return new Upload.prototype.init(el, options);
- }
-
- $.Upload = Upload;
- $.Upload.NAME = 'upload';
- $.Upload.VERSION = '1.0';
- $.Upload.opts = {
-
- url: false,
- placeholder: 'Drop file here or ',
- param: 'file'
-
- };
-
- // Functionality
- Upload.fn = $.Upload.prototype = {
-
- // Initialization
- init: function(el, options)
- {
- this.$element = el !== false ? $(el) : false;
- this.loadOptions(options);
-
- this.load();
- },
- loadOptions: function(options)
- {
- this.opts = $.extend(
- {},
- $.extend(true, {}, $.Upload.opts),
- this.$element.data(),
- options
- );
- },
- setCallback: function(type, e, data)
- {
- var events = $._data(this.$element[0], 'events');
- if (events && typeof events[type] != 'undefined')
- {
- var value = [];
- var len = events[type].length;
- for (var i = 0; i < len; i++)
- {
- var namespace = events[type][i].namespace;
- if (namespace == 'tools.' + $.Upload.NAME || namespace == $.Upload.NAME + '.tools')
- {
- var callback = events[type][i].handler;
- value.push((typeof data == 'undefined') ? callback.call(this, e) : callback.call(this, e, data));
- }
- }
-
- if (value.length == 1) return value[0];
- else return value;
- }
-
- return (typeof data == 'undefined') ? e : data;
-
- },
- load: function()
- {
- this.$droparea = $('<div class="tools-droparea" />');
- this.$placeholdler = $('<div class="tools-droparea-placeholder" />').text(this.opts.placeholder);
-
- this.$droparea.append(this.$placeholdler);
- this.$element.after(this.$droparea);
- this.$placeholdler.append(this.$element);
-
- this.$droparea.off('.tools.upload');
- this.$element.off('.tools.upload');
-
- this.$droparea.on('dragover.tools.upload', $.proxy(this.onDrag, this));
- this.$droparea.on('dragleave.tools.upload', $.proxy(this.onDragLeave, this));
-
- // change
- this.$element.on('change.tools.upload', $.proxy(function(e)
- {
- e = e.originalEvent || e;
- this.traverseFile(this.$element[0].files[0], e);
- }, this));
-
- // drop
- this.$droparea.on('drop.tools.upload', $.proxy(function(e)
- {
- e.preventDefault();
-
- this.$droparea.removeClass('drag-hover').addClass('drag-drop');
- this.onDrop(e);
-
- }, this));
- },
- onDrop: function(e)
- {
- e = e.originalEvent || e;
- var files = e.dataTransfer.files;
-
- this.traverseFile(files[0], e);
- },
- traverseFile: function(file, e)
- {
- var formData = !!window.FormData ? new FormData() : null;
- if (window.FormData)
- {
- formData.append(this.opts.param, file);
- }
-
- if ($.progress) $.progress.show();
- this.sendData(formData, e);
- },
- sendData: function(formData, e)
- {
- var xhr = new XMLHttpRequest();
- xhr.open('POST', this.opts.url);
-
- // complete
- xhr.onreadystatechange = $.proxy(function()
- {
- if (xhr.readyState == 4)
- {
- var data = xhr.responseText;
-
- data = data.replace(/^\[/, '');
- data = data.replace(/\]$/, '');
-
- var json = (typeof data === 'string' ? $.parseJSON(data) : data);
-
- if ($.progress) $.progress.hide();
-
- this.$droparea.removeClass('drag-drop');
- this.setCallback('success', json);
- }
- }, this);
-
- xhr.send(formData);
- },
- onDrag: function(e)
- {
- e.preventDefault();
- this.$droparea.addClass('drag-hover');
- },
- onDragLeave: function(e)
- {
- e.preventDefault();
- this.$droparea.removeClass('drag-hover');
- }
-
- };
-
- // Constructor
- Upload.prototype.init.prototype = Upload.prototype;
-
- $(function()
- {
- $('[data-tools="upload"]').upload();
- });
-
- })(jQuery);
-
-
|