dolt 0.16.0 → 0.17.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +3 -3
- data/dolt.gemspec +2 -2
- data/vendor/ui/.gitmodules +6 -0
- data/vendor/ui/build +35 -11
- data/vendor/ui/css/gitorious.css +8 -6
- data/vendor/ui/css/{pygments.css → syntax-highlight.css} +7 -0
- data/vendor/ui/dist/gitorious3.min.css +1 -0
- data/vendor/ui/dist/gitorious3.min.js +3 -0
- data/vendor/ui/images/gitorious2013.png +0 -0
- data/vendor/ui/js/src/app.js +2 -344
- data/vendor/ui/js/src/components/blob.js +39 -0
- data/vendor/ui/js/src/components/clone-url-selection.js +20 -0
- data/vendor/ui/js/src/components/dropdown.js +71 -0
- data/vendor/ui/js/src/components/ganalytics.js +16 -0
- data/vendor/ui/js/src/components/live-markdown-preview.js +39 -0
- data/vendor/ui/js/src/components/profile-menu.js +1 -1
- data/vendor/ui/js/src/components/ref-selector.js +12 -3
- data/vendor/ui/js/src/components/tree-history.js +3 -2
- data/vendor/ui/js/src/components/user-repo-view-state.js +4 -0
- data/vendor/ui/js/src/gitorious.js +70 -137
- data/vendor/ui/js/src/logger.js +71 -0
- data/vendor/ui/js/test/components/ref-selector-test.js +13 -12
- data/vendor/ui/package.json +2 -1
- metadata +34 -25
- data/vendor/ui/dist/gts-ui-deps.js +0 -1
- data/vendor/ui/js/test/app-test.js +0 -386
@@ -0,0 +1,71 @@
|
|
1
|
+
/*global gts, cull, dome*/
|
2
|
+
function uinitLogger(app, level) {
|
3
|
+
if (typeof level === "string") {
|
4
|
+
level = uinitLogger.levels.indexOf((level || "info").toLowerCase());
|
5
|
+
}
|
6
|
+
|
7
|
+
if (typeof level !== "number") {
|
8
|
+
level = uinitLogger.DEBUG;
|
9
|
+
}
|
10
|
+
|
11
|
+
if (level <= uinitLogger.INFO) {
|
12
|
+
app.on("init", function () {
|
13
|
+
console.log("===========================");
|
14
|
+
console.log("Attempting to load features");
|
15
|
+
console.log("===========================");
|
16
|
+
});
|
17
|
+
}
|
18
|
+
|
19
|
+
if (level <= uinitLogger.DEBUG) {
|
20
|
+
app.on("loading", function (feature) {
|
21
|
+
console.log("[Loading:", feature.name + "]");
|
22
|
+
});
|
23
|
+
}
|
24
|
+
|
25
|
+
if (level <= uinitLogger.INFO) {
|
26
|
+
app.on("pending", function (feature) {
|
27
|
+
var reason, waitingFor = cull.map(cull.prop("name"), cull.select(function (f) {
|
28
|
+
return !f.loaded;
|
29
|
+
}, feature.dependencies()));
|
30
|
+
|
31
|
+
if (waitingFor.length > 0) {
|
32
|
+
reason = "Waiting for ";
|
33
|
+
reason += waitingFor.length === 1 ? "dependency" : "dependencies";
|
34
|
+
reason += " [" + waitingFor.join(", ") + "]";
|
35
|
+
}
|
36
|
+
|
37
|
+
if (!reason && feature.elements) {
|
38
|
+
if (dome.byClass(feature.elements).length === 0) {
|
39
|
+
reason = "No matching elements for selector ." + feature.elements;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
if (!reason && !feature.nullable) {
|
44
|
+
reason = "Feature produced null/undefined but is not nullable";
|
45
|
+
}
|
46
|
+
|
47
|
+
console.log("[Pending:", feature.name + "]", reason);
|
48
|
+
});
|
49
|
+
}
|
50
|
+
|
51
|
+
if (level <= uinitLogger.INFO) {
|
52
|
+
app.on("loaded", function (feature, result) {
|
53
|
+
console.log("[Load:", feature.name + "] =>", result);
|
54
|
+
});
|
55
|
+
}
|
56
|
+
|
57
|
+
if (level <= uinitLogger.ERROR) {
|
58
|
+
app.on("error", function (feature, err) {
|
59
|
+
console.log("Error while loading", feature.name);
|
60
|
+
console.log(" " + err.stack);
|
61
|
+
});
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
uinitLogger.levels = ["debug", "info", "warn", "error"];
|
66
|
+
|
67
|
+
cull.doall(function (level, i) {
|
68
|
+
uinitLogger[level.toUpperCase()] = i;
|
69
|
+
}, uinitLogger.levels);
|
70
|
+
|
71
|
+
uinitLogger(this.gts.app, uinitLogger.INFO);
|
@@ -1,6 +1,7 @@
|
|
1
|
+
/*global gts*/
|
1
2
|
buster.testCase("Ref selector", {
|
2
3
|
"returns div": function () {
|
3
|
-
var element = gts.refSelector({});
|
4
|
+
var element = gts.refSelector.build({});
|
4
5
|
|
5
6
|
assert.tagName(element, "div");
|
6
7
|
assert.className(element, "dropdown");
|
@@ -8,7 +9,7 @@ buster.testCase("Ref selector", {
|
|
8
9
|
},
|
9
10
|
|
10
11
|
"includes link to current branch by ref": function () {
|
11
|
-
var element = gts.refSelector({
|
12
|
+
var element = gts.refSelector.build({
|
12
13
|
heads: [["master", "0123456"]]
|
13
14
|
}, "0123456");
|
14
15
|
var a = element.firstChild;
|
@@ -21,7 +22,7 @@ buster.testCase("Ref selector", {
|
|
21
22
|
},
|
22
23
|
|
23
24
|
"includes link to current branch by name": function () {
|
24
|
-
var element = gts.refSelector({
|
25
|
+
var element = gts.refSelector.build({
|
25
26
|
heads: [["master", "0123456"]]
|
26
27
|
}, "master");
|
27
28
|
var a = element.firstChild;
|
@@ -34,7 +35,7 @@ buster.testCase("Ref selector", {
|
|
34
35
|
},
|
35
36
|
|
36
37
|
"includes link to current tag": function () {
|
37
|
-
var element = gts.refSelector({
|
38
|
+
var element = gts.refSelector.build({
|
38
39
|
tags: [["v2.1.0", "1234567"]]
|
39
40
|
}, "1234567");
|
40
41
|
|
@@ -42,7 +43,7 @@ buster.testCase("Ref selector", {
|
|
42
43
|
},
|
43
44
|
|
44
45
|
"includes link to current ref": function () {
|
45
|
-
var element = gts.refSelector({
|
46
|
+
var element = gts.refSelector.build({
|
46
47
|
tags: [["v2.1.0", "1234567"]]
|
47
48
|
}, "aabbcc4");
|
48
49
|
|
@@ -50,21 +51,21 @@ buster.testCase("Ref selector", {
|
|
50
51
|
},
|
51
52
|
|
52
53
|
"includes list of refs": function () {
|
53
|
-
var element = gts.refSelector({});
|
54
|
+
var element = gts.refSelector.build({});
|
54
55
|
|
55
56
|
assert.tagName(element.childNodes[1], "ul");
|
56
57
|
assert.className(element.childNodes[1], "dropdown-menu");
|
57
58
|
},
|
58
59
|
|
59
60
|
"includes ref input": function () {
|
60
|
-
var list = gts.refSelector({}).childNodes[1];
|
61
|
+
var list = gts.refSelector.build({}).childNodes[1];
|
61
62
|
|
62
63
|
assert.className(list.firstChild, "gts-dropdown-input");
|
63
64
|
assert.match(list.firstChild.innerHTML, "Enter ref:");
|
64
65
|
},
|
65
66
|
|
66
67
|
"links all heads": function () {
|
67
|
-
var element = gts.refSelector({
|
68
|
+
var element = gts.refSelector.build({
|
68
69
|
heads: [["libgit2", "1234567"], ["master", "2345678"]],
|
69
70
|
tags: [["v2.1.0", "34565789"], ["v2.1.1", "45657890"]]
|
70
71
|
}, "2345678");
|
@@ -77,7 +78,7 @@ buster.testCase("Ref selector", {
|
|
77
78
|
},
|
78
79
|
|
79
80
|
"links all tags": function () {
|
80
|
-
var element = gts.refSelector({
|
81
|
+
var element = gts.refSelector.build({
|
81
82
|
heads: ["libgit2", "master"],
|
82
83
|
tags: [["v2.1.0", "1234567"], ["v2.1.1", "2345678"]]
|
83
84
|
}, "2345678");
|
@@ -90,7 +91,7 @@ buster.testCase("Ref selector", {
|
|
90
91
|
},
|
91
92
|
|
92
93
|
"sorts refs alpha-numerically": function () {
|
93
|
-
var element = gts.refSelector({
|
94
|
+
var element = gts.refSelector.build({
|
94
95
|
"heads": [["feature-B", "1234567"],
|
95
96
|
["master", "2345678"],
|
96
97
|
["feature-A", "3456789"]],
|
@@ -114,7 +115,7 @@ buster.testCase("Ref selector", {
|
|
114
115
|
// Since switching from jQuery to Dome, this test no longer works,
|
115
116
|
// as it's not possible(?) to fake the stopPropagation method.
|
116
117
|
// Not sure how to solve
|
117
|
-
var element = gts.refSelector({
|
118
|
+
var element = gts.refSelector.build({
|
118
119
|
heads: [["libgit2", "1234567"], ["master", "2345678"]],
|
119
120
|
tags: [["v2.1.0", "34565789"], ["v2.1.1", "45657890"]]
|
120
121
|
}, "2345678");
|
@@ -127,7 +128,7 @@ buster.testCase("Ref selector", {
|
|
127
128
|
},
|
128
129
|
|
129
130
|
"uses URL template to generate links": function () {
|
130
|
-
var element = gts.refSelector({
|
131
|
+
var element = gts.refSelector.build({
|
131
132
|
heads: [["libgit2", "1234567"], ["master", "2345678"]],
|
132
133
|
tags: [["v2.1.0", "34565789"], ["v2.1.1", "45657890"]]
|
133
134
|
}, "2345678", "/dolt/#{ref}:");
|
data/vendor/ui/package.json
CHANGED
metadata
CHANGED
@@ -1,40 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dolt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.17.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.16.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Christian Johansen
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
|
15
|
+
name: libdolt
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '0.
|
21
|
+
version: '0.20'
|
22
|
+
type: :runtime
|
22
23
|
prerelease: false
|
23
24
|
version_requirements: !ruby/object:Gem::Requirement
|
24
25
|
none: false
|
25
26
|
requirements:
|
26
27
|
- - ~>
|
27
28
|
- !ruby/object:Gem::Version
|
28
|
-
version: '0.
|
29
|
-
name: libdolt
|
29
|
+
version: '0.20'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
|
31
|
+
name: thin
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
35
|
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
37
|
version: '1.4'
|
38
|
+
type: :runtime
|
38
39
|
prerelease: false
|
39
40
|
version_requirements: !ruby/object:Gem::Requirement
|
40
41
|
none: false
|
@@ -42,15 +43,15 @@ dependencies:
|
|
42
43
|
- - ~>
|
43
44
|
- !ruby/object:Gem::Version
|
44
45
|
version: '1.4'
|
45
|
-
name: thin
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
|
47
|
+
name: sinatra
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
51
|
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: '1.0'
|
54
|
+
type: :runtime
|
54
55
|
prerelease: false
|
55
56
|
version_requirements: !ruby/object:Gem::Requirement
|
56
57
|
none: false
|
@@ -58,15 +59,15 @@ dependencies:
|
|
58
59
|
- - ~>
|
59
60
|
- !ruby/object:Gem::Version
|
60
61
|
version: '1.0'
|
61
|
-
name: sinatra
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
|
63
|
+
name: tiltout
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
67
67
|
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '1.4'
|
70
|
+
type: :runtime
|
70
71
|
prerelease: false
|
71
72
|
version_requirements: !ruby/object:Gem::Requirement
|
72
73
|
none: false
|
@@ -74,15 +75,15 @@ dependencies:
|
|
74
75
|
- - ~>
|
75
76
|
- !ruby/object:Gem::Version
|
76
77
|
version: '1.4'
|
77
|
-
name: tiltout
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
|
-
|
79
|
+
name: json
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
81
81
|
none: false
|
82
82
|
requirements:
|
83
83
|
- - ~>
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: '1.5'
|
86
|
+
type: :runtime
|
86
87
|
prerelease: false
|
87
88
|
version_requirements: !ruby/object:Gem::Requirement
|
88
89
|
none: false
|
@@ -90,15 +91,15 @@ dependencies:
|
|
90
91
|
- - ~>
|
91
92
|
- !ruby/object:Gem::Version
|
92
93
|
version: '1.5'
|
93
|
-
name: json
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
|
-
|
95
|
+
name: main
|
96
96
|
requirement: !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
98
98
|
requirements:
|
99
99
|
- - ~>
|
100
100
|
- !ruby/object:Gem::Version
|
101
101
|
version: '5.2'
|
102
|
+
type: :runtime
|
102
103
|
prerelease: false
|
103
104
|
version_requirements: !ruby/object:Gem::Requirement
|
104
105
|
none: false
|
@@ -106,15 +107,15 @@ dependencies:
|
|
106
107
|
- - ~>
|
107
108
|
- !ruby/object:Gem::Version
|
108
109
|
version: '5.2'
|
109
|
-
name: main
|
110
110
|
- !ruby/object:Gem::Dependency
|
111
|
-
|
111
|
+
name: minitest
|
112
112
|
requirement: !ruby/object:Gem::Requirement
|
113
113
|
none: false
|
114
114
|
requirements:
|
115
115
|
- - ~>
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '2.0'
|
118
|
+
type: :development
|
118
119
|
prerelease: false
|
119
120
|
version_requirements: !ruby/object:Gem::Requirement
|
120
121
|
none: false
|
@@ -122,15 +123,15 @@ dependencies:
|
|
122
123
|
- - ~>
|
123
124
|
- !ruby/object:Gem::Version
|
124
125
|
version: '2.0'
|
125
|
-
name: minitest
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
|
-
|
127
|
+
name: rake
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
none: false
|
130
130
|
requirements:
|
131
131
|
- - ~>
|
132
132
|
- !ruby/object:Gem::Version
|
133
133
|
version: '0.9'
|
134
|
+
type: :development
|
134
135
|
prerelease: false
|
135
136
|
version_requirements: !ruby/object:Gem::Requirement
|
136
137
|
none: false
|
@@ -138,15 +139,15 @@ dependencies:
|
|
138
139
|
- - ~>
|
139
140
|
- !ruby/object:Gem::Version
|
140
141
|
version: '0.9'
|
141
|
-
name: rake
|
142
142
|
- !ruby/object:Gem::Dependency
|
143
|
-
|
143
|
+
name: rack-test
|
144
144
|
requirement: !ruby/object:Gem::Requirement
|
145
145
|
none: false
|
146
146
|
requirements:
|
147
147
|
- - ~>
|
148
148
|
- !ruby/object:Gem::Version
|
149
149
|
version: '0.6'
|
150
|
+
type: :development
|
150
151
|
prerelease: false
|
151
152
|
version_requirements: !ruby/object:Gem::Requirement
|
152
153
|
none: false
|
@@ -154,7 +155,6 @@ dependencies:
|
|
154
155
|
- - ~>
|
155
156
|
- !ruby/object:Gem::Version
|
156
157
|
version: '0.6'
|
157
|
-
name: rack-test
|
158
158
|
description: Dolt serves git trees and syntax highlighted blobs
|
159
159
|
email:
|
160
160
|
- christian@gitorious.org
|
@@ -184,23 +184,31 @@ files:
|
|
184
184
|
- vendor/ui/build
|
185
185
|
- vendor/ui/buster.js
|
186
186
|
- vendor/ui/css/gitorious.css
|
187
|
-
- vendor/ui/css/
|
188
|
-
- vendor/ui/dist/
|
187
|
+
- vendor/ui/css/syntax-highlight.css
|
188
|
+
- vendor/ui/dist/gitorious3.min.css
|
189
|
+
- vendor/ui/dist/gitorious3.min.js
|
189
190
|
- vendor/ui/iconic/lock_stroke.svg
|
190
191
|
- vendor/ui/images/f5f5f5-980x1.png
|
191
192
|
- vendor/ui/images/gitorious.png
|
193
|
+
- vendor/ui/images/gitorious2013.png
|
192
194
|
- vendor/ui/images/powered-by.png
|
193
195
|
- vendor/ui/images/white-980x1.png
|
194
196
|
- vendor/ui/js/src/app.js
|
195
197
|
- vendor/ui/js/src/components/abbrev.js
|
198
|
+
- vendor/ui/js/src/components/blob.js
|
199
|
+
- vendor/ui/js/src/components/clone-url-selection.js
|
196
200
|
- vendor/ui/js/src/components/commit-linker.js
|
201
|
+
- vendor/ui/js/src/components/dropdown.js
|
202
|
+
- vendor/ui/js/src/components/ganalytics.js
|
203
|
+
- vendor/ui/js/src/components/live-markdown-preview.js
|
197
204
|
- vendor/ui/js/src/components/profile-menu.js
|
198
205
|
- vendor/ui/js/src/components/ref-selector.js
|
199
206
|
- vendor/ui/js/src/components/tree-history.js
|
200
207
|
- vendor/ui/js/src/components/url.js
|
208
|
+
- vendor/ui/js/src/components/user-repo-view-state.js
|
201
209
|
- vendor/ui/js/src/gitorious.js
|
210
|
+
- vendor/ui/js/src/logger.js
|
202
211
|
- vendor/ui/js/test-libs/jquery-1.9.1.min.js
|
203
|
-
- vendor/ui/js/test/app-test.js
|
204
212
|
- vendor/ui/js/test/components/abbrev-test.js
|
205
213
|
- vendor/ui/js/test/components/commit-linker-test.js
|
206
214
|
- vendor/ui/js/test/components/profile-menu-test.js
|
@@ -240,3 +248,4 @@ signing_key:
|
|
240
248
|
specification_version: 3
|
241
249
|
summary: Dolt serves git trees and syntax highlighted blobs
|
242
250
|
test_files: []
|
251
|
+
has_rdoc:
|
@@ -1 +0,0 @@
|
|
1
|
-
var cull=function(a){function d(a){return!!a&&typeof a=="object"&&typeof a.length=="number"&&!a.tagName}function e(a){return c.call(a)==="[object Array]"?a:d(a)?b.call(a):typeof a=="undefined"||a===null?[]:b.call(arguments)}function f(a,b){var c,d;for(c=0,d=b.length;c<d;++c)a(b[c],c,b)}function g(a){return typeof a=="function"}function h(a,b,c){var d=0,e,f=c,g=b;arguments.length===2&&(f=b,g=f[0],d=1),typeof f=="string"&&(f=f.split(""));for(e=f.length;d<e;++d)g=a(g,f[d]);return g}function i(a,b){var c,d;for(c=0,d=b.length;c<d;++c)if(!a(b[c]))return!1;return!0}function j(a,b){var c,d;for(c=0,d=b.length;c<d;++c)if(a(b[c]))return!0;return!1}function k(a,b){var c,d,e,f;for(c=0,d=b.length;c<d;++c){a(b[c])?e=!0:f=!0;if(e&&f)return!0}return!1}function l(a){return a.trim&&a.trim()||a.replace(/^\s+|\s+$/,"")}function m(a){return a}function n(a){return typeof a!="undefined"&&a!==null}function o(a){return function(b){return a.call(this,b)}}function p(a){return function(b){return b[a]}}function q(a,b){return function(c){return c[a].apply(c,e(b))}}function r(a){return function(b){return a===b}}function t(a,b){var c=e(a);return function(){var a=c.length,d=arguments;while(a--)d=[c[a].apply(b||this,d)];return d[0]}}function u(){var a=arguments;return function(b){return b.apply(this,a)}}function v(a){var c=b.call(arguments,1);return function(){return a.apply(this,c.concat(b.call(arguments)))}}function w(a,c){var d=typeof c=="string"?a[c]:c,e=b.call(arguments,2);return function(){return d.apply(a,e.concat(b.call(arguments)))}}function x(a){var b=[],c,e;for(c=0,e=a.length;c<e;c++)b=b.concat(d(a[c])?x(a[c]):a[c]);return b}function y(a,b){var c,d;for(c=0,d=b.length;c<d;++c)if(a===b[c])return c;return-1}function z(a){var b=[],c,d;for(c=0,d=a.length;c<d;++c)y(a[c],b)<0&&b.push(a[c]);return b}function A(a,b){var c,d;for(c=0,d=b.length;c<d;++c)if(a(b[c]))return b[c]}function B(a,b){var c=[],d,e;for(d=0,e=b.length;d<e;++d)a(b[d])&&c.push(b[d]);return c}function C(a,b){return B(function(a){return y(a,b)<0},a)}function D(a){var b,c=[];for(b in a)a.hasOwnProperty(b)&&c.push(b);return c}function E(a){var b,c=[];for(b in a)a.hasOwnProperty(b)&&c.push(a[b]);return c}function G(a,b){var c=[],d,e;for(d=0,e=b.length;d<e;d++)c.push(a(b[d]));return c}function H(a){return function(){return!a.apply(this,arguments)}}function I(a,b){return B(H(a),b)}function J(a,b){return e(a).concat(e(b))}function K(a,b){var c=[],d,e;for(d=0,e=b.length;d<e;d+=a)c.push(b.slice(d,d+a));return c}function L(a,b){return F(G(a,F(b)))}function M(a,b){return h(J,G(a,b))}function N(a,b){var c=[],d,e;for(d=0,e=b.length;d<e;d+=1)c.push(b[d]),d<e-1&&c.push(a);return c}function O(a,c,d){var e=a[c];a[c]=function(){var a=e.apply(this,arguments),c=d.apply(this,[a].concat(b.call(arguments)));return typeof c!="undefined"?c:a}}function P(a,b,c){var d=a[b];a[b]=function(){return c.apply(this,arguments),d.apply(this,arguments)}}function Q(a,b,c){var d=v(c,a[b]);a[b]=function(){return d.apply(this,arguments)}}"use strict";var b=Array.prototype.slice,c=Object.prototype.toString,s="compose takes func|[funcs] and optional thisp object",F=v(B,n);return{trim:l,doall:f,reduce:h,all:i,some:j,onlySome:k,isFunction:g,isList:d,toList:e,identity:m,defined:n,unary:o,prop:p,func:q,eq:r,compose:t,callWith:u,partial:v,bind:w,keys:D,values:E,concat:J,flatten:x,uniq:z,first:A,select:B,negate:H,reject:I,seldef:F,map:G,mapdef:L,mapcat:M,partition:K,difference:C,interpose:N,indexOf:y,after:O,before:P,around:Q}}(this);typeof require=="function"&&typeof module!="undefined"&&(module.exports=cull)var dome=function(a){function b(c){if(a.isList(c))return a.flatten(a.map(b,c));var d=[],e=c.firstChild;while(e)e.nodeType===1&&d.push(e),e=e.nextSibling;return d}function c(a){return document.getElementById(a)}function d(b,d){d||(d=document);var e=function(b,e){if(/^#/.test(e))return b.concat(c(e.slice(1)));if(/^\./.test(e)){var f=e.slice(1);return a.concat(b,d.getElementsByClassName(f))}return a.concat(b,d.getElementsByTagName(e))};return a.uniq(a.reduce(e,[],a.toList(b)))}function e(a){a.parentNode.removeChild(a)}function f(a,b){var c=new RegExp("(^|\\s)"+a+"(\\s|$)");return c.test(b.className)}function g(b,c){if(a.isList(c))return a.doall(a.partial(g,b),c);if(f(b,c))return;c.className=a.trim(c.className+" "+b)}function h(b,c){if(a.isList(c))return a.doall(a.partial(h,b),c);if(!f(b,c))return;var d=new RegExp("(^|\\s)"+b+"(\\s|$)");c.className=a.trim(c.className.replace(d," "))}function i(a){var b=a.nodeType;if(b===1||b===9||b===11){if(typeof a.textContent=="string")return a.textContent;var c="";for(a=a.firstChild;a;a=a.nextSibling)c+=i(a);return c}return b===3||b===4?a.nodeValue:""}function j(b){var c=document.createDocumentFragment();return a.doall(a.bind(c,"appendChild"),a.toList(b)),c}function m(a,b){var c;a=a||{};for(c in a)a.hasOwnProperty(c)&&(b.setAttribute("data-"+c,a[c]),b["data-"+c]=a[c])}function n(a,b){return b.getAttribute("data-"+a)}function p(a,b){var c,d;a=a||{};for(c in a)a.hasOwnProperty(c)&&(d=o[c],d?d(b,a[c]):b[c]=a[c])}function q(b,c){b=a.toList(b);var d,e;for(d=0,e=b.length;d<e;++d)typeof b[d]=="string"?c.appendChild(document.createTextNode(b[d])):c.appendChild(b[d])}function r(a,b){b.innerHTML="",q(a,b)}var k,l=function(b){return b!==null&&typeof b!="undefined"&&(typeof b.nodeType!="undefined"||typeof b=="string"||a.isList(b))},o={style:function(a,b){var c;for(c in b)b.hasOwnProperty(c)&&(a.style[c]=b[c])},data:function(a,b){m(b,a)}};return k=function(a,b,c){if(!c&&l(b))return k(a,{},b);var d=document.createElement(a);return p(b,d),q(c||[],d),d},k.toString=function(){return"dome.el()"},a.doall(function(b){k[b]=a.partial(k,b)},["a","br","div","fieldset","form","h2","h3","h4","h5","img","input","label","li","p","span","strong","textarea","ul","span","select","option","ol","iframe","table","tr","td","pre","button","i"]),{propmap:o,el:k,setProp:p,append:q,setContent:r,children:b,id:c,get:d,remove:e,frag:j,text:i,data:{get:n,set:m},cn:{has:f,add:g,rm:h}}}(this.cull)!function(t,e,i){var o=["webkit","Moz","ms","O"],r={},n;function a(t,i){var o=e.createElement(t||"div"),r;for(r in i)o[r]=i[r];return o}function s(t){for(var e=1,i=arguments.length;e<i;e++)t.appendChild(arguments[e]);return t}var f=function(){var t=a("style",{type:"text/css"});s(e.getElementsByTagName("head")[0],t);return t.sheet||t.styleSheet}();function l(t,e,i,o){var a=["opacity",e,~~(t*100),i,o].join("-"),s=.01+i/o*100,l=Math.max(1-(1-t)/e*(100-s),t),p=n.substring(0,n.indexOf("Animation")).toLowerCase(),u=p&&"-"+p+"-"||"";if(!r[a]){f.insertRule("@"+u+"keyframes "+a+"{"+"0%{opacity:"+l+"}"+s+"%{opacity:"+t+"}"+(s+.01)+"%{opacity:1}"+(s+e)%100+"%{opacity:"+t+"}"+"100%{opacity:"+l+"}"+"}",f.cssRules.length);r[a]=1}return a}function p(t,e){var r=t.style,n,a;if(r[e]!==i)return e;e=e.charAt(0).toUpperCase()+e.slice(1);for(a=0;a<o.length;a++){n=o[a]+e;if(r[n]!==i)return n}}function u(t,e){for(var i in e)t.style[p(t,i)||i]=e[i];return t}function c(t){for(var e=1;e<arguments.length;e++){var o=arguments[e];for(var r in o)if(t[r]===i)t[r]=o[r]}return t}function d(t){var e={x:t.offsetLeft,y:t.offsetTop};while(t=t.offsetParent)e.x+=t.offsetLeft,e.y+=t.offsetTop;return e}var h={lines:12,length:7,width:5,radius:10,rotate:0,corners:1,color:"#000",speed:1,trail:100,opacity:1/4,fps:20,zIndex:2e9,className:"spinner",top:"auto",left:"auto",position:"relative"};function m(t){if(!this.spin)return new m(t);this.opts=c(t||{},m.defaults,h)}m.defaults={};c(m.prototype,{spin:function(t){this.stop();var e=this,i=e.opts,o=e.el=u(a(0,{className:i.className}),{position:i.position,width:0,zIndex:i.zIndex}),r=i.radius+i.length+i.width,s,f;if(t){t.insertBefore(o,t.firstChild||null);f=d(t);s=d(o);u(o,{left:(i.left=="auto"?f.x-s.x+(t.offsetWidth>>1):parseInt(i.left,10)+r)+"px",top:(i.top=="auto"?f.y-s.y+(t.offsetHeight>>1):parseInt(i.top,10)+r)+"px"})}o.setAttribute("aria-role","progressbar");e.lines(o,e.opts);if(!n){var l=0,p=i.fps,c=p/i.speed,h=(1-i.opacity)/(c*i.trail/100),m=c/i.lines;(function y(){l++;for(var t=i.lines;t;t--){var r=Math.max(1-(l+t*m)%c*h,i.opacity);e.opacity(o,i.lines-t,r,i)}e.timeout=e.el&&setTimeout(y,~~(1e3/p))})()}return e},stop:function(){var t=this.el;if(t){clearTimeout(this.timeout);if(t.parentNode)t.parentNode.removeChild(t);this.el=i}return this},lines:function(t,e){var i=0,o;function r(t,o){return u(a(),{position:"absolute",width:e.length+e.width+"px",height:e.width+"px",background:t,boxShadow:o,transformOrigin:"left",transform:"rotate("+~~(360/e.lines*i+e.rotate)+"deg) translate("+e.radius+"px"+",0)",borderRadius:(e.corners*e.width>>1)+"px"})}for(;i<e.lines;i++){o=u(a(),{position:"absolute",top:1+~(e.width/2)+"px",transform:e.hwaccel?"translate3d(0,0,0)":"",opacity:e.opacity,animation:n&&l(e.opacity,e.trail,i,e.lines)+" "+1/e.speed+"s linear infinite"});if(e.shadow)s(o,u(r("#000","0 0 4px "+"#000"),{top:2+"px"}));s(t,s(o,r(e.color,"0 0 1px rgba(0,0,0,.1)")))}return t},opacity:function(t,e,i){if(e<t.childNodes.length)t.childNodes[e].style.opacity=i}});(function(){function t(t,e){return a("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">',e)}var e=u(a("group"),{behavior:"url(#default#VML)"});if(!p(e,"transform")&&e.adj){f.addRule(".spin-vml","behavior:url(#default#VML)");m.prototype.lines=function(e,i){var o=i.length+i.width,r=2*o;function n(){return u(t("group",{coordsize:r+" "+r,coordorigin:-o+" "+-o}),{width:r,height:r})}var a=-(i.width+i.length)*2+"px",f=u(n(),{position:"absolute",top:a,left:a}),l;function p(e,r,a){s(f,s(u(n(),{rotation:360/i.lines*e+"deg",left:~~r}),s(u(t("roundrect",{arcsize:i.corners}),{width:o,height:i.width,left:i.radius,top:-i.width>>1,filter:a}),t("fill",{color:i.color,opacity:i.opacity}),t("stroke",{opacity:0}))))}if(i.shadow)for(l=1;l<=i.lines;l++)p(l,-2,"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");for(l=1;l<=i.lines;l++)p(l);return s(e,f)};m.prototype.opacity=function(t,e,i,o){var r=t.firstChild;o=o.shadow&&o.lines||0;if(r&&e+o<r.childNodes.length){r=r.childNodes[e+o];r=r&&r.firstChild;r=r&&r.firstChild;if(r)r.opacity=i}}}else n=p(e,"animation")})();if(typeof define=="function"&&define.amd)define(function(){return m});else t.Spinner=m}(window,document);
|
@@ -1,386 +0,0 @@
|
|
1
|
-
/*global gts, cull, dome, when*/
|
2
|
-
|
3
|
-
buster.testCase("Application", {
|
4
|
-
setUp: function () {
|
5
|
-
this.root = dome.el.div();
|
6
|
-
this.app = gts.app();
|
7
|
-
this.something = dome.el.div({ className: "something" });
|
8
|
-
this.root.appendChild(this.something);
|
9
|
-
},
|
10
|
-
|
11
|
-
"calls dependency-free feature": function () {
|
12
|
-
var feature = this.spy();
|
13
|
-
this.app.feature("Feature", feature);
|
14
|
-
|
15
|
-
this.app.load();
|
16
|
-
|
17
|
-
assert.called(feature);
|
18
|
-
},
|
19
|
-
|
20
|
-
"calls feature once for only matching element": function () {
|
21
|
-
this.root.appendChild(this.something);
|
22
|
-
var feature = this.spy();
|
23
|
-
this.app.feature("Feature", feature, { elements: "something" });
|
24
|
-
|
25
|
-
this.app.load(this.root);
|
26
|
-
|
27
|
-
assert.equals(feature.callCount, 1);
|
28
|
-
assert.calledWith(feature, this.something);
|
29
|
-
},
|
30
|
-
|
31
|
-
"env sets property on app": function () {
|
32
|
-
this.app.env("something", 42);
|
33
|
-
|
34
|
-
assert.equals(this.app.env.something, 42);
|
35
|
-
},
|
36
|
-
|
37
|
-
"runs feature with environment variable": function () {
|
38
|
-
var feature = this.spy();
|
39
|
-
this.app.feature("Feature", feature, { depends: ["answer"] });
|
40
|
-
this.app.env("answer", 42);
|
41
|
-
|
42
|
-
this.app.load();
|
43
|
-
|
44
|
-
assert.calledWith(feature, 42);
|
45
|
-
},
|
46
|
-
|
47
|
-
"does not run feature with unsatiesfied environment": function () {
|
48
|
-
var feature = this.spy();
|
49
|
-
this.app.feature("Feature", feature, { depends: ["answer"] });
|
50
|
-
|
51
|
-
this.app.load();
|
52
|
-
|
53
|
-
refute.called(feature);
|
54
|
-
},
|
55
|
-
|
56
|
-
"runs feature with element and env var": function () {
|
57
|
-
var feature = this.spy();
|
58
|
-
this.app.feature("Feature", feature, {
|
59
|
-
elements: "something",
|
60
|
-
depends: ["answer"]
|
61
|
-
});
|
62
|
-
this.app.env("answer", 42);
|
63
|
-
|
64
|
-
this.app.load(this.root);
|
65
|
-
|
66
|
-
assert.calledWith(feature, this.something, 42);
|
67
|
-
},
|
68
|
-
|
69
|
-
"runs feature with element and multiple env vars": function () {
|
70
|
-
var feature = this.spy();
|
71
|
-
this.app.feature("Feature", feature, {
|
72
|
-
elements: "something",
|
73
|
-
depends: ["question", "answer"]
|
74
|
-
});
|
75
|
-
this.app.env("answer", 42);
|
76
|
-
this.app.env("question", "life");
|
77
|
-
|
78
|
-
this.app.load(this.root);
|
79
|
-
|
80
|
-
assert.calledWith(feature, this.something, "life", 42);
|
81
|
-
},
|
82
|
-
|
83
|
-
"runs feature with for each element with env var": function () {
|
84
|
-
this.root.appendChild(dome.el("div", { className: "something" }));
|
85
|
-
var feature = this.spy();
|
86
|
-
this.app.feature("Feature", feature, {
|
87
|
-
elements: "something",
|
88
|
-
depends: ["question", "answer"]
|
89
|
-
});
|
90
|
-
this.app.env("answer", 42);
|
91
|
-
this.app.env("question", "life");
|
92
|
-
|
93
|
-
this.app.load(this.root);
|
94
|
-
|
95
|
-
assert.calledTwice(feature);
|
96
|
-
assert.calledWith(feature, this.something, "life", 42);
|
97
|
-
},
|
98
|
-
|
99
|
-
"runs feature after run when env var is set": function () {
|
100
|
-
var feature = this.spy();
|
101
|
-
this.app.feature("Feature", feature, {
|
102
|
-
elements: "something",
|
103
|
-
depends: ["question"]
|
104
|
-
});
|
105
|
-
this.app.env("answer", 42);
|
106
|
-
this.app.load(this.root);
|
107
|
-
this.app.env("question", "life");
|
108
|
-
|
109
|
-
assert.called(feature);
|
110
|
-
},
|
111
|
-
|
112
|
-
"setting env var does not load feature when not running": function () {
|
113
|
-
var feature = this.spy();
|
114
|
-
this.app.feature("Feature", feature, {
|
115
|
-
depends: ["question", "answer"]
|
116
|
-
});
|
117
|
-
this.app.env("answer", 42);
|
118
|
-
this.app.env("question", "life");
|
119
|
-
|
120
|
-
refute.called(feature);
|
121
|
-
},
|
122
|
-
|
123
|
-
"lazy feature is not called proactively": function () {
|
124
|
-
var feature = this.spy();
|
125
|
-
this.app.feature("Feature", feature, { lazy: true });
|
126
|
-
|
127
|
-
this.app.load();
|
128
|
-
|
129
|
-
refute.called(feature);
|
130
|
-
},
|
131
|
-
|
132
|
-
"feature is called when depending on executed feature": function () {
|
133
|
-
var feature = this.spy();
|
134
|
-
this.app.feature("A", function () {});
|
135
|
-
this.app.feature("B", feature, { depends: ["A"] });
|
136
|
-
|
137
|
-
this.app.load();
|
138
|
-
|
139
|
-
assert.calledOnce(feature);
|
140
|
-
},
|
141
|
-
|
142
|
-
"feature is called when dependency is resolved": function () {
|
143
|
-
var feature = this.spy();
|
144
|
-
this.app.feature("A", feature, { depends: ["B"] });
|
145
|
-
this.app.feature("B", function () {});
|
146
|
-
|
147
|
-
this.app.load();
|
148
|
-
|
149
|
-
assert.calledOnce(feature);
|
150
|
-
},
|
151
|
-
|
152
|
-
"features are only called once": function () {
|
153
|
-
var featureA = this.spy();
|
154
|
-
var featureB = this.spy();
|
155
|
-
this.app.feature("A", featureA, { depends: ["B"] });
|
156
|
-
this.app.feature("B", featureB);
|
157
|
-
|
158
|
-
this.app.load();
|
159
|
-
|
160
|
-
assert.calledOnce(featureA);
|
161
|
-
assert.calledOnce(featureB);
|
162
|
-
},
|
163
|
-
|
164
|
-
"feature is called when dependency is resolved after run": function () {
|
165
|
-
var feature = this.spy();
|
166
|
-
this.app.feature("A", feature, { depends: ["B"] });
|
167
|
-
|
168
|
-
this.app.load();
|
169
|
-
this.app.feature("B", function () {});
|
170
|
-
|
171
|
-
assert.calledOnce(feature);
|
172
|
-
},
|
173
|
-
|
174
|
-
"feature is called with return-value of dependency": function () {
|
175
|
-
var feature = this.spy();
|
176
|
-
this.app.feature("A", feature, { depends: ["B"] });
|
177
|
-
|
178
|
-
this.app.load();
|
179
|
-
this.app.feature("B", this.stub().returns(42));
|
180
|
-
|
181
|
-
assert.calledWith(feature, 42);
|
182
|
-
},
|
183
|
-
|
184
|
-
"feature is not called until dependency's returned promise resolves": function () {
|
185
|
-
var feature = this.spy();
|
186
|
-
var deferred = when.defer();
|
187
|
-
this.app.feature("A", feature, { depends: ["B"] });
|
188
|
-
this.app.feature("B", this.stub().returns(deferred.promise));
|
189
|
-
|
190
|
-
this.app.load();
|
191
|
-
|
192
|
-
refute.called(feature);
|
193
|
-
deferred.resolve(42);
|
194
|
-
assert.calledOnceWith(feature, 42);
|
195
|
-
},
|
196
|
-
|
197
|
-
"resolves nested dependencies": function () {
|
198
|
-
var feature = this.spy();
|
199
|
-
var deferredB = when.defer();
|
200
|
-
var deferredC = when.defer();
|
201
|
-
this.app.feature("A", feature, { depends: ["B"] });
|
202
|
-
this.app.feature("B", this.stub().returns(deferredB.promise), {
|
203
|
-
depends: ["C"]
|
204
|
-
});
|
205
|
-
this.app.feature("C", this.stub().returns(deferredC.promise));
|
206
|
-
|
207
|
-
this.app.load();
|
208
|
-
deferredB.resolve(42);
|
209
|
-
deferredC.resolve(13);
|
210
|
-
|
211
|
-
assert.calledOnceWith(feature, 42);
|
212
|
-
},
|
213
|
-
|
214
|
-
"calls lazy feature when depended on": function () {
|
215
|
-
var feature = this.spy();
|
216
|
-
this.app.feature("A", feature, { lazy: true });
|
217
|
-
this.app.feature("B", function () {}, { depends: ["A"] });
|
218
|
-
|
219
|
-
this.app.load();
|
220
|
-
|
221
|
-
assert.calledOnce(feature);
|
222
|
-
},
|
223
|
-
|
224
|
-
"throws exception when adding duplicate feature": function () {
|
225
|
-
var app = this.app;
|
226
|
-
app.feature("A", function () {});
|
227
|
-
|
228
|
-
assert.exception(function () { app.feature("A", function () {}); });
|
229
|
-
},
|
230
|
-
|
231
|
-
"throws exception when adding feature duplicating env var": function () {
|
232
|
-
var app = this.app;
|
233
|
-
app.env("A", 42);
|
234
|
-
|
235
|
-
assert.exception(function () { app.feature("A", function () {}); });
|
236
|
-
},
|
237
|
-
|
238
|
-
"throws exception when adding duplicate env var": function () {
|
239
|
-
var app = this.app;
|
240
|
-
app.feature("A", function () {});
|
241
|
-
|
242
|
-
assert.exception(function () { app.env("A", 42); });
|
243
|
-
},
|
244
|
-
|
245
|
-
"data registers lazy feature": function () {
|
246
|
-
var data = this.spy();
|
247
|
-
var feature = this.spy();
|
248
|
-
this.app.data("somedata", data);
|
249
|
-
|
250
|
-
this.app.load();
|
251
|
-
refute.called(data);
|
252
|
-
|
253
|
-
this.app.feature("A", feature, { depends: ["somedata"] });
|
254
|
-
assert.calledOnce(data);
|
255
|
-
assert.calledOnce(feature);
|
256
|
-
},
|
257
|
-
|
258
|
-
"data can have dependencies as well": function () {
|
259
|
-
var data = this.spy();
|
260
|
-
var feature = this.spy();
|
261
|
-
this.app.data("somedata", data, { depends: ["input"] });
|
262
|
-
|
263
|
-
this.app.load();
|
264
|
-
refute.called(data);
|
265
|
-
|
266
|
-
this.app.feature("A", feature, { depends: ["somedata"] });
|
267
|
-
refute.called(data);
|
268
|
-
|
269
|
-
this.app.env("input", 42);
|
270
|
-
assert.calledOnceWith(data, 42);
|
271
|
-
assert.calledOnce(feature);
|
272
|
-
},
|
273
|
-
|
274
|
-
"calling run multiple times reruns features": function () {
|
275
|
-
var feature = this.spy();
|
276
|
-
this.app.feature("A", feature);
|
277
|
-
|
278
|
-
this.app.load();
|
279
|
-
this.app.load();
|
280
|
-
|
281
|
-
assert.calledTwice(feature);
|
282
|
-
},
|
283
|
-
|
284
|
-
"calling run multiple times does not erase env vars": function () {
|
285
|
-
var feature = this.spy();
|
286
|
-
this.app.env("B", 42);
|
287
|
-
this.app.feature("A", feature, { depends: ["B"] });
|
288
|
-
|
289
|
-
this.app.load();
|
290
|
-
this.app.load();
|
291
|
-
|
292
|
-
assert.calledTwice(feature);
|
293
|
-
assert.calledWith(feature, 42);
|
294
|
-
},
|
295
|
-
|
296
|
-
"calling run multiple times with different contexts": function () {
|
297
|
-
var feature = this.spy();
|
298
|
-
this.app.feature("A", feature, { elements: "something" });
|
299
|
-
|
300
|
-
this.app.load(this.root);
|
301
|
-
this.app.load(document.createElement("div"));
|
302
|
-
|
303
|
-
assert.calledOnce(feature);
|
304
|
-
},
|
305
|
-
|
306
|
-
"running feature multiple times in different contexts": function () {
|
307
|
-
var feature = this.spy();
|
308
|
-
var root1 = dome.el.div([dome.el.div({ className: "sumptn" })]);
|
309
|
-
var root2 = dome.el.div([dome.el.div({ className: "sumptn" })]);
|
310
|
-
this.app.feature("A", feature, { elements: "sumptn" });
|
311
|
-
|
312
|
-
this.app.load(root1);
|
313
|
-
this.app.load(root2);
|
314
|
-
|
315
|
-
assert.calledTwice(feature);
|
316
|
-
assert.calledWith(feature, root1.firstChild);
|
317
|
-
assert.calledWith(feature, root2.firstChild);
|
318
|
-
},
|
319
|
-
|
320
|
-
"calls data two times": function () {
|
321
|
-
var data = this.spy();
|
322
|
-
this.app.data("data", data);
|
323
|
-
this.app.feature("A", this.spy(), { depends: ["data"] });
|
324
|
-
|
325
|
-
this.app.load();
|
326
|
-
this.app.load();
|
327
|
-
|
328
|
-
assert.calledTwice(data);
|
329
|
-
},
|
330
|
-
|
331
|
-
"retries features not running": function () {
|
332
|
-
var root = dome.el.div();
|
333
|
-
var feature = this.spy();
|
334
|
-
this.app.feature("A", feature, { elements: "el" });
|
335
|
-
|
336
|
-
this.app.load(root);
|
337
|
-
root.appendChild(dome.el.div({ className: "el" }));
|
338
|
-
this.app.tryPending();
|
339
|
-
|
340
|
-
assert.calledOnce(feature);
|
341
|
-
},
|
342
|
-
|
343
|
-
"retrying does not call running features again": function () {
|
344
|
-
var feature = this.spy();
|
345
|
-
this.app.feature("A", feature);
|
346
|
-
|
347
|
-
this.app.load();
|
348
|
-
this.app.tryPending();
|
349
|
-
|
350
|
-
assert.calledOnce(feature);
|
351
|
-
},
|
352
|
-
|
353
|
-
"events": {
|
354
|
-
setUp: function () {
|
355
|
-
this.loading = this.spy();
|
356
|
-
this.loaded = this.spy();
|
357
|
-
this.pending = this.spy();
|
358
|
-
this.app.on("loading", this.loading);
|
359
|
-
this.app.on("loaded", this.loaded);
|
360
|
-
this.app.on("pending", this.pending);
|
361
|
-
},
|
362
|
-
|
363
|
-
"emits 'loading' when calling feature": function () {
|
364
|
-
var feature = this.spy();
|
365
|
-
this.app.feature("A", feature);
|
366
|
-
|
367
|
-
this.app.load();
|
368
|
-
|
369
|
-
assert.calledOnce(this.loading);
|
370
|
-
assert.match(this.loading.args[0][0], { name: "A" });
|
371
|
-
assert.equals(this.loading.args[0][0].dependencies(), []);
|
372
|
-
},
|
373
|
-
|
374
|
-
"emits 'loading' when calling feature with resolved dependencies": function () {
|
375
|
-
var feature = this.spy();
|
376
|
-
this.app.feature("A", feature, { depends: ["B"] });
|
377
|
-
this.app.feature("B", this.spy());
|
378
|
-
|
379
|
-
this.app.load();
|
380
|
-
|
381
|
-
assert.calledTwice(this.loading);
|
382
|
-
assert.match(this.loading.args[1][0], { name: "A" });
|
383
|
-
assert.match(this.loading.args[1][0].dependencies(), [{ name: "B" }]);
|
384
|
-
}
|
385
|
-
}
|
386
|
-
});
|