gocart 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/LICENSE +0 -0
  2. data/README.md +0 -0
  3. data/assets/Gemfile +24 -0
  4. data/assets/Guardfile +37 -0
  5. data/assets/Rakefile +5 -0
  6. data/assets/config.rb +24 -0
  7. data/assets/spec/javascripts/support/jasmine.yml +86 -0
  8. data/assets/spec/javascripts/support/jasmine_config.rb +23 -0
  9. data/assets/spec/javascripts/support/jasmine_runner.rb +32 -0
  10. data/assets/src/server/http_handler.go +136 -0
  11. data/assets/src/server/main.go +31 -0
  12. data/assets/src/server/templates.go +42 -0
  13. data/assets/src/www/app/coffee/adapters/dummy_data.js.coffee +6 -0
  14. data/assets/src/www/app/coffee/adapters/reddit.js.coffee +294 -0
  15. data/assets/src/www/app/coffee/application.js.coffee +23 -0
  16. data/assets/src/www/app/coffee/controllers/app.js.coffee +69 -0
  17. data/assets/src/www/app/coffee/controllers/nav.js.coffee +55 -0
  18. data/assets/src/www/app/coffee/controllers/subreddit_posts.js.coffee +57 -0
  19. data/assets/src/www/app/coffee/helpers/event_manager.js.coffee +3 -0
  20. data/assets/src/www/app/coffee/helpers/properties.js.coffee +19 -0
  21. data/assets/src/www/app/coffee/helpers/storage.js.coffee +14 -0
  22. data/assets/src/www/app/coffee/libs/3rdparty.js.coffee +7 -0
  23. data/assets/src/www/app/coffee/libs/deferred.js.coffee +92 -0
  24. data/assets/src/www/app/coffee/libs/logger.js.coffee +40 -0
  25. data/assets/src/www/app/coffee/libs/mod_loader.js.coffee +44 -0
  26. data/assets/src/www/app/coffee/main.js.coffee +42 -0
  27. data/assets/src/www/app/coffee/models/comment.js.coffee +26 -0
  28. data/assets/src/www/app/coffee/models/post.js.coffee +27 -0
  29. data/assets/src/www/app/coffee/models/sub_reddit.js.coffee +18 -0
  30. data/assets/src/www/app/coffee/widgets/post_detail.js.coffee +2 -0
  31. data/assets/src/www/app/coffee/widgets/posts.js.coffee +45 -0
  32. data/assets/src/www/app/coffee/widgets/subreddit_detail.js.coffee +2 -0
  33. data/assets/src/www/app/coffee/widgets/subreddits.js.coffee +44 -0
  34. data/assets/src/www/app/images/test.png +0 -0
  35. data/assets/src/www/app/partials/index.html +92 -0
  36. data/assets/src/www/app/sass/application.css.scss +136 -0
  37. data/assets/src/www/app/templates/application.gotmpl +2 -0
  38. data/assets/src/www/app/templates/base.gotmpl.erb +27 -0
  39. data/assets/src/www/app/templates/home.gotmpl +9 -0
  40. data/assets/src/www/spec/coffee/deferred-spec.coffee +202 -0
  41. data/assets/src/www/spec/coffee/mocks.coffee +137 -0
  42. data/assets/src/www/spec/coffee/mod_loader-spec.coffee +45 -0
  43. data/assets/src/www/spec/coffee/properties-spec.coffee +21 -0
  44. data/assets/src/www/spec/coffee/reddit_adapter-spec.coffee +143 -0
  45. data/assets/src/www/vendor/css/jq.ui.css +630 -0
  46. data/assets/src/www/vendor/images/ajax-loader.png +0 -0
  47. data/assets/src/www/vendor/images/icons-18-black.png +0 -0
  48. data/assets/src/www/vendor/images/icons-18-white.png +0 -0
  49. data/assets/src/www/vendor/images/icons-36-black.png +0 -0
  50. data/assets/src/www/vendor/images/icons-36-white.png +0 -0
  51. data/assets/src/www/vendor/js/ICanHaz.min.js +10 -0
  52. data/assets/src/www/vendor/js/jq.mobi.min.js +20 -0
  53. data/assets/src/www/vendor/js/jq.ui.min.js +90 -0
  54. data/assets/src/www/vendor/js/jq.web.min.js +58 -0
  55. data/assets/src/www/vendor/js/phonegap-1.1.0.js +4577 -0
  56. data/assets/src/www/vendor/js/touch.js +103 -0
  57. data/assets/tasks/app.rake +34 -0
  58. data/assets/tasks/jasmine.rake +8 -0
  59. data/assets/tasks/server.rake +58 -0
  60. data/assets/tasks/www.rake +163 -0
  61. data/bin/gocart +25 -0
  62. data/lib/gocart.rb +5 -6
  63. data/lib/gocart/base.rb +28 -0
  64. data/lib/gocart/environment.rb +18 -0
  65. data/lib/gocart/version.rb +1 -1
  66. metadata +113 -41
  67. data/.gitignore +0 -4
  68. data/Gemfile +0 -4
  69. data/Rakefile +0 -1
  70. data/gocarg.go +0 -29
  71. data/gocart.gemspec +0 -38
@@ -0,0 +1,2 @@
1
+ modLoader.define 'app/widgets/subreddit_detail', (require, exports) ->
2
+ return
@@ -0,0 +1,44 @@
1
+ modLoader.define 'widgets/subreddits', (require, exports) ->
2
+ ich = require('libs/3rdparty').ich
3
+
4
+ class SubReddits
5
+ constructor:(options)->
6
+ @_subReddits = options.subReddits
7
+ @_controller = options.controller
8
+ return
9
+
10
+ appendTo: (toElem)->
11
+ toElem.append @_render()
12
+ @_addHandlers()
13
+ return
14
+
15
+ remove: ->
16
+ @_removeHandlers
17
+ return
18
+
19
+ _render: ->
20
+ items = for sub in @_subReddits.data
21
+ {
22
+ name: sub.url().replace(/\/r\/|\//g,'')
23
+ id: sub.id()
24
+ }
25
+
26
+ data =
27
+ subs: items
28
+
29
+ return ich.subReddits(data)
30
+
31
+ _addHandlers: ->
32
+ $('.subreddits a').bind 'click', (event)=>
33
+ @_controller.showSubRedditPosts(event.target.id)
34
+ return
35
+
36
+ return
37
+
38
+ _removeHandlers: ->
39
+ return
40
+
41
+ exports.create = (subReddits)->
42
+ return new SubReddits(subReddits);
43
+
44
+ return
File without changes
@@ -0,0 +1,92 @@
1
+ <!DOCTYPE HTML>
2
+ <html>
3
+ <head>
4
+ <meta name="viewport" content="width=device-width, height=device-height, user-scalable=no, initial-scale=1" />
5
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
6
+ <title>Narwhal Champion: A Reddit Story</title>
7
+ <!-- app CSS -->
8
+ <!--<link rel="stylesheet" href="stylesheets/vendor/jq.ui.css" type="text/css" />-->
9
+ <link rel="stylesheet" href="stylesheets/application.css" type="text/css" />
10
+
11
+ <!-- third party libs -->
12
+ <script type="text/javascript" src="javascripts/vendor/touch.js"></script>
13
+ <script type="text/javascript" src="javascripts/vendor/jq.mobi.min.js"></script>
14
+ <script type="text/javascript" src="javascripts/vendor/jq.web.min.js"></script>
15
+ <script type="text/javascript" src="javascripts/vendor/jq.ui.min.js"></script>
16
+
17
+ <script type="text/javascript" src="javascripts/vendor/phonegap-1.1.0.js"></script>
18
+ <script type="text/javascript" src="javascripts/vendor/ICanHaz.min.js"></script>
19
+
20
+ <!-- application files -->
21
+ <script type="text/javascript" src="javascripts/libs/mod_loader.js"></script>
22
+ <script type="text/javascript" src="javascripts/libs/deferred.js"></script>
23
+ <script type="text/javascript" src="javascripts/libs/3rdparty.js"></script>
24
+ <script type="text/javascript" src="javascripts/libs/logger.js"></script>
25
+ <script type="text/javascript" src="javascripts/helpers/properties.js"></script>
26
+ <script type="text/javascript" src="javascripts/models/comment.js"></script>
27
+ <script type="text/javascript" src="javascripts/models/post.js"></script>
28
+ <script type="text/javascript" src="javascripts/models/sub_reddit.js"></script>
29
+ <script type="text/javascript" src="javascripts/adapters/dummy_data.js"></script>
30
+ <script type="text/javascript" src="javascripts/adapters/reddit.js"></script>
31
+ <script type="text/javascript" src="javascripts/widgets/posts.js"></script>
32
+ <script type="text/javascript" src="javascripts/widgets/post_detail.js"></script>
33
+ <script type="text/javascript" src="javascripts/widgets/subreddits.js"></script>
34
+ <script type="text/javascript" src="javascripts/controllers/nav.js"></script>
35
+ <script type="text/javascript" src="javascripts/controllers/subreddit_posts.js"></script>
36
+ <script type="text/javascript" src="javascripts/controllers/app.js"></script>
37
+ <script type="text/javascript" src="javascripts/main.js"></script>
38
+
39
+ <!-- Templates -->
40
+ <script id="subReddits" type="text/html">
41
+ {{#subs}}
42
+ <li><a href="#subreddit-posts-{{id}}" id="{{id}}">{{name}}</a></li>
43
+ {{/subs}}
44
+ </script>
45
+
46
+ <script id="posts" type="text/html">
47
+ {{#posts}}
48
+ <li class="post-short {{nsfw}}">
49
+ <h3><a href="javascript:;" onclick="$.ui.loadContent('test-show-post',false,false,'slide')">{{title}}</a></h3>
50
+ <p class="post">
51
+ <span class="score">{{score}}</span> - <span class="num-comments">{{numComments}}</span> comments, to <span class="subreddit">{{subreddit}}</span>
52
+ </p>
53
+ </li>
54
+ {{/posts}}
55
+ </div>
56
+ </script>
57
+
58
+ <script id="error_inline" type="text/html">
59
+ <p class="error-message">{{error}}</p>
60
+ </script>
61
+
62
+ </head>
63
+ <body>
64
+ <div id="header">
65
+ <div class="title"><h2>Loading...</h2></div>
66
+ <div class="search-bar">
67
+ <form name="search" action="#search" method="get"><input type='text' name="search-text" value="Search"/></form>
68
+ </div>
69
+ <div class="search-button"><p>S</p></div>
70
+ </div>
71
+
72
+ <div id="navbar">
73
+ <div id="subreddit-wrapper">
74
+ <ul class="subreddits"></ul>
75
+ </div>
76
+ </div>
77
+
78
+ <div id="content">
79
+ <div id="subreddit-posts" class="panel" selected="true">
80
+ <div id="posts-wrapper">
81
+ <ul class="posts"></ul>
82
+ </div>
83
+ </div>
84
+ <div id="test-subreddit-posts" class="panel">
85
+ <p>Test showing moving to a different subreddit page</p>
86
+ </div>
87
+ <div id="test-show-post" class="panel">
88
+ <p>Test showing moving to view a post's content</p>
89
+ </div>
90
+ </div>
91
+ </body>
92
+ </html>
@@ -0,0 +1,136 @@
1
+ html, body {
2
+ width: 100%;
3
+ height: 100%;
4
+ }
5
+
6
+ html, body, div, h1, h2, h3, p, ul, li {
7
+ margin: 0;
8
+ padding: 0;
9
+ }
10
+
11
+ ul {
12
+ list-style-type: none;
13
+ }
14
+
15
+ h3 {font-size: 100%;}
16
+
17
+ $lightBlue: #3bbfce;
18
+ $warning: #f00;
19
+
20
+ * {
21
+ -webkit-user-select:none;
22
+ -webkit-box-sizing:border-box;
23
+ box-sizing:border-box;
24
+ }
25
+
26
+ body {
27
+ width: 100%;
28
+ height: 100%;
29
+ display: -webkit-box;
30
+ -webkit-box-orient: vertical;
31
+ }
32
+
33
+ .panel {
34
+ width: 100%;
35
+ }
36
+
37
+
38
+ /*********************
39
+ header bar
40
+ *********************/
41
+ #header {
42
+ display: -webkit-box;
43
+ height: 30px;
44
+ width: 100%;
45
+
46
+ color: $lightBlue;
47
+ background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(16,25,33,1)), to(rgba(14,23,32,1)), color-stop(.5, rgba(27,36,46,1)), color-stop(.5, rgba(14,23,32,1)));
48
+ -webkit-box-shadow:0px 0px 24px rgba(0,0,0,0.8); box-shadow:0px 0px 24px rgba(0,0,0,0.8);
49
+
50
+ -webkit-box-orient: horizontal;
51
+ -webkit-box-align: center;
52
+ -webkit-box-pack: justify;
53
+ }
54
+ #header .title {
55
+ -webkit-box-flex: 1;
56
+ text-align: center;
57
+ }
58
+ #header .search-bar {
59
+ display: none;
60
+ }
61
+ #header .serach-bar.shown {
62
+ display: -webkit-box;
63
+ -webkit-box-flex: 1;
64
+ width: 100%;
65
+ }
66
+ #header .search-button {
67
+ padding: 5px;
68
+ }
69
+
70
+
71
+ /*********************
72
+ Nav Bar
73
+ *********************/
74
+ #navbar {
75
+ width: 100%;
76
+ display:-webkit-box;
77
+ -webkit-box-orient: horizontal;
78
+ -webkit-box-align: center;
79
+ overflow: hidden;
80
+
81
+ z-index:1000;
82
+ position:relative;
83
+ }
84
+ #subreddit-wrapper {
85
+ height: 40px;
86
+ display: -webkit-box;
87
+ }
88
+ #subreddit-wrapper ul.subreddits {
89
+ display: -webkit-box;
90
+ -webkit-box-orient: horizontal;
91
+ -webkit-box-align: center;
92
+ padding-left: 0;
93
+ white-space: nowrap;
94
+ }
95
+ #subreddit-wrapper .subreddits li {
96
+ display:inline;
97
+ a {
98
+ margin-right: 5px;
99
+ padding: 0 5px;
100
+
101
+ }
102
+ }
103
+
104
+
105
+ /***************************
106
+ App Content for main page
107
+ ***************************/
108
+ #content{
109
+ z-index:180;
110
+ display:block;
111
+ position:relative;
112
+ } /* Accounts for positioning of the content area, which is everything below the header and above the navbar. */
113
+
114
+ .panel {
115
+ z-index:180;
116
+ width:100%;
117
+ height:100%;
118
+ display:none;
119
+ position:absolute; top:0px; left:-100%;
120
+ overflow:hidden;
121
+ }
122
+
123
+ #subreddit-posts {
124
+ display: -webkit-box;
125
+ }
126
+
127
+
128
+ /***************************
129
+ Formatting for Short posts
130
+ ***************************/
131
+ .posts .post-short {
132
+ display: bock;
133
+ }
134
+ .posts .post-short.nsfw {
135
+ background-color: $warning;
136
+ }
@@ -0,0 +1,2 @@
1
+ //= require base
2
+ //= require home
@@ -0,0 +1,27 @@
1
+ {{define "base.header"}}
2
+ <!DOCTYPE html>
3
+ <html>
4
+ <head>
5
+ <title>{{.Title}}</title>
6
+ {{if .Debug}}{{template "base.header.assets.debug" .}}{{else}}{{template "base.header.assets" .}}{{end}}
7
+ </head>
8
+ <body>
9
+ {{end}}
10
+
11
+ {{define "base.header.assets"}}
12
+ <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
13
+ <script type="text/javascript" src="{{.RootURL}}/assets/js/application.js"></script>
14
+ <link rel="stylesheet" type="text/css" href="{{.RootURL}}/assets/css/application.css">
15
+ {{end}}
16
+
17
+ {{define "base.header.assets.debug"}}
18
+ <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
19
+ <script type="text/javascript" src="{{.RootURL}}/assets/js/main.js"></script>
20
+ <link rel="stylesheet" type="text/css" href="{{.RootURL}}/assets/css/application.css">
21
+ {{end}}
22
+
23
+
24
+ {{define "base.footer"}}
25
+ </body>
26
+ </html>
27
+ {{end}}
@@ -0,0 +1,9 @@
1
+ {{define "home.contents"}}
2
+ <h1>Registration is not open yet</h1>
3
+ {{end}}
4
+
5
+ {{define "home"}}
6
+ {{template "base.header" .Common}}
7
+ {{template "home.contents" .Contents}}
8
+ {{template "base.footer"}}
9
+ {{end}}
@@ -0,0 +1,202 @@
1
+ describe 'Deferred Test', ->
2
+ Deferred = modLoader.require 'libs/deferred'
3
+
4
+ it 'should be able to create a deferred object, and get a promise from it', ->
5
+ df = Deferred.create()
6
+ expect(df).toBeDefined()
7
+
8
+ promise = df.promise()
9
+ expect(promise).toBeDefined()
10
+
11
+ it 'should be able to create a deferred which will resolve a promise, synchournously', ->
12
+ df = Deferred.create()
13
+ promise = df.promise()
14
+
15
+ wasFulfilled = false
16
+ promise.done ->
17
+ wasFulfilled = true
18
+
19
+ df.resolve()
20
+
21
+ waitsFor ->
22
+ return wasFulfilled
23
+ , 'promise to be fulfilled', 100
24
+
25
+ runs ->
26
+ expect(wasFulfilled).toBe(true)
27
+
28
+ it 'should be able to create a deferred which will reject a promise, synchournously', ->
29
+ df = Deferred.create()
30
+ promise = df.promise()
31
+
32
+ wasRejected = false
33
+ promise.fail ->
34
+ wasRejected = true
35
+
36
+ df.reject()
37
+
38
+ waitsFor ->
39
+ return wasRejected
40
+ , 'promise to be rejected', 100
41
+
42
+ runs ->
43
+ expect(wasRejected).toBe(true)
44
+
45
+ it 'should be able to resolve a promise before the promise is created, synchournously', ->
46
+ df = Deferred.create()
47
+ promise = df.promise()
48
+
49
+ df.resolve()
50
+
51
+ wasFulfilled = false
52
+ promise.done ->
53
+ wasFulfilled = true
54
+
55
+ waitsFor ->
56
+ return wasFulfilled
57
+ , 'promise to be fulfilled', 100
58
+
59
+ runs ->
60
+ expect(wasFulfilled).toBe(true)
61
+
62
+ it 'should be able to reject a promise before the promise is created, synchournously', ->
63
+ df = Deferred.create()
64
+ promise = df.promise()
65
+
66
+ df.reject()
67
+
68
+ wasRejected = false
69
+ promise.fail ->
70
+ wasRejected = true
71
+
72
+ waitsFor ->
73
+ return wasRejected
74
+ , 'promise to be rejected', 100
75
+
76
+ runs ->
77
+ expect(wasRejected).toBe(true)
78
+
79
+ it 'should be able to resolve a promise with data', ->
80
+ df = Deferred.create()
81
+ promise = df.promise()
82
+
83
+ df.resolve({myObj: true})
84
+
85
+ wasFulfilled = false
86
+ promise.done (obj)->
87
+ expect(obj.myObj).toBe(true)
88
+ wasFulfilled = true
89
+
90
+
91
+ waitsFor ->
92
+ return wasFulfilled
93
+ , 'promise to be fulfilled', 100
94
+
95
+ runs ->
96
+ expect(wasFulfilled).toBe(true)
97
+
98
+ it 'should be able to reject a promise with data', ->
99
+ df = Deferred.create()
100
+ promise = df.promise()
101
+
102
+ df.reject({myObj: true})
103
+
104
+ wasRejected = false
105
+ promise.fail (obj)->
106
+ expect(obj.myObj).toBe(true)
107
+ wasRejected = true
108
+
109
+
110
+ waitsFor ->
111
+ return wasRejected
112
+ , 'promise to be reject', 100
113
+
114
+ runs ->
115
+ expect(wasRejected).toBe(true)
116
+
117
+ it 'should be able to resolve a promise with multile datas', ->
118
+ df = Deferred.create()
119
+ promise = df.promise()
120
+
121
+ df.resolve({myObj: true}, {myObj2: true}, {myObj3: true})
122
+
123
+ wasFulfilled = false
124
+ promise.done (obj, obj2, obj3)->
125
+ expect(obj.myObj).toBe(true)
126
+ expect(obj2.myObj2).toBe(true)
127
+ expect(obj3.myObj3).toBe(true)
128
+ wasFulfilled = true
129
+
130
+
131
+ waitsFor ->
132
+ return wasFulfilled
133
+ , 'promise to be fulfilled', 100
134
+
135
+ runs ->
136
+ expect(wasFulfilled).toBe(true)
137
+
138
+ it 'should be able to reject a promise with multile datas', ->
139
+ df = Deferred.create()
140
+ promise = df.promise()
141
+
142
+ df.reject({myObj: true}, {myObj2: true}, {myObj3: true})
143
+
144
+ wasRejected = false
145
+ promise.fail (obj, obj2, obj3)->
146
+ expect(obj.myObj).toBe(true)
147
+ expect(obj2.myObj2).toBe(true)
148
+ expect(obj3.myObj3).toBe(true)
149
+ wasRejected = true
150
+
151
+
152
+ waitsFor ->
153
+ return wasRejected
154
+ , 'promise to be rejected', 100
155
+
156
+ runs ->
157
+ expect(wasRejected).toBe(true)
158
+
159
+
160
+ it 'should be able to resolve a promise with data, using the then', ->
161
+ df = Deferred.create()
162
+ promise = df.promise()
163
+
164
+ df.resolve({myObj: true})
165
+
166
+ wasFulfilled = false
167
+ promise.then (obj)->
168
+ expect(obj.myObj).toBe(true)
169
+ wasFulfilled = true
170
+ , (obj)->
171
+ expect('not to be called').toBe(true)
172
+ wasFulfilled = false
173
+
174
+ waitsFor ->
175
+ return wasFulfilled
176
+ , 'promise to be fulfilled', 100
177
+
178
+ runs ->
179
+ expect(wasFulfilled).toBe(true)
180
+
181
+
182
+ it 'should be able to reject a promise with data, using the then', ->
183
+ df = Deferred.create()
184
+ promise = df.promise()
185
+
186
+ df.reject({myObj: true})
187
+
188
+ wasRejected = false
189
+ promise.then (obj)->
190
+ expect('not to be called').toBe(true)
191
+ wasRejected = false
192
+ , (obj)->
193
+ expect(obj.myObj).toBe(true)
194
+ wasRejected = true
195
+
196
+ waitsFor ->
197
+ return wasRejected
198
+ , 'promise to be rejected', 100
199
+
200
+ runs ->
201
+ expect(wasRejected).toBe(true)
202
+