/
fashionista.js
100 lines (93 loc) · 2.88 KB
/
fashionista.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define(function () {
return (root.Fashionista = factory());
});
} else {
root.Fashionista = factory();
}
}(this, function () {
'use strict';
function Fashionista(themes, options) {
var self = this;
self.themes = themes;
self.options = (options || {});
self.names = options.names || Object.keys(themes);
if (!self.options.skipLink) {
for (var theme in themes) {
$('head').append('<link rel="stylesheet" title="' + theme + '" href="' + themes[theme] + '" type="text/css" disabled="disabled" />');
}
}
if (!self.options.skipLib) {
var libs = [
'/fashionista/foundation/foundation/foundation.js',
'/fashionista/foundation/foundation/foundation.alerts.js',
'/fashionista/foundation/foundation/foundation.clearing.js',
'/fashionista/foundation/foundation/foundation.cookie.js',
'/fashionista/foundation/foundation/foundation.dropdown.js',
'/fashionista/foundation/foundation/foundation.forms.js',
'/fashionista/foundation/foundation/foundation.interchange.js',
'/fashionista/foundation/foundation/foundation.joyride.js',
'/fashionista/foundation/foundation/foundation.magellan.js',
'/fashionista/foundation/foundation/foundation.orbit.js',
'/fashionista/foundation/foundation/foundation.placeholder.js',
'/fashionista/foundation/foundation/foundation.reveal.js',
'/fashionista/foundation/foundation/foundation.section.js',
'/fashionista/foundation/foundation/foundation.tooltips.js',
'/fashionista/foundation/foundation/foundation.topbar.js'
];
var libLoaded = 0;
libs.forEach(function(js) {
$.ajax({
url: js,
data: '',
complete: function() {
libLoaded++;
if (libLoaded === libs.length) {
self.init();
}
}
});
});
} else {
self.init();
}
}
Fashionista.prototype.init = function() {
var d = $(document);
d.foundation.apply(d, this.options.foundation);
};
/**
* Request to apply a theme by name.
*
* @param {String} theme Name of the theme intended to apply
* @return {Array} Relative urls to each of the css of the requested theem
*/
Fashionista.prototype.use = function(theme) {
if (this.currentTheme !== theme) {
if ('undefined' === typeof this.themes[theme]) {
throw new Error('Theme: "' + theme + '" not loaded.');
}
var self = this, links = [];
$('link[rel*=style]').each(function(i) {
this.disabled = true;
if (this.getAttribute('title') === theme) {
links.push(self.themes[theme]);
this.disabled = false;
}
});
this.currentTheme = theme;
return links;
}
};
Fashionista.prototype.next = function() {
var cur = this.names.indexOf(this.currentTheme);
if (cur === -1 || (cur + 1) >= this.names.length) {
cur = 0;
} else {
cur++;
}
this.use(this.names[cur]);
};
return Fashionista;
}));