dolt 0.23.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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