123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315 |
- /*!
- * Mobiscroll v2.15.1
- * http://mobiscroll.com
- *
- * Copyright 2010-2015, Acid Media
- * Licensed under the MIT license.
- *
- */
- (function ($, undefined) {
- function testProps(props) {
- var i;
- for (i in props) {
- if (mod[props[i]] !== undefined) {
- return true;
- }
- }
- return false;
- }
- function testPrefix() {
- var prefixes = ['Webkit', 'Moz', 'O', 'ms'],
- p;
- for (p in prefixes) {
- if (testProps([prefixes[p] + 'Transform'])) {
- return '-' + prefixes[p].toLowerCase() + '-';
- }
- }
- return '';
- }
- function init(that, options, args) {
- var ret = that;
- // Init
- if (typeof options === 'object') {
- return that.each(function () {
- if (instances[this.id]) {
- instances[this.id].destroy();
- }
- new $.mobiscroll.classes[options.component || 'Scroller'](this, options);
- });
- }
- // Method call
- if (typeof options === 'string') {
- that.each(function () {
- var r,
- inst = instances[this.id];
- if (inst && inst[options]) {
- r = inst[options].apply(this, Array.prototype.slice.call(args, 1));
- if (r !== undefined) {
- ret = r;
- return false;
- }
- }
- });
- }
- return ret;
- }
- var id = +new Date(),
- instances = {},
- extend = $.extend,
- mod = document.createElement('modernizr').style,
- has3d = testProps(['perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective']),
- hasFlex = testProps(['flex', 'msFlex', 'WebkitBoxDirection']),
- prefix = testPrefix(),
- pr = prefix.replace(/^\-/, '').replace(/\-$/, '').replace('moz', 'Moz');
- $.fn.mobiscroll = function (method) {
- extend(this, $.mobiscroll.components);
- return init(this, method, arguments);
- };
- $.mobiscroll = $.mobiscroll || {
- version: '2.15.1',
- util: {
- prefix: prefix,
- jsPrefix: pr,
- has3d: has3d,
- hasFlex: hasFlex,
- testTouch: function (e, elm) {
- if (e.type == 'touchstart') {
- $(elm).attr('data-touch', '1');
- } else if ($(elm).attr('data-touch')) {
- $(elm).removeAttr('data-touch');
- return false;
- }
- return true;
- },
- objectToArray: function (obj) {
- var arr = [],
- i;
- for (i in obj) {
- arr.push(obj[i]);
- }
- return arr;
- },
- arrayToObject: function (arr) {
- var obj = {},
- i;
- if (arr) {
- for (i = 0; i < arr.length; i++) {
- obj[arr[i]] = arr[i];
- }
- }
- return obj;
- },
- isNumeric: function (a) {
- return a - parseFloat(a) >= 0;
- },
- isString: function (s) {
- return typeof s === 'string';
- },
- getCoord: function (e, c) {
- var ev = e.originalEvent || e;
- return ev.changedTouches ? ev.changedTouches[0]['page' + c] : e['page' + c];
- },
- getPosition: function (t, vertical) {
- var style = window.getComputedStyle ? getComputedStyle(t[0]) : t[0].style,
- matrix,
- px;
- if (has3d) {
- $.each(['t', 'webkitT', 'MozT', 'OT', 'msT'], function (i, v) {
- if (style[v + 'ransform'] !== undefined) {
- matrix = style[v + 'ransform'];
- return false;
- }
- });
- matrix = matrix.split(')')[0].split(', ');
- px = vertical ? (matrix[13] || matrix[5]) : (matrix[12] || matrix[4]);
- } else {
- px = vertical ? style.top.replace('px', '') : style.left.replace('px', '');
- }
- return px;
- },
- constrain: function (val, min, max) {
- return Math.max(min, Math.min(val, max));
- },
- vibrate: function (time) {
- if ('vibrate' in navigator) {
- navigator.vibrate(time || 50);
- }
- }
- },
- tapped: false,
- autoTheme: 'mobiscroll',
- presets: {
- scroller: {},
- numpad: {},
- listview: {},
- menustrip: {}
- },
- themes: {
- frame: {},
- listview: {},
- menustrip: {}
- },
- i18n: {},
- instances: instances,
- classes: {},
- components: {},
- defaults: {
- context: 'body',
- mousewheel: true,
- vibrate: true
- },
- setDefaults: function (o) {
- extend(this.defaults, o);
- },
- presetShort: function (name, c, p) {
- this.components[name] = function (s) {
- return init(this, extend(s, { component: c, preset: p === false ? undefined : name }), arguments);
- };
- }
- };
- $.mobiscroll.classes.Base = function (el, settings) {
- var lang,
- preset,
- s,
- theme,
- themeName,
- defaults,
- ms = $.mobiscroll,
- that = this;
- that.settings = {};
- that._presetLoad = function () {};
- that._init = function (ss) {
- s = that.settings;
- // Update original user settings
- extend(settings, ss);
- // Load user defaults
- if (that._hasDef) {
- defaults = ms.defaults;
- }
- // Create settings object
- extend(s, that._defaults, defaults, settings);
- // Get theme defaults
- if (that._hasTheme) {
- themeName = s.theme;
- if (themeName == 'auto' || !themeName) {
- themeName = ms.autoTheme;
- }
- if (themeName == 'default') {
- themeName = 'mobiscroll';
- }
- settings.theme = themeName;
- theme = ms.themes[that._class][themeName];
- }
- // Get language defaults
- if (that._hasLang) {
- lang = ms.i18n[s.lang];
- }
- if (that._hasTheme) {
- that.trigger('onThemeLoad', [lang, settings]);
- }
- // Update settings object
- extend(s, theme, lang, defaults, settings);
- // Load preset settings
- if (that._hasPreset) {
- that._presetLoad(s);
- preset = ms.presets[that._class][s.preset];
- if (preset) {
- preset = preset.call(el, that);
- extend(s, preset, settings);
- }
- }
- };
- that._destroy = function () {
- that.trigger('onDestroy', []);
- // Delete scroller instance
- delete instances[el.id];
- that = null;
- };
- /**
- * Triggers an event
- */
- that.trigger = function (name, args) {
- var ret;
- args.push(that);
- $.each([defaults, theme, preset, settings], function (i, v) {
- if (v && v[name]) { // Call preset event
- ret = v[name].apply(el, args);
- }
- });
- return ret;
- };
- /**
- * Sets one ore more options.
- */
- that.option = function (opt, value) {
- var obj = {};
- if (typeof opt === 'object') {
- obj = opt;
- } else {
- obj[opt] = value;
- }
- that.init(obj);
- };
- /**
- * Returns the mobiscroll instance.
- */
- that.getInst = function () {
- return that;
- };
- settings = settings || {};
- // Autogenerate id
- if (!el.id) {
- el.id = 'mobiscroll' + (++id);
- }
- // Save instance
- instances[el.id] = that;
- };
- })(jQuery);
|