You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
291 lines
6.4 KiB
291 lines
6.4 KiB
9 years ago
|
/*!
|
||
|
* remark (http://getbootstrapadmin.com/remark)
|
||
|
* Copyright 2016 amazingsurge
|
||
|
* Licensed under the Themeforest Standard Licenses
|
||
|
*/
|
||
|
(function(window, document, $) {
|
||
|
'use strict';
|
||
|
|
||
|
var $doc = $(document);
|
||
|
|
||
|
// Site
|
||
|
// ====
|
||
|
$.site = $.site || {};
|
||
|
|
||
|
$.extend($.site, {
|
||
|
_queue: {
|
||
|
prepare: [],
|
||
|
run: [],
|
||
|
complete: []
|
||
|
},
|
||
|
|
||
|
run: function() {
|
||
|
var self = this;
|
||
|
|
||
|
this.dequeue('prepare', function() {
|
||
|
self.trigger('before.run', self);
|
||
|
});
|
||
|
|
||
|
this.dequeue('run', function() {
|
||
|
self.dequeue('complete', function() {
|
||
|
self.trigger('after.run', self);
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
|
||
|
dequeue: function(name, done) {
|
||
|
var self = this,
|
||
|
queue = this.getQueue(name),
|
||
|
fn = queue.shift(),
|
||
|
next = function() {
|
||
|
self.dequeue(name, done);
|
||
|
};
|
||
|
|
||
|
if (fn) {
|
||
|
fn.call(this, next);
|
||
|
} else if ($.isFunction(done)) {
|
||
|
done.call(this);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
getQueue: function(name) {
|
||
|
if (!$.isArray(this._queue[name])) {
|
||
|
this._queue[name] = [];
|
||
|
}
|
||
|
|
||
|
return this._queue[name];
|
||
|
},
|
||
|
|
||
|
extend: function(obj) {
|
||
|
$.each(this._queue, function(name, queue) {
|
||
|
if ($.isFunction(obj[name])) {
|
||
|
queue.push(obj[name]);
|
||
|
|
||
|
delete obj[name];
|
||
|
}
|
||
|
});
|
||
|
|
||
|
$.extend(this, obj);
|
||
|
|
||
|
return this;
|
||
|
},
|
||
|
|
||
|
trigger: function(name, data, $el) {
|
||
|
if (typeof name === 'undefined') return;
|
||
|
if (typeof $el === 'undefined') $el = $doc;
|
||
|
|
||
|
$el.trigger(name + '.site', data);
|
||
|
},
|
||
|
|
||
|
throttle: function(func, wait) {
|
||
|
var _now = Date.now || function() {
|
||
|
return new Date().getTime();
|
||
|
};
|
||
|
var context, args, result;
|
||
|
var timeout = null;
|
||
|
var previous = 0;
|
||
|
|
||
|
var later = function() {
|
||
|
previous = _now();
|
||
|
timeout = null;
|
||
|
result = func.apply(context, args);
|
||
|
context = args = null;
|
||
|
};
|
||
|
|
||
|
return function() {
|
||
|
var now = _now();
|
||
|
var remaining = wait - (now - previous);
|
||
|
context = this;
|
||
|
args = arguments;
|
||
|
if (remaining <= 0) {
|
||
|
clearTimeout(timeout);
|
||
|
timeout = null;
|
||
|
previous = now;
|
||
|
result = func.apply(context, args);
|
||
|
context = args = null;
|
||
|
} else if (!timeout) {
|
||
|
timeout = setTimeout(later, remaining);
|
||
|
}
|
||
|
return result;
|
||
|
};
|
||
|
},
|
||
|
|
||
|
resize: function() {
|
||
|
if (document.createEvent) {
|
||
|
var ev = document.createEvent('Event');
|
||
|
ev.initEvent('resize', true, true);
|
||
|
window.dispatchEvent(ev);
|
||
|
} else {
|
||
|
element = document.documentElement;
|
||
|
var event = document.createEventObject();
|
||
|
element.fireEvent("onresize", event);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// Configs
|
||
|
// =======
|
||
|
$.configs = $.configs || {};
|
||
|
|
||
|
$.extend($.configs, {
|
||
|
data: {},
|
||
|
get: function(name) {
|
||
|
var callback = function(data, name) {
|
||
|
return data[name];
|
||
|
}
|
||
|
|
||
|
var data = this.data;
|
||
|
|
||
|
for (var i = 0; i < arguments.length; i++) {
|
||
|
name = arguments[i];
|
||
|
|
||
|
data = callback(data, name);
|
||
|
}
|
||
|
|
||
|
return data;
|
||
|
},
|
||
|
|
||
|
set: function(name, value) {
|
||
|
this.data[name] = value;
|
||
|
},
|
||
|
|
||
|
extend: function(name, options) {
|
||
|
var value = this.get(name);
|
||
|
return $.extend(true, value, options);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// Colors
|
||
|
// ======
|
||
|
$.colors = function(name, level) {
|
||
|
if (name === 'primary') {
|
||
|
name = $.configs.get('site', 'primaryColor');
|
||
|
if (!name) {
|
||
|
name = 'red';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (typeof $.configs.colors === 'undefined') {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
if (typeof $.configs.colors[name] !== 'undefined') {
|
||
|
if (level && typeof $.configs.colors[name][level] !== 'undefined') {
|
||
|
return $.configs.colors[name][level];
|
||
|
}
|
||
|
|
||
|
if (typeof level === 'undefined') {
|
||
|
return $.configs.colors[name];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
};
|
||
|
|
||
|
// Components
|
||
|
// ==========
|
||
|
$.components = $.components || {};
|
||
|
|
||
|
$.extend($.components, {
|
||
|
_components: {},
|
||
|
|
||
|
register: function(name, obj) {
|
||
|
this._components[name] = obj;
|
||
|
},
|
||
|
|
||
|
init: function(name, context, args) {
|
||
|
var self = this;
|
||
|
|
||
|
if (typeof name === 'undefined') {
|
||
|
$.each(this._components, function(name) {
|
||
|
self.init(name);
|
||
|
});
|
||
|
} else {
|
||
|
context = context || document;
|
||
|
args = args || [];
|
||
|
|
||
|
var obj = this.get(name);
|
||
|
|
||
|
if (obj) {
|
||
|
switch (obj.mode) {
|
||
|
case 'default':
|
||
|
return this._initDefault(name, context);
|
||
|
case 'init':
|
||
|
return this._initComponent(name, obj, context, args);
|
||
|
case 'api':
|
||
|
return this._initApi(name, obj, args);
|
||
|
default:
|
||
|
this._initApi(name, obj, context, args);
|
||
|
this._initComponent(name, obj, context, args);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/* init alternative, but only or init mode */
|
||
|
call: function(name, context) {
|
||
|
var args = Array.prototype.slice.call(arguments, 2);
|
||
|
var obj = this.get(name);
|
||
|
|
||
|
context = context || document;
|
||
|
|
||
|
return this._initComponent(name, obj, context, args);
|
||
|
},
|
||
|
|
||
|
_initDefault: function(name, context) {
|
||
|
if (!$.fn[name]) return;
|
||
|
|
||
|
var defaults = this.getDefaults(name);
|
||
|
|
||
|
$('[data-plugin=' + name + ']', context).each(function() {
|
||
|
var $this = $(this),
|
||
|
options = $.extend(true, {}, defaults, $this.data());
|
||
|
|
||
|
$this[name](options);
|
||
|
});
|
||
|
},
|
||
|
|
||
|
|
||
|
_initComponent: function(name, obj, context, args) {
|
||
|
if ($.isFunction(obj.init)) {
|
||
|
obj.init.apply(obj, [context].concat(args));
|
||
|
}
|
||
|
},
|
||
|
|
||
|
_initApi: function(name, obj, args) {
|
||
|
if (typeof obj.apiCalled === 'undefined' && $.isFunction(obj.api)) {
|
||
|
obj.api.apply(obj, args);
|
||
|
|
||
|
obj.apiCalled = true;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
|
||
|
getDefaults: function(name) {
|
||
|
var component = this.get(name);
|
||
|
|
||
|
if (component && typeof component.defaults !== "undefined") {
|
||
|
return component.defaults;
|
||
|
} else {
|
||
|
return {};
|
||
|
}
|
||
|
},
|
||
|
|
||
|
get: function(name, property) {
|
||
|
if (typeof this._components[name] !== "undefined") {
|
||
|
if (typeof property !== "undefined") {
|
||
|
return this._components[name][property];
|
||
|
} else {
|
||
|
return this._components[name];
|
||
|
}
|
||
|
} else {
|
||
|
console.warn('component:' + component + ' script is not loaded.');
|
||
|
|
||
|
return undefined;
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
})(window, document, jQuery);
|