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.
 
 
 

290 lines
6.4 KiB

/*!
* 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);