/
modules.js
60 lines (48 loc) · 1.67 KB
/
modules.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
(function(global) {
"use strict";
var $ = global.jQuery;
var GOVUK = global.GOVUK || {};
GOVUK.Modules = GOVUK.Modules || {};
GOVUK.modules = {
find: function(container) {
var modules,
moduleSelector = '[data-module]',
container = container || $('body');
modules = container.find(moduleSelector);
// Container could be a module too
if (container.is(moduleSelector)) {
modules = modules.add(container);
}
return modules;
},
start: function(container) {
var modules = this.find(container);
for (var i = 0, l = modules.length; i < l; i++) {
var module,
element = $(modules[i]),
type = camelCaseAndCapitalise(element.data('module')),
started = element.data('module-started');
if (typeof GOVUK.Modules[type] === "function" && !started) {
module = new GOVUK.Modules[type]();
module.start(element);
element.data('module-started', true);
}
}
// eg selectable-table to SelectableTable
function camelCaseAndCapitalise(string) {
return capitaliseFirstLetter(camelCase(string));
}
// http://stackoverflow.com/questions/6660977/convert-hyphens-to-camel-case-camelcase
function camelCase(string) {
return string.replace(/-([a-z])/g, function (g) {
return g[1].toUpperCase();
});
}
// http://stackoverflow.com/questions/1026069/capitalize-the-first-letter-of-string-in-javascript
function capitaliseFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
}
}
global.GOVUK = GOVUK;
})(window);