dolt 0.23.0 → 0.24.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. data/.gitignore +2 -0
  2. data/.travis.yml +0 -1
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +13 -1
  5. data/Rakefile +10 -0
  6. data/dolt.gemspec +1 -1
  7. data/test/test_helper.rb +5 -0
  8. data/vendor/ui/.gitmodules +9 -0
  9. data/vendor/ui/Makefile +46 -0
  10. data/vendor/ui/buster.js +8 -3
  11. data/vendor/ui/css/gitorious.css +26 -1
  12. data/vendor/ui/dist/gitorious3-capillary.min.js +12 -0
  13. data/vendor/ui/dist/gitorious3.min.css +1 -1
  14. data/vendor/ui/dist/gitorious3.min.js +3 -3
  15. data/vendor/ui/js/src/cache.js +27 -0
  16. data/vendor/ui/js/src/capillary.js +7 -0
  17. data/vendor/ui/js/src/components/blob.js +1 -1
  18. data/vendor/ui/js/src/components/capillary.js +51 -0
  19. data/vendor/ui/js/src/components/clone-name-suggestion.js +38 -0
  20. data/vendor/ui/js/src/components/clone-url-selection.js +25 -15
  21. data/vendor/ui/js/src/components/collapse.js +17 -0
  22. data/vendor/ui/js/src/components/comments.js +111 -0
  23. data/vendor/ui/js/src/components/dropdown.js +4 -2
  24. data/vendor/ui/js/src/components/loading.js +33 -0
  25. data/vendor/ui/js/src/components/oid-ref-interpolator.js +9 -0
  26. data/vendor/ui/js/src/components/profile-menu.js +2 -0
  27. data/vendor/ui/js/src/components/rails-links.js +24 -0
  28. data/vendor/ui/js/src/components/ref-selector.js +3 -1
  29. data/vendor/ui/js/src/components/repository.js +161 -0
  30. data/vendor/ui/js/src/components/timeago.js +38 -0
  31. data/vendor/ui/js/src/components/url.js +1 -1
  32. data/vendor/ui/js/src/gitorious.js +75 -7
  33. data/vendor/ui/js/src/json-request.js +6 -0
  34. data/vendor/ui/js/src/spacer.js +5 -0
  35. data/vendor/ui/js/test/cache-test.js +47 -0
  36. data/vendor/ui/js/test/components/blob-test.js +4 -4
  37. data/vendor/ui/js/test/components/clone-name-suggestion-test.js +37 -0
  38. data/vendor/ui/js/test/components/clone-url-selection-test.js +10 -10
  39. data/vendor/ui/js/test/components/comments-test.js +139 -0
  40. data/vendor/ui/js/test/components/repository-admin-test.js +35 -0
  41. data/vendor/ui/js/test/components/repository-watching-test.js +74 -0
  42. data/vendor/ui/js/test/components/timeago-test.js +74 -0
  43. data/vendor/ui/js/test/test-helper.js +2 -0
  44. metadata +25 -3
  45. data/vendor/ui/build +0 -51
@@ -0,0 +1,139 @@
1
+ /*global buster, assert, dome, gts*/
2
+ buster.testCase("Comments", {
3
+ "renderForm": {
4
+ "renders comment div": function () {
5
+ var div = gts.comments.renderComment({
6
+ body: "<h2>Hey</h2>",
7
+ createdAt: "2013-01-01T23:10:15+02:00",
8
+ updatedAt: "2013-01-01T23:10:15+02:00",
9
+ author: {
10
+ avatarPath: "/some/avatar.png",
11
+ profilePath: "/~cjohansen",
12
+ name: "Christian Johansen",
13
+ login: "cjohansen"
14
+ }
15
+ });
16
+
17
+ assert.tagName(div, "div");
18
+ assert.className(div, "gts-comment");
19
+ assert.equals(div.firstChild.firstChild.innerHTML, "Hey");
20
+ assert.match(div.innerHTML, "/some/avatar.png");
21
+ assert.match(div.innerHTML, "href=\"/~cjohansen\">Christian Johansen");
22
+ assert.match(div.innerHTML, "2013");
23
+ refute.match(div.innerHTML, "Edit comment");
24
+ refute.match(div.innerHTML, "edited");
25
+ },
26
+
27
+ "renders editable comment": function () {
28
+ var div = gts.comments.renderComment({
29
+ body: "<h2>Hey</h2>",
30
+ createdAt: "2013-01-01T23:10:15+02:00",
31
+ updatedAt: "2013-01-01T23:10:15+02:00",
32
+ editPath: "/comments/123456789/edit",
33
+ author: {
34
+ avatarPath: "/some/avatar.png",
35
+ profilePath: "/~cjohansen",
36
+ name: "Christian Johansen",
37
+ login: "cjohansen"
38
+ }
39
+ });
40
+
41
+ assert.match(div.innerHTML, "/comments/123456789/edit");
42
+ assert.match(div.innerHTML, "Edit comment");
43
+ },
44
+
45
+ "renders edited comment": function () {
46
+ var div = gts.comments.renderComment({
47
+ body: "<h2>Hey</h2>",
48
+ createdAt: "2013-01-01T23:10:15+02:00",
49
+ updatedAt: "2013-01-01T23:25:15+02:00",
50
+ editPath: "/comments/123456789/edit",
51
+ author: {
52
+ avatarPath: "/some/avatar.png",
53
+ profilePath: "/~cjohansen",
54
+ name: "Christian Johansen",
55
+ login: "cjohansen"
56
+ }
57
+ });
58
+
59
+ assert.match(div.innerHTML, "edited");
60
+ }
61
+ },
62
+
63
+ "personalizeForm": {
64
+ setUp: function () {
65
+ this.form = dome.el("form", {
66
+ style: { display: "none" }
67
+ }, dome.el("div", { className: "gts-comment-author-ph" }));
68
+ },
69
+
70
+ "displays form": function () {
71
+ gts.comments.personalizeForm({}, this.form);
72
+
73
+ assert.equals(this.form.style.display, "block");
74
+ },
75
+
76
+ "renders user in placeholder": function () {
77
+ this.useFakeTimers(new Date(2013, 0, 1, 12, 0, 0).getTime());
78
+
79
+ gts.comments.personalizeForm({
80
+ login: "cjohansen",
81
+ name: "Christian Johansen",
82
+ avatarPath: "/some/avatar.png",
83
+ profilePath: "/~cjohansen"
84
+ }, this.form);
85
+
86
+ assert.tagName(this.form.firstChild, "p");
87
+ var markup = this.form.firstChild.innerHTML;
88
+ assert.match(markup, "<img");
89
+ assert.match(markup, "/some/avatar.png");
90
+ assert.match(markup, "/~cjohansen");
91
+ assert.match(markup, "Christian Johansen");
92
+ assert.match(markup, "12:00");
93
+ }
94
+ },
95
+
96
+ "renderComments": {
97
+ "displays container": function () {
98
+ var container = dome.el("div", { style: { display: "none" } });
99
+ gts.comments.renderComments([{ author: {} }], container);
100
+
101
+ assert.equals(container.style.display, "block");
102
+ },
103
+
104
+ "does not display container when no comments": function () {
105
+ var container = dome.el("div", { style: { display: "none" } });
106
+ gts.comments.renderComments([], container);
107
+
108
+ assert.equals(container.style.display, "none");
109
+ },
110
+
111
+ "renders all comments": function () {
112
+ var container = dome.el("div", { style: { display: "none" } });
113
+ gts.comments.renderComments([{
114
+ body: "One",
115
+ createdAt: "2013-01-01T23:10:15+02:00",
116
+ updatedAt: "2013-01-01T23:10:15+02:00",
117
+ author: {
118
+ avatarPath: "/some/avatar.png",
119
+ profilePath: "/~cjohansen",
120
+ name: "Christian Johansen",
121
+ login: "cjohansen"
122
+ }
123
+ }, {
124
+ body: "Two",
125
+ createdAt: "2013-01-01T23:10:15+02:00",
126
+ updatedAt: "2013-01-01T23:10:15+02:00",
127
+ author: {
128
+ avatarPath: "/some/avatar.png",
129
+ profilePath: "/~cjohansen",
130
+ name: "Christian Johansen",
131
+ login: "cjohansen"
132
+ }
133
+ }], container);
134
+
135
+ assert.match(container.innerHTML, "One");
136
+ assert.match(container.innerHTML, "Two");
137
+ }
138
+ }
139
+ });
@@ -0,0 +1,35 @@
1
+ /*global buster, assert, refute, gts*/
2
+
3
+ buster.testCase("Repository admin", {
4
+ setUp: function () {
5
+ this.data = {
6
+ editPath: "/edit",
7
+ destroyPath: "/destroy",
8
+ ownershipPath: "/ownership",
9
+ committershipsPath: "/committerships"
10
+ };
11
+ },
12
+
13
+ "includes link to admin pull-down": function () {
14
+ var menu = gts.repository.admin.build(this.data);
15
+
16
+ assert.className(menu, "dropdown");
17
+ assert.match(menu.innerHTML, "dropdown-toggle");
18
+ assert.match(menu.innerHTML, "<i class=\"icon-cog\"></i> Admin");
19
+ },
20
+
21
+ "includes dropdown menu": function () {
22
+ var menu = gts.repository.admin.build(this.data);
23
+
24
+ assert.match(menu.innerHTML, "<ul class=\"dropdown-menu");
25
+ },
26
+
27
+ "includes links": function () {
28
+ var menu = gts.repository.admin.build(this.data);
29
+
30
+ assert.match(menu.innerHTML, "/edit");
31
+ assert.match(menu.innerHTML, "/destroy");
32
+ assert.match(menu.innerHTML, "/ownership");
33
+ assert.match(menu.innerHTML, "/committerships");
34
+ }
35
+ });
@@ -0,0 +1,74 @@
1
+ /*global buster, dome, gts*/
2
+
3
+ buster.testCase("Repository watching", {
4
+ setUp: function () {
5
+ this.el = dome.el("div", dome.el("div"));
6
+ },
7
+
8
+ "replaces placeholder": function () {
9
+ gts.repository.watching(this.el.firstChild, {
10
+ watching: false,
11
+ watchPath: "/watchit"
12
+ });
13
+
14
+ assert.equals(this.el.childNodes.length, 1);
15
+ assert.match(this.el.firstChild.innerHTML, "Watch");
16
+ assert.match(this.el.firstChild.href, "/watchit");
17
+ },
18
+
19
+ "renders unwatch link": function () {
20
+ gts.repository.watching(this.el.firstChild, {
21
+ watching: true,
22
+ unwatchPath: "/dropit"
23
+ });
24
+
25
+ assert.match(this.el.firstChild.innerHTML, "Unwatch");
26
+ assert.match(this.el.firstChild.href, "/dropit");
27
+ },
28
+
29
+ "toggleState": {
30
+ setUp: function () {
31
+ this.server = this.useFakeServer();
32
+ this.link = this.el.firstChild;
33
+ this.repository = {
34
+ watching: false,
35
+ watchPath: "/watchit"
36
+ };
37
+ gts.repository.watching(this.link, this.repository);
38
+ },
39
+
40
+ "displays spinner while loading": function () {
41
+ gts.repository.watching.toggleState(this.link, this.repository);
42
+
43
+ assert.match(this.link.innerHTML, "Loading");
44
+ },
45
+
46
+ "replaces spinner when server responds": function () {
47
+ gts.repository.watching.toggleState(this.link, this.repository);
48
+ this.server.requests[0].respond(200, { location: "/dropit" }, "");
49
+
50
+ refute.match(this.link.innerHTML, "Loading");
51
+ assert.match(this.link.innerHTML, "Unwatch");
52
+ assert.equals(this.link.href, "/dropit");
53
+ },
54
+
55
+ "watches, then unwatches": function () {
56
+ gts.repository.watching.toggleState(this.link, this.repository);
57
+ this.server.requests[0].respond(200, { location: "/dropit" }, "");
58
+
59
+ gts.repository.watching.toggleState(this.link, this.repository);
60
+ this.server.requests[1].respond(200, {}, "");
61
+
62
+ refute.match(this.link.innerHTML, "Loading");
63
+ assert.match(this.link.innerHTML, "Watch");
64
+ assert.equals(this.link.href, "/watchit");
65
+ },
66
+
67
+ "tells user to try again when request fails": function () {
68
+ gts.repository.watching.toggleState(this.link, this.repository);
69
+ this.server.requests[0].respond(500, {}, "");
70
+
71
+ assert.match(this.link.innerHTML, "Failed");
72
+ }
73
+ }
74
+ });
@@ -0,0 +1,74 @@
1
+ /*global buster, assert, dome, gts*/
2
+
3
+ buster.testCase("Timeago", {
4
+ "converts abbr content to casual date representation": function () {
5
+ var el = dome.el("abbr", { title: "2008-02-27T00:23:00Z" });
6
+ gts.timeago(el);
7
+ assert.match(el.innerHTML, "ago");
8
+ },
9
+
10
+ "uses pre-existing content as title": function () {
11
+ var el = dome.el("abbr", { title: "2008-02-27T00:23:00Z" }, "Today");
12
+ gts.timeago(el);
13
+ assert.match(el.title, "Today");
14
+ },
15
+
16
+ "does not use empty content as title": function () {
17
+ var el = dome.el("abbr", { title: "2008-02-27T00:23:00Z" });
18
+ gts.timeago(el);
19
+ assert.match(el.title, "2008-02-27T00:23:00Z");
20
+ },
21
+
22
+ "leaves element untouched if no title": function () {
23
+ var el = dome.el("abbr", "Hmm");
24
+ gts.timeago(el);
25
+ assert.equals(el.title, "");
26
+ assert.equals(el.innerHTML, "Hmm");
27
+ },
28
+
29
+ "leaves element untouched if title contains invalid date": function () {
30
+ var el = dome.el("abbr", { title: "Oops" }, "Hmm");
31
+ gts.timeago(el);
32
+ assert.equals(el.title, "Oops");
33
+ assert.equals(el.innerHTML, "Hmm");
34
+ },
35
+
36
+ "returns element": function () {
37
+ var el = dome.el("abbr", { title: "2008-02-27T00:23:00Z" });
38
+ assert.same(gts.timeago(el), el);
39
+
40
+ var invalidEl = dome.el("abbr", { title: "Oops" }, "Hmm");
41
+ assert.same(gts.timeago(invalidEl), invalidEl);
42
+ },
43
+
44
+ "periodic": {
45
+ "updates representation immediately": function () {
46
+ var el = dome.el("abbr", { title: "1970-01-01T00:00:00Z" });
47
+ var timeago = gts.timeago.periodic(60000);
48
+ timeago(el);
49
+
50
+ assert.match(el.innerHTML, "ago");
51
+ },
52
+
53
+ "// updates representations periodically": function () {
54
+ var clock = this.useFakeTimers();
55
+ var now = new Date();
56
+ var els = [
57
+ dome.el("abbr", { title: "1970-01-01T00:00:00Z" }),
58
+ dome.el("abbr", { title: "1970-01-01T00:03:00Z" })
59
+ ];
60
+
61
+ var timeago = gts.timeago.periodic(60000);
62
+ timeago(els[0]);
63
+ timeago(els[1]);
64
+ var contents = [els[0].innerHTML, els[1].innerHTML];
65
+ clock.tick(59999);
66
+ assert.equals(els[0].innerHTML, contents[0]);
67
+ assert.equals(els[1].innerHTML, contents[1]);
68
+
69
+ clock.tick(1);
70
+ refute.equals(els[0].innerHTML, contents[0]);
71
+ refute.equals(els[1].innerHTML, contents[1]);
72
+ }
73
+ }
74
+ });
@@ -0,0 +1,2 @@
1
+ /*global reqwest*/
2
+ this.gts.request = reqwest;
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dolt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.0
4
+ version: 0.24.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-04 00:00:00.000000000 Z
12
+ date: 2013-07-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: libdolt
@@ -163,6 +163,7 @@ executables:
163
163
  extensions: []
164
164
  extra_rdoc_files: []
165
165
  files:
166
+ - ./.gitignore
166
167
  - ./.gitmodules
167
168
  - ./.travis.yml
168
169
  - ./Gemfile
@@ -181,11 +182,12 @@ files:
181
182
  - ./test/test_helper.rb
182
183
  - vendor/ui/.gitignore
183
184
  - vendor/ui/.gitmodules
185
+ - vendor/ui/Makefile
184
186
  - vendor/ui/autolint.js
185
- - vendor/ui/build
186
187
  - vendor/ui/buster.js
187
188
  - vendor/ui/css/gitorious.css
188
189
  - vendor/ui/css/syntax-highlight.css
190
+ - vendor/ui/dist/gitorious3-capillary.min.js
189
191
  - vendor/ui/dist/gitorious3.min.css
190
192
  - vendor/ui/dist/gitorious3.min.js
191
193
  - vendor/ui/iconic/lock_stroke.svg
@@ -195,30 +197,50 @@ files:
195
197
  - vendor/ui/images/powered-by.png
196
198
  - vendor/ui/images/white-980x1.png
197
199
  - vendor/ui/js/src/app.js
200
+ - vendor/ui/js/src/cache.js
201
+ - vendor/ui/js/src/capillary.js
198
202
  - vendor/ui/js/src/components/abbrev.js
199
203
  - vendor/ui/js/src/components/blob.js
204
+ - vendor/ui/js/src/components/capillary.js
205
+ - vendor/ui/js/src/components/clone-name-suggestion.js
200
206
  - vendor/ui/js/src/components/clone-url-selection.js
207
+ - vendor/ui/js/src/components/collapse.js
208
+ - vendor/ui/js/src/components/comments.js
201
209
  - vendor/ui/js/src/components/commit-linker.js
202
210
  - vendor/ui/js/src/components/dropdown.js
203
211
  - vendor/ui/js/src/components/ganalytics.js
204
212
  - vendor/ui/js/src/components/live-markdown-preview.js
213
+ - vendor/ui/js/src/components/loading.js
214
+ - vendor/ui/js/src/components/oid-ref-interpolator.js
205
215
  - vendor/ui/js/src/components/profile-menu.js
216
+ - vendor/ui/js/src/components/rails-links.js
206
217
  - vendor/ui/js/src/components/ref-selector.js
218
+ - vendor/ui/js/src/components/repository.js
219
+ - vendor/ui/js/src/components/timeago.js
207
220
  - vendor/ui/js/src/components/tree-history.js
208
221
  - vendor/ui/js/src/components/url.js
209
222
  - vendor/ui/js/src/components/user-repo-view-state.js
210
223
  - vendor/ui/js/src/gitorious.js
224
+ - vendor/ui/js/src/json-request.js
211
225
  - vendor/ui/js/src/logger.js
226
+ - vendor/ui/js/src/spacer.js
212
227
  - vendor/ui/js/test-libs/jquery-1.9.1.min.js
228
+ - vendor/ui/js/test/cache-test.js
213
229
  - vendor/ui/js/test/components/abbrev-test.js
214
230
  - vendor/ui/js/test/components/blob-test.js
231
+ - vendor/ui/js/test/components/clone-name-suggestion-test.js
215
232
  - vendor/ui/js/test/components/clone-url-selection-test.js
233
+ - vendor/ui/js/test/components/comments-test.js
216
234
  - vendor/ui/js/test/components/commit-linker-test.js
217
235
  - vendor/ui/js/test/components/live-markdown-preview-test.js
218
236
  - vendor/ui/js/test/components/profile-menu-test.js
219
237
  - vendor/ui/js/test/components/ref-selector-test.js
238
+ - vendor/ui/js/test/components/repository-admin-test.js
239
+ - vendor/ui/js/test/components/repository-watching-test.js
240
+ - vendor/ui/js/test/components/timeago-test.js
220
241
  - vendor/ui/js/test/components/tree-history-test.js
221
242
  - vendor/ui/js/test/components/url-template-test.js
243
+ - vendor/ui/js/test/test-helper.js
222
244
  - vendor/ui/lib/bootstrap/css/bootstrap-responsive.min.css
223
245
  - vendor/ui/lib/bootstrap/css/bootstrap.min.css
224
246
  - vendor/ui/lib/bootstrap/img/glyphicons-halflings-white.png
data/vendor/ui/build DELETED
@@ -1,51 +0,0 @@
1
- #!/usr/bin/sh
2
- mkdir -p dist
3
-
4
- # Minified and stripped CullJS production build
5
- cd js/lib/culljs
6
- npm install
7
- node build -s -n
8
- cd ../../..
9
-
10
- # Minified and stripped Dome production build
11
- cd js/lib/dome
12
- npm install
13
- node build -s -n
14
- cd ../../..
15
-
16
- # Combine 'em all
17
- cat \
18
- js/lib/culljs/dist/cull.js \
19
- js/lib/dome/dist/dome.js \
20
- js/lib/spin.js/spin.js \
21
- js/lib/when/when.js \
22
- js/lib/bane/lib/bane.js \
23
- js/lib/reqwest/reqwest.js \
24
- js/lib/uinit/lib/uinit.js \
25
- js/lib/showdown/src/showdown.js | ./node_modules/.bin/uglifyjs > dist/gitorious3-dependencies.min.js
26
-
27
- du -sh dist/gitorious3-dependencies.min.js
28
-
29
- cat \
30
- js/src/app.js \
31
- js/src/components/dropdown.js \
32
- js/src/components/ganalytics.js \
33
- js/src/components/abbrev.js \
34
- js/src/components/url.js \
35
- js/src/components/ref-selector.js \
36
- js/src/components/tree-history.js \
37
- js/src/components/commit-linker.js \
38
- js/src/components/user-repo-view-state.js \
39
- js/src/components/profile-menu.js \
40
- js/src/components/clone-url-selection.js \
41
- js/src/components/blob.js \
42
- js/src/components/live-markdown-preview.js \
43
- js/src/gitorious.js | ./node_modules/.bin/uglifyjs > dist/gitorious3-modules.min.js
44
-
45
- du -sh dist/gitorious3-modules.min.js
46
-
47
- cat \
48
- dist/gitorious3-dependencies.min.js \
49
- dist/gitorious3-modules.min.js > dist/gitorious3.min.js
50
-
51
- du -sh dist/gitorious3.min.js