gocart 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +0 -0
- data/README.md +0 -0
- data/assets/Gemfile +24 -0
- data/assets/Guardfile +37 -0
- data/assets/Rakefile +5 -0
- data/assets/config.rb +24 -0
- data/assets/spec/javascripts/support/jasmine.yml +86 -0
- data/assets/spec/javascripts/support/jasmine_config.rb +23 -0
- data/assets/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/assets/src/server/http_handler.go +136 -0
- data/assets/src/server/main.go +31 -0
- data/assets/src/server/templates.go +42 -0
- data/assets/src/www/app/coffee/adapters/dummy_data.js.coffee +6 -0
- data/assets/src/www/app/coffee/adapters/reddit.js.coffee +294 -0
- data/assets/src/www/app/coffee/application.js.coffee +23 -0
- data/assets/src/www/app/coffee/controllers/app.js.coffee +69 -0
- data/assets/src/www/app/coffee/controllers/nav.js.coffee +55 -0
- data/assets/src/www/app/coffee/controllers/subreddit_posts.js.coffee +57 -0
- data/assets/src/www/app/coffee/helpers/event_manager.js.coffee +3 -0
- data/assets/src/www/app/coffee/helpers/properties.js.coffee +19 -0
- data/assets/src/www/app/coffee/helpers/storage.js.coffee +14 -0
- data/assets/src/www/app/coffee/libs/3rdparty.js.coffee +7 -0
- data/assets/src/www/app/coffee/libs/deferred.js.coffee +92 -0
- data/assets/src/www/app/coffee/libs/logger.js.coffee +40 -0
- data/assets/src/www/app/coffee/libs/mod_loader.js.coffee +44 -0
- data/assets/src/www/app/coffee/main.js.coffee +42 -0
- data/assets/src/www/app/coffee/models/comment.js.coffee +26 -0
- data/assets/src/www/app/coffee/models/post.js.coffee +27 -0
- data/assets/src/www/app/coffee/models/sub_reddit.js.coffee +18 -0
- data/assets/src/www/app/coffee/widgets/post_detail.js.coffee +2 -0
- data/assets/src/www/app/coffee/widgets/posts.js.coffee +45 -0
- data/assets/src/www/app/coffee/widgets/subreddit_detail.js.coffee +2 -0
- data/assets/src/www/app/coffee/widgets/subreddits.js.coffee +44 -0
- data/assets/src/www/app/images/test.png +0 -0
- data/assets/src/www/app/partials/index.html +92 -0
- data/assets/src/www/app/sass/application.css.scss +136 -0
- data/assets/src/www/app/templates/application.gotmpl +2 -0
- data/assets/src/www/app/templates/base.gotmpl.erb +27 -0
- data/assets/src/www/app/templates/home.gotmpl +9 -0
- data/assets/src/www/spec/coffee/deferred-spec.coffee +202 -0
- data/assets/src/www/spec/coffee/mocks.coffee +137 -0
- data/assets/src/www/spec/coffee/mod_loader-spec.coffee +45 -0
- data/assets/src/www/spec/coffee/properties-spec.coffee +21 -0
- data/assets/src/www/spec/coffee/reddit_adapter-spec.coffee +143 -0
- data/assets/src/www/vendor/css/jq.ui.css +630 -0
- data/assets/src/www/vendor/images/ajax-loader.png +0 -0
- data/assets/src/www/vendor/images/icons-18-black.png +0 -0
- data/assets/src/www/vendor/images/icons-18-white.png +0 -0
- data/assets/src/www/vendor/images/icons-36-black.png +0 -0
- data/assets/src/www/vendor/images/icons-36-white.png +0 -0
- data/assets/src/www/vendor/js/ICanHaz.min.js +10 -0
- data/assets/src/www/vendor/js/jq.mobi.min.js +20 -0
- data/assets/src/www/vendor/js/jq.ui.min.js +90 -0
- data/assets/src/www/vendor/js/jq.web.min.js +58 -0
- data/assets/src/www/vendor/js/phonegap-1.1.0.js +4577 -0
- data/assets/src/www/vendor/js/touch.js +103 -0
- data/assets/tasks/app.rake +34 -0
- data/assets/tasks/jasmine.rake +8 -0
- data/assets/tasks/server.rake +58 -0
- data/assets/tasks/www.rake +163 -0
- data/bin/gocart +25 -0
- data/lib/gocart.rb +5 -6
- data/lib/gocart/base.rb +28 -0
- data/lib/gocart/environment.rb +18 -0
- data/lib/gocart/version.rb +1 -1
- metadata +113 -41
- data/.gitignore +0 -4
- data/Gemfile +0 -4
- data/Rakefile +0 -1
- data/gocarg.go +0 -29
- data/gocart.gemspec +0 -38
@@ -0,0 +1,137 @@
|
|
1
|
+
|
2
|
+
modLoader.define 'mocks', (require, exports)->
|
3
|
+
|
4
|
+
exports.ajax = jasmine.createSpy('AJAX Stub').andCallFake () ->
|
5
|
+
return
|
6
|
+
|
7
|
+
exports.model_subreddit = {
|
8
|
+
id:'fake id',
|
9
|
+
title:'fake title',
|
10
|
+
name:'fake name'
|
11
|
+
url: '/r/programming/'
|
12
|
+
}
|
13
|
+
|
14
|
+
exports.rsp_reddits = {
|
15
|
+
"kind":"Listing",
|
16
|
+
"data":{
|
17
|
+
"modhash":"yqpsudqtcv91b6a8e81dcce79d45fcaf82bfc6b147f7fab330",
|
18
|
+
"children":[
|
19
|
+
{
|
20
|
+
"kind":"t5",
|
21
|
+
"data":{
|
22
|
+
"display_name":"pics",
|
23
|
+
"name":"t5_2qh0u",
|
24
|
+
"title":"Pictures and Images",
|
25
|
+
"url":"/r/pics/",
|
26
|
+
"created":1201221069.0,
|
27
|
+
"created_utc":1201221069.0,
|
28
|
+
"over18":false,
|
29
|
+
"subscribers":1098672,
|
30
|
+
"id":"2qh0u",
|
31
|
+
"description":"A place to share interesting photographs and pictures. Feel free to post your own, but please **read the rules first** (see below), and note that we are *not a catch-all* for general images (of text, comics, etc.)\n\n\n#Announcement#\n*Oct 13th, 2011* - **We have a [new ruleset](http://www.reddit.com/r/pics/comments/lb24q/rpics_ruleset/)**, please read it carefully before submitting anything. \n\n#Rules#\n\n1. **No pictures of text.** *This includes images with superimposed text, such as [image macros](http://en.wikipedia.org/wiki/Image_macro) and comics, as well as screenshots, and (non-historical) handwritten text.*\n\n1. **No gore, porn or anything NSFW.** *This subreddit is strictly SFW, and there are better places for such content.*\n\n1. **No personal information.** *This includes anything hosted on Facebook's servers, as they can be traced to the original account holder. Stalking & harassment will not be tolerated.*\n\n1. **No solicitation of votes or DAE posts.** \n\n1. **No non-author URLs in images.** *We only tolerate URLs in images if they serve to give credit to the original author.*\n\n**Please also read the full version of these rules [here](http://www.reddit.com/r/pics/comments/lb24q/rpics_ruleset/).**\n\n\nIf your submission appears to be banned but meets the above rules, [please send us a message](/message/compose?to=%23pics). Don't delete it as that makes the filter hate you! \n\n\nIf you come across any rule violations, please report the submission or [message the mods](http://www.reddit.com/message/compose?to=%23pics) and one of us will remove it!\n\n#Related subreddits#\n\n* **[misc](/r/misc/)**\n* **[gifs](/r/gifs/)**\n* **[f7u12](/r/fffffffuuuuuuuuuuuu/)**\n* **[Vertical](/r/Vertical)**\n* **[Demotivational](/r/Demotivational)**\n* **[Advice Animals](/r/AdviceAnimals)**\n* **[The SFWPorn Network](http://reddit.com/r/earthporn+villageporn+cityporn+spaceporn+waterporn+abandonedporn+animalporn+humanporn+botanicalporn+adrenalineporn+destructionporn+movieposterporn+albumartporn+machineporn+newsporn+geekporn+bookporn+mapporn+adporn+designporn+roomporn+militaryporn+historyporn+quotesporn+skyporn+fireporn+infrastructureporn)**\n* [Rage Novels](/r/ragenovels/)\n* [Rage Ops](/r/rageops)\n* [Advice Atheists](/r/AdviceAtheists)\n* [a6theism10](/r/aaaaaatheismmmmmmmmmm)\n* [Trolling Animals](/r/TrollingAnimals)\n* [/r/AnythingGoesPics](/r/AnythingGoesPics)\n* [/r/OriginalHub](/r/OriginalHub)\n* [/r/screenshots](/r/screenshots)\n* [/r/tradingfaces](/r/tradingfaces)\n* [/r/nostalgia](/r/nostalgia)\n* [/r/facepalm](/r/facepalm)\n* [/r/gamingpics](/r/gamingpics)\n* [/r/aww](/r/aww)\n* [/r/eCards](/r/eCards)\n* [/r/comics](/r/comics)\n* [/r/webcomics](/r/webcomics)\n* [/r/photography](/r/photography)\n* [/r/PictureChallenge](/r/PictureChallenge)\n* [/r/photocritique](/r/photocritique)\n* [/r/windowshots](/r/windowshots)\n* [/r/wallpaper](/r/wallpaper)\n* [/r/wallpapers](/r/wallpapers)\n* [/r/1000words](/r/1000words)\n* [/r/newreddits](/r/newreddits)\n\nAlso check out http://irc.reddit.com\n\n### [***20/10/11 New Ruleset***: Please report violations using the 'report' button.](http://www.reddit.com/r/pics/comments/lb24q/rpics_ruleset/)###"
|
32
|
+
}
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"kind":"t5",
|
36
|
+
"data":{
|
37
|
+
"display_name":"funny",
|
38
|
+
"name":"t5_2qh33",
|
39
|
+
"title":"funny",
|
40
|
+
"url":"/r/funny/",
|
41
|
+
"created":1201242956.0,
|
42
|
+
"created_utc":1201242956.0,
|
43
|
+
"over18":false,
|
44
|
+
"subscribers":1111900,
|
45
|
+
"id":"2qh33",
|
46
|
+
"description":"***New Rule***: No posts with their sole purpose being to communicate with another redditor. [Example.](http://www.reddit.com/r/funny/comments/lq3uv/a_student_in_a_course_i_teach_is_constantly/) Sorry, you're going to have to use a different form of communication.\n\n---\n\n1. [**New r/Funny Rule**, click here to see.](http://www.reddit.com/r/funny/comments/lqgx7/new_rule_use_your_phone_or_something/)\n\n**Welcome to r/Funny:**\n\nYou may only post if you are funny. \n\nNo rage comics. Go to [/F7U12](http://www.reddit.com/r/fffffffuuuuuuuuuuuu) instead.\n\n**No Memes!** Go to [/AdviceAnimals](/r/adviceanimals) instead.\n\nRehosted webcomics will be removed. Please submit a link to the original comic's site and preferably an imgur link in the comments. [(*)](http://www.reddit.com/r/funny/comments/kqwwx/we_need_to_talk_about_rehosting_wecomics/)\n\nBefore you submit a screenshot of a reddit thread *here*, you might want to check out [r/BestOf](http://www.reddit.com/r/bestof). \n\nNeed more? Check out:\n\n* [humor](http://www.reddit.com/r/humor) for more in-depth stuff\n* [jokes](/r/jokes)\n* [comics](/r/comics)\n* [punny](/r/punny)\n* [Very Punny](/r/verypunny)\n* [lolcats](/r/lolcats)\n* [lol](/r/lol)\n* [TrollingAnimals](/r/TrollingAnimals)\n* [Rage Novels](/r/ragenovels/)\n* [Demotivational](http://www.reddit.com/r/Demotivational)\n* **[misc](/r/misc/)** for anything else\n\nStill need more? See Reddit's [best / worst](http://www.reddit.com/r/AskReddit/comments/8ft5j/tell_me_your_best_worst_joke_reddit/?sort=top) and [offensive](http://www.reddit.com/r/funny/comments/7rxyh/collection_of_totally_offensive_jokes_not_for_the/?sort=top) joke collections (warning: some of those jokes are offensive / nsfw!). \n\n\n------\n\nPlease DO NOT post [personal information](http://www.reddit.com/help/faq#Ispostingpersonalinformationok). This includes anything hosted on Facebook's servers, as they can be traced to the original account holder.\n\n----\n\nIf your submission appears to be banned, please don't just delete it as that makes the filter hate you! Instead please [send us a message](/message/compose?to=%23funny). We'll unban it and it should get better. please allow 10 minutes for the post to appear before messaging moderators\n\n----\n\nCSS - BritishEnglishPolice \u00a92011"
|
47
|
+
}
|
48
|
+
}
|
49
|
+
],
|
50
|
+
"after":"t5_2qq5c",
|
51
|
+
"before":null
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
exports.rsp_posts = {
|
56
|
+
"kind":"Listing",
|
57
|
+
"data":{
|
58
|
+
"modhash":"s7069nuzol41d61f1b1ff780c40b025a4848c4b06c6ebaa061",
|
59
|
+
"children":[
|
60
|
+
{
|
61
|
+
"kind":"t3",
|
62
|
+
"data":{
|
63
|
+
"domain":"perlbuzz.com",
|
64
|
+
"media_embed":{
|
65
|
+
|
66
|
+
},
|
67
|
+
"levenshtein":null,
|
68
|
+
"subreddit":"programming",
|
69
|
+
"selftext_html":null,
|
70
|
+
"selftext":"",
|
71
|
+
"likes":null,
|
72
|
+
"saved":false,
|
73
|
+
"id":"ms13h",
|
74
|
+
"clicked":false,
|
75
|
+
"title":"Finding a lost dog's owner with Perl",
|
76
|
+
"media":null,
|
77
|
+
"score":426,
|
78
|
+
"over_18":false,
|
79
|
+
"hidden":false,
|
80
|
+
"thumbnail":"",
|
81
|
+
"subreddit_id":"t5_2fwo",
|
82
|
+
"author_flair_css_class":null,
|
83
|
+
"downs":222,
|
84
|
+
"is_self":false,
|
85
|
+
"permalink":"/r/programming/comments/ms13h/finding_a_lost_dogs_owner_with_perl/",
|
86
|
+
"name":"t3_ms13h",
|
87
|
+
"created":1322517472.0,
|
88
|
+
"url":"http://perlbuzz.com/2011/11/finding-a-lost-dogs-owner-with-perl-and-wwwmechanize.html",
|
89
|
+
"author_flair_text":null,
|
90
|
+
"author":"mpeters",
|
91
|
+
"created_utc":1322492272.0,
|
92
|
+
"num_comments":61,
|
93
|
+
"ups":648
|
94
|
+
}
|
95
|
+
},
|
96
|
+
{
|
97
|
+
"kind":"t3",
|
98
|
+
"data":{
|
99
|
+
"domain":"elegantcoding.com",
|
100
|
+
"media_embed":{
|
101
|
+
|
102
|
+
},
|
103
|
+
"levenshtein":null,
|
104
|
+
"subreddit":"programming",
|
105
|
+
"selftext_html":null,
|
106
|
+
"selftext":"",
|
107
|
+
"likes":null,
|
108
|
+
"saved":false,
|
109
|
+
"id":"msl7x",
|
110
|
+
"clicked":false,
|
111
|
+
"title":"Eleven equations every Computer Science geeks should know",
|
112
|
+
"media":null,
|
113
|
+
"score":76,
|
114
|
+
"over_18":false,
|
115
|
+
"hidden":false,
|
116
|
+
"thumbnail":"",
|
117
|
+
"subreddit_id":"t5_2fwo",
|
118
|
+
"author_flair_css_class":null,
|
119
|
+
"downs":41,
|
120
|
+
"is_self":false,
|
121
|
+
"permalink":"/r/programming/comments/msl7x/eleven_equations_every_computer_science_geeks/",
|
122
|
+
"name":"t3_msl7x",
|
123
|
+
"created":1322547476.0,
|
124
|
+
"url":"http://www.elegantcoding.com/2011/11/eleven-equations-true-computer-science.html",
|
125
|
+
"author_flair_text":null,
|
126
|
+
"author":"chandershivdasani",
|
127
|
+
"created_utc":1322522276.0,
|
128
|
+
"num_comments":34,
|
129
|
+
"ups":117
|
130
|
+
}
|
131
|
+
}
|
132
|
+
],
|
133
|
+
"after":"t3_mqs0s",
|
134
|
+
"before":null
|
135
|
+
}
|
136
|
+
}
|
137
|
+
return
|
@@ -0,0 +1,45 @@
|
|
1
|
+
describe 'Module Loader Spec', ->
|
2
|
+
|
3
|
+
beforeEach ->
|
4
|
+
modLoader.clearAll()
|
5
|
+
return
|
6
|
+
|
7
|
+
it 'should be defined as a global object', ->
|
8
|
+
expect(modLoader).toBeDefined()
|
9
|
+
return
|
10
|
+
|
11
|
+
it 'should be able to define a new module', ->
|
12
|
+
modLoader.define 'testmod-1', (require, exports)->
|
13
|
+
return
|
14
|
+
|
15
|
+
expect(modLoader.isDefined('testmod-1')).toBe(true)
|
16
|
+
return
|
17
|
+
|
18
|
+
it 'should be able to define a new module with exports', ->
|
19
|
+
modLoader.define 'testmod-1', (require, exports)->
|
20
|
+
exports.isLoaded = true
|
21
|
+
return
|
22
|
+
|
23
|
+
exports = modLoader.require 'testmod-1'
|
24
|
+
expect(exports).toBeDefined()
|
25
|
+
expect(exports.isLoaded).toBe(true)
|
26
|
+
return
|
27
|
+
|
28
|
+
it 'should only load a module once and cache the exports', ->
|
29
|
+
numLoaded = 0
|
30
|
+
modLoader.define 'testmod-1', (require, exports)->
|
31
|
+
numLoaded++
|
32
|
+
exports.isLoaded = true
|
33
|
+
return
|
34
|
+
|
35
|
+
exports = modLoader.require 'testmod-1'
|
36
|
+
expect(exports).toBeDefined()
|
37
|
+
expect(exports.isLoaded).toBe(true)
|
38
|
+
expect(numLoaded).toBe(1)
|
39
|
+
|
40
|
+
exports = modLoader.require 'testmod-1'
|
41
|
+
expect(exports).toBeDefined()
|
42
|
+
expect(exports.isLoaded).toBe(true)
|
43
|
+
expect(numLoaded).toBe(1)
|
44
|
+
|
45
|
+
return
|
@@ -0,0 +1,21 @@
|
|
1
|
+
describe 'Properties generator', ->
|
2
|
+
Properties = modLoader.require 'helpers/properties'
|
3
|
+
|
4
|
+
it 'should be able to add properties to a object', ->
|
5
|
+
obj = {}
|
6
|
+
Properties.add obj,
|
7
|
+
val1: {value:'test 1 value',static:true}
|
8
|
+
val2: {value: 'test 2 value'}
|
9
|
+
|
10
|
+
expect(obj.__auto__val1).toBe('test 1 value')
|
11
|
+
expect(obj.val1()).toBe('test 1 value')
|
12
|
+
expect(obj.__auto__val2).toBe('test 2 value')
|
13
|
+
expect(obj.val2()).toBe('test 2 value')
|
14
|
+
|
15
|
+
obj.val1('failed value')
|
16
|
+
expect(obj.val1()).toBe('test 1 value')
|
17
|
+
|
18
|
+
obj.val2('failed value 2')
|
19
|
+
expect(obj.val2()).toBe('failed value 2')
|
20
|
+
return
|
21
|
+
return
|
@@ -0,0 +1,143 @@
|
|
1
|
+
|
2
|
+
describe 'RedditAdapter Testing', ->
|
3
|
+
|
4
|
+
RedditAdapter = modLoader.require('adapters/reddit')
|
5
|
+
SubReddit = modLoader.require('models/sub_reddit')
|
6
|
+
Post = modLoader.require('models/post')
|
7
|
+
Comment = modLoader.require('models/comment')
|
8
|
+
|
9
|
+
logger = modLoader.require('libs/logger').getInstance('RedditAdapter')
|
10
|
+
mocks = modLoader.require('mocks')
|
11
|
+
|
12
|
+
it 'should be able to detect a user is not signed in', ->
|
13
|
+
adapter = RedditAdapter.create(mocks.ajax, logger)
|
14
|
+
expect(adapter.isLoggedIn()).toBe(false)
|
15
|
+
return
|
16
|
+
|
17
|
+
it 'should be able to sign a user in', ->
|
18
|
+
ajaxStub = jasmine.createSpy('AJAX Login Success').andCallFake (request) ->
|
19
|
+
expect(request.url).toBe('https://ssl.reddit.com/api/login/user')
|
20
|
+
expect(request.dataType).toBe('json')
|
21
|
+
expect(request.type).toBe('POST')
|
22
|
+
expect(request.data.passwd).toBe('password')
|
23
|
+
expect(request.data.user).toBe('user')
|
24
|
+
request.success({uh:'valid id'})
|
25
|
+
return
|
26
|
+
|
27
|
+
signedIn = null
|
28
|
+
adapter = RedditAdapter.create(ajaxStub, logger)
|
29
|
+
adapter.loginUser('user','password')
|
30
|
+
.done(
|
31
|
+
(response)->
|
32
|
+
signedIn = true
|
33
|
+
return
|
34
|
+
)
|
35
|
+
|
36
|
+
waitsFor ->
|
37
|
+
return signedIn
|
38
|
+
,'log in user', 100
|
39
|
+
|
40
|
+
runs ->
|
41
|
+
expect(adapter.isLoggedIn()).toBe(true)
|
42
|
+
return
|
43
|
+
|
44
|
+
return
|
45
|
+
|
46
|
+
it 'should be able to get a list of all reddits by type', ->
|
47
|
+
ajaxStub = jasmine.createSpy('AJAX List Reddits').andCallFake (request) ->
|
48
|
+
expect(request.url).toBe('http://www.reddit.com/reddits/popular/.json')
|
49
|
+
expect(request.type).toBe('GET')
|
50
|
+
expect(request.data.after).toBe(null)
|
51
|
+
request.success(mocks.rsp_reddits)
|
52
|
+
return
|
53
|
+
|
54
|
+
rspData = null
|
55
|
+
adapter = RedditAdapter.create(ajaxStub, logger)
|
56
|
+
adapter.listAllSubReddits(RedditAdapter.PAGINATE_TYPE.AFTER, null, RedditAdapter.REDDITS_SORT_TYPES.POPULAR)
|
57
|
+
.done(
|
58
|
+
(response)->
|
59
|
+
rspData = response
|
60
|
+
return
|
61
|
+
)
|
62
|
+
|
63
|
+
waitsFor ->
|
64
|
+
return rspData
|
65
|
+
,'list sub reddits', 100
|
66
|
+
|
67
|
+
runs ->
|
68
|
+
expect(rspData.data.length).toBe(2)
|
69
|
+
expect(rspData.data[0].title()).toBe('Pictures and Images')
|
70
|
+
expect(rspData.data[1].title()).toBe('funny')
|
71
|
+
expect(rspData.before).toBe(null)
|
72
|
+
expect(rspData.after).toBe('t5_2qq5c')
|
73
|
+
return
|
74
|
+
|
75
|
+
return
|
76
|
+
|
77
|
+
it 'should be able to get a list of a users subscribed reddits', ->
|
78
|
+
ajaxStub = jasmine.createSpy('AJAX List Subscribed Reddits').andCallFake (request) ->
|
79
|
+
expect(request.url).toBe('http://www.reddit.com/reddits/mine/subscriber')
|
80
|
+
expect(request.type).toBe('POST')
|
81
|
+
expect(request.data.after).toBe(null)
|
82
|
+
expect(request.data.uh).toBe('valid user')
|
83
|
+
request.success(mocks.rsp_reddits)
|
84
|
+
return
|
85
|
+
|
86
|
+
rspData = null
|
87
|
+
adapter = RedditAdapter.create(ajaxStub, logger)
|
88
|
+
adapter.userSession('valid user')
|
89
|
+
adapter.listUserSubReddits(RedditAdapter.PAGINATE_TYPE.AFTER, null, RedditAdapter.OWN_REDDITS_TYPES.SUB)
|
90
|
+
.done(
|
91
|
+
(response)->
|
92
|
+
rspData = response
|
93
|
+
return
|
94
|
+
)
|
95
|
+
|
96
|
+
waitsFor ->
|
97
|
+
return rspData
|
98
|
+
,'list sub reddits', 100
|
99
|
+
|
100
|
+
runs ->
|
101
|
+
expect(rspData.data.length).toBe(2)
|
102
|
+
expect(rspData.data[0].title()).toBe('Pictures and Images')
|
103
|
+
expect(rspData.data[1].title()).toBe('funny')
|
104
|
+
expect(rspData.before).toBe(null)
|
105
|
+
expect(rspData.after).toBe('t5_2qq5c')
|
106
|
+
return
|
107
|
+
|
108
|
+
return
|
109
|
+
|
110
|
+
it 'should be able to get a list of posts from a subreddit ', ->
|
111
|
+
ajaxStub = jasmine.createSpy('AJAX List sub reddit posts').andCallFake (request) ->
|
112
|
+
expect(request.url).toBe('http://www.reddit.com/r/programming/hot/.json')
|
113
|
+
expect(request.type).toBe('GET')
|
114
|
+
expect(request.data.after).toBe(null)
|
115
|
+
request.success(mocks.rsp_posts)
|
116
|
+
return
|
117
|
+
|
118
|
+
rspData = null
|
119
|
+
subReddit = SubReddit.create(mocks.model_subreddit)
|
120
|
+
adapter = RedditAdapter.create(ajaxStub, logger)
|
121
|
+
adapter.listSubRedditPost(RedditAdapter.PAGINATE_TYPE.AFTER, null, subReddit, RedditAdapter.POST_SORT_TYPES.HOT)
|
122
|
+
.done(
|
123
|
+
(response)->
|
124
|
+
rspData = response
|
125
|
+
return
|
126
|
+
)
|
127
|
+
|
128
|
+
waitsFor ->
|
129
|
+
return rspData
|
130
|
+
,'list sub reddits', 100
|
131
|
+
|
132
|
+
runs ->
|
133
|
+
expect(rspData.data.length).toBe(2)
|
134
|
+
expect(rspData.data[0].title()).toBe('Finding a lost dog\'s owner with Perl')
|
135
|
+
expect(rspData.data[1].title()).toBe('Eleven equations every Computer Science geeks should know')
|
136
|
+
expect(rspData.before).toBe(null)
|
137
|
+
expect(rspData.after).toBe('t3_mqs0s')
|
138
|
+
return
|
139
|
+
|
140
|
+
return
|
141
|
+
|
142
|
+
|
143
|
+
return
|
@@ -0,0 +1,630 @@
|
|
1
|
+
/**********************************************************
|
2
|
+
GENERAL UI ELEMENTS
|
3
|
+
**********************************************************/
|
4
|
+
|
5
|
+
* {
|
6
|
+
-webkit-user-select:none; /* Prevent copy paste for all elements except text fields */
|
7
|
+
-webkit-tap-highlight-color:rgba(255, 255, 255, 0); /* set highlight color for user interaction */
|
8
|
+
}
|
9
|
+
|
10
|
+
input,textarea { -webkit-user-select:text; } /* allow users to select text that appears in input fields */
|
11
|
+
|
12
|
+
* {
|
13
|
+
margin:0;
|
14
|
+
padding:0;
|
15
|
+
} /* Remove default padding and margins for all elements */
|
16
|
+
|
17
|
+
img { border:none; } /* Remove default borders for images */
|
18
|
+
|
19
|
+
body {
|
20
|
+
overflow-x:hidden;
|
21
|
+
-webkit-text-size-adjust:none;
|
22
|
+
font-family:Arial, Helvetica, sans-serif;
|
23
|
+
color:#fff;
|
24
|
+
font-size:14px;
|
25
|
+
background:rgba(19,29,38,1); /* primary background color */
|
26
|
+
|
27
|
+
|
28
|
+
display: -webkit-box;
|
29
|
+
/* We want to layout our first container vertically */
|
30
|
+
-webkit-box-orient: vertical;
|
31
|
+
/* we want our child elements to stretch to fit the container */
|
32
|
+
-webkit-box-align:stretch;
|
33
|
+
|
34
|
+
} /* General styles that apply to elements not contained within other classes and styles */
|
35
|
+
|
36
|
+
p {
|
37
|
+
color:#fff;
|
38
|
+
font-family:Arial, Helvetica, sans-serif;
|
39
|
+
font-size:14px;
|
40
|
+
line-height:18px;
|
41
|
+
background:#131d26;
|
42
|
+
padding:16px;
|
43
|
+
-webkit-box-shadow:rgba(0,0,0,0.5) 0px 0px 24px inset; box-shadow:rgba(0,0,0,0.5) 0px 0px 24px inset; /* Applies an inner shadow to the text area */
|
44
|
+
} /* Paragraph class used for text areas. */
|
45
|
+
|
46
|
+
.modal {
|
47
|
+
z-index:9999;
|
48
|
+
position:absolute;
|
49
|
+
background:inherit;
|
50
|
+
overflow:hidden;
|
51
|
+
left:0px;
|
52
|
+
top:0px;
|
53
|
+
height:100%;
|
54
|
+
width:100%;
|
55
|
+
display:none;
|
56
|
+
} /* Sets up styles for modal panels, which appear above all other UI elements */
|
57
|
+
|
58
|
+
.horzRule {
|
59
|
+
position:relative;
|
60
|
+
display:block;
|
61
|
+
background-image:-webkit-gradient(linear, left top, right top, from(rgba(61,61,61,1)), to(rgba(61,61,61,1)), color-stop(.3,#999), color-stop(.7,#999));
|
62
|
+
width:100%; height:1px;
|
63
|
+
} /* Horizontal line. */
|
64
|
+
|
65
|
+
.jqmScrollbar { background:white !important; } /* Sets the color of the scrollbar */
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
/**********************************************************
|
70
|
+
CUSTOM FONT SETUP
|
71
|
+
**********************************************************/
|
72
|
+
/* appMobi has licensed Eurostile web font usage. Unless you have purchased a license for Eurostile, you may NOT legally use these font files. */
|
73
|
+
/* There are many free use web fonts available from Font Squirrel, Google Web Fonts and other outlets */
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
/**********************************************************
|
80
|
+
header
|
81
|
+
**********************************************************/
|
82
|
+
body > #header {
|
83
|
+
display:block;
|
84
|
+
z-index:250;
|
85
|
+
-webkit-box-sizing:border-box; box-sizing:border-box;
|
86
|
+
height:48px;
|
87
|
+
width:100%;
|
88
|
+
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)));
|
89
|
+
-webkit-box-shadow:0px 0px 24px rgba(0,0,0,0.8); box-shadow:0px 0px 24px rgba(0,0,0,0.8);
|
90
|
+
} /* This is masthead bar that appears at the top of the UI */
|
91
|
+
|
92
|
+
#header > h1 {
|
93
|
+
position:absolute;
|
94
|
+
overflow:hidden;
|
95
|
+
left:45%;
|
96
|
+
margin:1px 0px 0px -75px;
|
97
|
+
height:48px; width:150px;
|
98
|
+
font-family:'Eurostile-Black', Eurostile, Helvetica, Arial, sans-serif;
|
99
|
+
font-weight:normal;
|
100
|
+
font-size:24px;
|
101
|
+
line-height:48px;
|
102
|
+
text-shadow:rgba(0,0,0,0.8) 0px -1px 0px 1px;
|
103
|
+
text-align:center;
|
104
|
+
text-overflow:ellipsis;
|
105
|
+
white-space:nowrap;
|
106
|
+
color:#fff;
|
107
|
+
} /* This is text that appears in the header at the top of the screen */
|
108
|
+
|
109
|
+
body[orient="landscape"] > #header > h1 {
|
110
|
+
margin-left:-125px;
|
111
|
+
width:250px;
|
112
|
+
} /* Updates the available text area and positioning when the screen is held in landscape orientation. */
|
113
|
+
|
114
|
+
|
115
|
+
|
116
|
+
/**********************************************************
|
117
|
+
BUTTON STYLES
|
118
|
+
**********************************************************/
|
119
|
+
#backButton {
|
120
|
+
display:block;
|
121
|
+
position:absolute;
|
122
|
+
left:0px;
|
123
|
+
top:0px;
|
124
|
+
max-width:50px;
|
125
|
+
text-overflow:ellipsis;
|
126
|
+
} /* Sets up positioning of the back button which appears in the header */
|
127
|
+
|
128
|
+
#backButton > div {
|
129
|
+
max-width:50px;
|
130
|
+
overflow:hidden;
|
131
|
+
text-overflow:ellipsis;
|
132
|
+
} /* sets up sizing and handling of excess text for the type in the back button */
|
133
|
+
|
134
|
+
.button {
|
135
|
+
color:#333;
|
136
|
+
cursor:pointer;
|
137
|
+
display:inline-block;
|
138
|
+
font-weight:bold;
|
139
|
+
font-size:14px;
|
140
|
+
line-height:36px;
|
141
|
+
position:relative;
|
142
|
+
text-decoration:none;
|
143
|
+
text-align:center;
|
144
|
+
text-shadow:#fff 0 1px 0;
|
145
|
+
height:36px; min-width:40px;
|
146
|
+
padding:0px 8px;
|
147
|
+
margin-top:6px; margin-left:6px;
|
148
|
+
text-overflow:ellipsis;
|
149
|
+
-webkit-border-radius:6px; border-radius:6px;
|
150
|
+
background-image:-webkit-gradient(linear, left top, left bottom, from(#fff), to(#999), color-stop(.5,#fff), color-stop(.5,#ccc)); background-image:linear-gradient(left top, left bottom, from(#fff), to(#999), color-stop(.5,#fff), color-stop(.5,#ccc));
|
151
|
+
} /* Styling for CSS-generated buttons, including the back button. These buttons can bue used anywhere in the UI. */
|
152
|
+
|
153
|
+
.button.pressed {
|
154
|
+
color:#fff;
|
155
|
+
text-shadow:#2e4987 0 1px 0;
|
156
|
+
background-color:#5884d6;
|
157
|
+
border-color:#7488b8;
|
158
|
+
background-image:-webkit-gradient(linear,left top,left bottom, color-stop(0.01, #eee), color-stop(0.05, #709de7), color-stop(0.70, #5884d6), color-stop(1, #4470ca));
|
159
|
+
} /* behavior of button for touch interaction */
|
160
|
+
|
161
|
+
.modalbutton {
|
162
|
+
position:absolute;
|
163
|
+
top:0px;
|
164
|
+
right:5px;
|
165
|
+
height:32px;
|
166
|
+
width:58px;
|
167
|
+
line-height:32px;
|
168
|
+
}
|
169
|
+
|
170
|
+
a.customBackButton {
|
171
|
+
float:right;
|
172
|
+
display:block;
|
173
|
+
width:44px; height:44px;
|
174
|
+
background:url("images/back.png"), -webkit-gradient(linear, left top, left bottom, from(#161F28), to(#1D2730), color-stop(.5,#161F28), color-stop(.5,#1D2730));
|
175
|
+
background-position:0px 0px, left top;
|
176
|
+
background-repeat:no-repeat;
|
177
|
+
border-top-left-radius:6px; border-bottom-left-radius:6px; -webkit-border-top-left-radius:6px; -webkit-border-top-left-radius:6px;
|
178
|
+
-webkit-box-shadow:0px 0px 24px rgba(0,0,0,0.8); box-shadow:0px 0px 24px rgba(0,0,0,0.8);
|
179
|
+
margin-top:2px;
|
180
|
+
} /* This is the custom, graphical button shown in JQMobi by default */
|
181
|
+
|
182
|
+
a.customBackButton.press {
|
183
|
+
float:right;
|
184
|
+
display:block;
|
185
|
+
width:44px; height:44px;
|
186
|
+
background:url("images/back.png"), -webkit-gradient(linear, left top, left bottom, from(rgba(56,65,74,1)), to(rgba(33,38,43,1)), color-stop(.5,rgba(56,65,74,1)), color-stop(.5,rgba(33,38,43,1)));
|
187
|
+
background-position:0px -44px, left top;
|
188
|
+
background-repeat:no-repeat;
|
189
|
+
border-top-left-radius:6px; border-bottom-left-radius:6px; -webkit-border-top-left-radius:6px; -webkit-border-top-left-radius:6px;
|
190
|
+
-webkit-box-shadow:0px 0px 24px rgba(0,0,0,0.8); box-shadow:0px 0px 24px rgba(0,0,0,0.8);
|
191
|
+
margin-top:2px;
|
192
|
+
}
|
193
|
+
|
194
|
+
|
195
|
+
|
196
|
+
/**********************************************************
|
197
|
+
CONTENT AREA
|
198
|
+
**********************************************************/
|
199
|
+
#content{
|
200
|
+
z-index:180;
|
201
|
+
display:block;
|
202
|
+
position:relative;
|
203
|
+
} /* Accounts for positioning of the content area, which is everything below the header and above the navbar. */
|
204
|
+
|
205
|
+
.panel {
|
206
|
+
z-index:180;
|
207
|
+
width:100%;
|
208
|
+
height:100%;
|
209
|
+
display:none;
|
210
|
+
position:absolute; top:0px; left:-100%;
|
211
|
+
overflow:hidden;
|
212
|
+
background:rgba(19,29,38,1);
|
213
|
+
} /* This class is applied to the divs that contain the various "views" or pages of the app. */
|
214
|
+
|
215
|
+
|
216
|
+
|
217
|
+
/**********************************************************
|
218
|
+
TOOL BAR
|
219
|
+
**********************************************************/
|
220
|
+
/* Tool bar appears locked to the bottom of the screen. It is the primary navigation. can contain text or graphical navigation */
|
221
|
+
#navbar {
|
222
|
+
z-index:1000;
|
223
|
+
text-align:center;
|
224
|
+
width:100%; height:62px; padding:0px 1px;
|
225
|
+
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)));
|
226
|
+
-webkit-box-shadow:0px 0px 24px rgba(0,0,0,0.8); box-shadow:0px 0px 24px rgba(0,0,0,0.8);
|
227
|
+
}
|
228
|
+
|
229
|
+
#navbar a {
|
230
|
+
|
231
|
+
height:60px;
|
232
|
+
overflow:hidden;
|
233
|
+
display:inline-block;
|
234
|
+
font-family:Helvetica, Arial, sans-serif;
|
235
|
+
font-weight:bold;
|
236
|
+
font-size:12px;
|
237
|
+
text-decoration:none;
|
238
|
+
color:#a7a7a7;
|
239
|
+
text-align:center;
|
240
|
+
text-shadow:rgba(10,12,20,.9) 0px -1px 1px;
|
241
|
+
margin: 0px auto;
|
242
|
+
background-image:url('images/nav_icons.png');
|
243
|
+
width:62px;
|
244
|
+
line-height:100px;
|
245
|
+
}
|
246
|
+
|
247
|
+
#navbar a:active, #navbar a:focus, #navbar a:active:focus, #navbar .selected{
|
248
|
+
display:inline-block;
|
249
|
+
font-family:Helvetica, Arial, sans-serif;
|
250
|
+
font-weight:bold;
|
251
|
+
color:#fff !important;
|
252
|
+
background-image:url('images/nav_icons.png'), -webkit-gradient(linear, left top, left bottom, from(#000), to(#000), color-stop(.5,#000), color-stop(.5,rgba(15,22,29,1)));
|
253
|
+
|
254
|
+
}
|
255
|
+
|
256
|
+
|
257
|
+
/* CUSTOM NAVBAR */
|
258
|
+
#navbar a:not(:last-of-type):after {
|
259
|
+
display: block;
|
260
|
+
content: "";
|
261
|
+
width: 1px;
|
262
|
+
height: 60px;
|
263
|
+
background: url('images/vert_divider.png') top right repeat-y;
|
264
|
+
float:right;
|
265
|
+
}
|
266
|
+
.navbar_home {
|
267
|
+
|
268
|
+
}
|
269
|
+
.navbar_js {
|
270
|
+
background-position:-62px 0px;
|
271
|
+
}
|
272
|
+
.navbar_ui {
|
273
|
+
background-position:-124px 0px;
|
274
|
+
}
|
275
|
+
.navbar_plugins {
|
276
|
+
background-position:-186px 0px;
|
277
|
+
}
|
278
|
+
|
279
|
+
|
280
|
+
|
281
|
+
/**********************************************************
|
282
|
+
UL > LI
|
283
|
+
**********************************************************/
|
284
|
+
/* The unordered list/list item classes are the basis of the secondary navigation used in JQ.Mobi: the stacked, listed menu system. */
|
285
|
+
|
286
|
+
ul {
|
287
|
+
margin:0px;
|
288
|
+
padding:0px;
|
289
|
+
}
|
290
|
+
|
291
|
+
ul > li {
|
292
|
+
display:block;
|
293
|
+
width:100%; height:48px;
|
294
|
+
list-style:none;
|
295
|
+
background:#39424b;
|
296
|
+
} /* A plain, non-interactive list item--best suited to a heading. */
|
297
|
+
|
298
|
+
ul > li > a {
|
299
|
+
display:block;
|
300
|
+
width:100%; height:48px;
|
301
|
+
font-family:'Eurostile-Bold', Eurostile, Helvetica, Arial, sans-serif;
|
302
|
+
font-weight:bold;
|
303
|
+
font-size:18px;
|
304
|
+
line-height:48px;
|
305
|
+
text-decoration:none;
|
306
|
+
border-bottom:1px solid black;
|
307
|
+
color:#fff;
|
308
|
+
padding-left:8px;
|
309
|
+
padding-right:-80px;
|
310
|
+
} /* A touchable, interactive list item. */
|
311
|
+
|
312
|
+
ul > li > a:after {
|
313
|
+
content:">";
|
314
|
+
position:absolute;
|
315
|
+
right:15px;
|
316
|
+
}
|
317
|
+
|
318
|
+
ul > li > a[selected], ul > li > a:active {
|
319
|
+
color:#fff !important;
|
320
|
+
|
321
|
+
} /* A selected and active states for interactive list items. */
|
322
|
+
|
323
|
+
ul > li.group {
|
324
|
+
position:relative;
|
325
|
+
top:-1px;
|
326
|
+
margin-bottom:-2px;
|
327
|
+
border-top:1px solid #7d7d7d;
|
328
|
+
border-bottom:1px solid #999999;
|
329
|
+
padding:1px 10px;
|
330
|
+
background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0.09, rgb(125,125,125)), color-stop(0.49, rgb(153,153,153)), color-stop(0.81, rgb(153,153,153)));
|
331
|
+
font-size:17px;
|
332
|
+
font-weight:bold;
|
333
|
+
text-shadow:rgba(0, 0, 0, 0.4) 0px 1px 0px;
|
334
|
+
color:#fff;
|
335
|
+
}
|
336
|
+
|
337
|
+
ul > li.group:first-child {
|
338
|
+
top:0;
|
339
|
+
}
|
340
|
+
|
341
|
+
h2 {
|
342
|
+
display:block;
|
343
|
+
width:95%; height:34px;
|
344
|
+
font-family:'Eurostile-Bold', Eurostile, Helvetica, Arial, sans-serif;
|
345
|
+
font-weight:bold;
|
346
|
+
font-size:18px;
|
347
|
+
line-height:34px;
|
348
|
+
padding: 0px 8px 0px 8px;
|
349
|
+
color:#fff;
|
350
|
+
text-shadow:rgba(0,0,0,.9) 0px -1px 1px;
|
351
|
+
background:#39424b;
|
352
|
+
} /* Header class used for non-navigable header bars (h1 is reserved for the header) */
|
353
|
+
|
354
|
+
.collapsed { background:url('images/expand.png') right center no-repeat; }
|
355
|
+
.expanded { background:url('images/collapse.png') right center no-repeat; } /* Use these classes in cooperation with LI elements for collapsible content. */
|
356
|
+
|
357
|
+
|
358
|
+
|
359
|
+
/**********************************************************
|
360
|
+
MASK
|
361
|
+
**********************************************************/
|
362
|
+
|
363
|
+
/**********************************************************
|
364
|
+
UI
|
365
|
+
**********************************************************/
|
366
|
+
.ui-icon {
|
367
|
+
background: #666;
|
368
|
+
background: rgba(0,0,0,.4);
|
369
|
+
background-repeat: no-repeat;
|
370
|
+
border-radius: 9px;
|
371
|
+
}
|
372
|
+
|
373
|
+
.ui-loader { display: none; position: absolute; opacity: .85; z-index: 100; left: 50%; width: 200px; margin-left: -130px; margin-top: -35px; padding: 10px 30px; background: #666;background:rgba(0,0,0,.4);border-radius:9px;}
|
374
|
+
.ui-loader h1 { font-size: 15px; text-align: center; }
|
375
|
+
.ui-loader .ui-icon { position: static; display: block; opacity: .9; margin: 0 auto; width: 35px; height: 35px; background-color: transparent; }
|
376
|
+
|
377
|
+
.spin {
|
378
|
+
-webkit-transform: rotate(360deg);
|
379
|
+
-webkit-animation-name: spin;
|
380
|
+
-webkit-animation-duration: 1s;
|
381
|
+
-webkit-animation-iteration-count: infinite;
|
382
|
+
}
|
383
|
+
@-webkit-keyframes spin {
|
384
|
+
from {-webkit-transform: rotate(0deg);}
|
385
|
+
to {-webkit-transform: rotate(360deg);}
|
386
|
+
}
|
387
|
+
|
388
|
+
.ui-icon-loading {
|
389
|
+
background-image: url(images/ajax-loader.png);
|
390
|
+
width: 40px;
|
391
|
+
height: 40px;
|
392
|
+
border-radius: 20px;
|
393
|
+
background-size: 35px 35px;
|
394
|
+
}
|
395
|
+
|
396
|
+
.ui-corner-all {
|
397
|
+
border-radius: .6em;
|
398
|
+
}
|
399
|
+
#jQui_mask {position:absolute;top:45%;}
|
400
|
+
|
401
|
+
|
402
|
+
/**********************************************************
|
403
|
+
FORM ELEMENTS
|
404
|
+
**********************************************************/
|
405
|
+
|
406
|
+
* { -webkit-box-sizing:border-box; box-sizing:border-box; }
|
407
|
+
|
408
|
+
fieldset h4 {
|
409
|
+
text-align:left;
|
410
|
+
font-family:'Eurostile-Bold', Eurostile, Helvetica, Arial, sans-serif;
|
411
|
+
color:#a8b4bb;
|
412
|
+
font-weight:bold;
|
413
|
+
font-size:18px;
|
414
|
+
line-height:21px;
|
415
|
+
margin-bottom:-8px; margin-top:8px;
|
416
|
+
text-shadow:1px 1px 3px rgba(0, 0, 0, 0.9);
|
417
|
+
} /* Style for subhead for a group of labels/inputs within a fieldset. */
|
418
|
+
|
419
|
+
|
420
|
+
fieldset {
|
421
|
+
margin:12px 8px;
|
422
|
+
padding:12px 18px 12px 18px;
|
423
|
+
-webkit-border-radius:5px;
|
424
|
+
border-radius:5px;
|
425
|
+
border:1px solid #595d61;
|
426
|
+
outline:0;
|
427
|
+
width:95%;
|
428
|
+
background:url('images/stripe_bg.png') repeat;
|
429
|
+
} /* Styles the border line, background image and spacing for fieldsets. */
|
430
|
+
|
431
|
+
fieldset p {
|
432
|
+
display:block;
|
433
|
+
position:relative;
|
434
|
+
overflow:hidden;
|
435
|
+
padding:0px;
|
436
|
+
padding-bottom:8px;
|
437
|
+
padding-top:8px;
|
438
|
+
font-family:Arial, Helvetica, sans-serif;
|
439
|
+
font-size:14px;
|
440
|
+
line-height:10px;
|
441
|
+
background:transparent;
|
442
|
+
height:37px !important;
|
443
|
+
-webkit-box-shadow:none;
|
444
|
+
} /* The paragraph within a fieldset is used as a wrapper to help manage the replacement of native input elements. */
|
445
|
+
|
446
|
+
legend {
|
447
|
+
margin:0;
|
448
|
+
font-family:'Eurostile-Bold', Eurostile, Helvetica, Arial, sans-serif;
|
449
|
+
font-size:18px;
|
450
|
+
font-weight:bold;
|
451
|
+
overflow:hidden;
|
452
|
+
color:#ccc;
|
453
|
+
text-transform:uppercase;
|
454
|
+
text-shadow:1px 1px 3px rgba(0, 0, 0, 0.9);
|
455
|
+
} /* This is the name that appears at the top left of the fieldset. */
|
456
|
+
|
457
|
+
textarea.jq-ui-forms {
|
458
|
+
display:block;
|
459
|
+
margin-top:4px; margin-bottom:18px;
|
460
|
+
padding:8px;
|
461
|
+
border:solid 1px #999;
|
462
|
+
outline:0;
|
463
|
+
color:#fff;
|
464
|
+
background:#595D61;
|
465
|
+
-webkit-border-radius:6px; border-radius:6px;
|
466
|
+
-webkit-box-shadow:inset 2px 2px 6px rgba(0,0,0,.5); box-shadow:inset 2px 2px 6px rgba(0,0,0,.5);
|
467
|
+
width:266px;
|
468
|
+
height:150px;
|
469
|
+
line-height:120%;
|
470
|
+
} /* These properties determine the look of textarea inputs. */
|
471
|
+
|
472
|
+
|
473
|
+
input.jq-ui-forms {
|
474
|
+
|
475
|
+
display:inline-block;
|
476
|
+
width:200px;
|
477
|
+
margin-top:4px; margin-bottom:12px;
|
478
|
+
padding:8px;
|
479
|
+
border:solid 1px #999;
|
480
|
+
outline:0;
|
481
|
+
color:#fff;
|
482
|
+
background:#595D61;
|
483
|
+
-webkit-border-radius:6px; border-radius:6px;
|
484
|
+
-webkit-box-shadow:inset 2px 2px 6px rgba(0,0,0,.5); box-shadow:inset 2px 2px 6px rgba(0,0,0,.5);
|
485
|
+
} /* These properties combine to create the look of the input fields. */
|
486
|
+
|
487
|
+
|
488
|
+
|
489
|
+
input.jq-ui-forms:hover, textarea.jq-ui-forms:hover, input.jq-ui-forms:focus, textarea.jq-ui-forms:focus { border-color:#ccc; } /* Changes the border color of the input field while active. */
|
490
|
+
|
491
|
+
|
492
|
+
input.jq-ui-forms[type=checkbox] ,input.jq-ui-forms[type=radio] {
|
493
|
+
position:absolute;
|
494
|
+
left:0;
|
495
|
+
opacity:0;
|
496
|
+
margin-bottom:30px;
|
497
|
+
} /* Blocks rendering of the native radio controls. */
|
498
|
+
|
499
|
+
input.jq-ui-forms[type=checkbox] + label,input.jq-ui-forms[type=radio] + label {
|
500
|
+
|
501
|
+
float:left;
|
502
|
+
font-size:15px;
|
503
|
+
font-weight:bold;
|
504
|
+
line-height:26px; /* changing this value will change the vertical relationship to the radios & checkboxes. */
|
505
|
+
margin-left:10px;
|
506
|
+
padding-left:30px;
|
507
|
+
background:url('./images/custom_inputs.png') 0 0px no-repeat;
|
508
|
+
background-repeat:none;
|
509
|
+
height:25px;
|
510
|
+
|
511
|
+
} /* Styling for the labels. */
|
512
|
+
|
513
|
+
|
514
|
+
/* Following block of paragraph classes sets up the usage of the custom radio and checkbox graphics. */
|
515
|
+
|
516
|
+
|
517
|
+
input.jq-ui-forms[type=radio] + label { background-position:0 -225px; }
|
518
|
+
input.jq-ui-forms[type=checkbox] + label { background-position:0 -25px; }
|
519
|
+
|
520
|
+
/* Styles for "checked." */
|
521
|
+
input.jq-ui-forms[type=radio]:checked + label { background-position:0 -300px; }
|
522
|
+
input.jq-ui-forms[type=radio]:hover:checked + label,
|
523
|
+
input.jq-ui-forms[type=radio]:focus:checked + label,
|
524
|
+
input.jq-ui-forms[type=radio]:checked + label:hover,
|
525
|
+
input.jq-ui-forms[type=radio]:focus:checked + label { background-position:0 -300px; }
|
526
|
+
|
527
|
+
input.jq-ui-forms[type=checkbox]:checked + label { background-position:0 -100px; }
|
528
|
+
input.jq-ui-forms[type=checkbox]:hover:checked + label,
|
529
|
+
input.jq-ui-forms[type=checkbox]:focus:checked + label,
|
530
|
+
input.jq-ui-forms[type=checkbox]:checked + label:hover,
|
531
|
+
input.jq-ui-forms[type=checkbox]:focus:checked + label { background-position:0 -100px; }
|
532
|
+
|
533
|
+
|
534
|
+
/* Styles for "hover/focus." */
|
535
|
+
input.jq-ui-forms[type=checkbox]:hover + label,
|
536
|
+
input.jq-ui-forms[type=checkbox]:focus + label,
|
537
|
+
input.jq-ui-forms[type=checkbox] + label:hover { background-position:0 -0x; }
|
538
|
+
|
539
|
+
input.jq-ui-forms[type=radio]:hover + label,
|
540
|
+
input.jq-ui-forms[type=radio]:focus + label,
|
541
|
+
input.jq-ui-forms[type=radio] + label:hover { background-position:0 -200px; }
|
542
|
+
|
543
|
+
/* Styles for "active." */
|
544
|
+
input.jq-ui-forms[type=checkbox]:active + label,
|
545
|
+
input.jq-ui-forms[type=checkbox] + label:hover:active { background-position:0 -0px; }
|
546
|
+
|
547
|
+
input.jq-ui-forms[type=radio]:active + label,
|
548
|
+
input.jq-ui-forms[type=radio] + label:hover:active { background-position:0 -200px; }
|
549
|
+
|
550
|
+
|
551
|
+
input.jq-ui-forms[type=checkbox]:active:checked + label,
|
552
|
+
input.jq-ui-forms[type=checkbox]:checked + label:hover:active { background-position:0 -100px; }
|
553
|
+
|
554
|
+
input.jq-ui-forms[type=radio]:active:checked + label,
|
555
|
+
input.jq-ui-forms[type=radio]:checked + label:hover:active { background-position:0 -300px; }
|
556
|
+
|
557
|
+
/* Styles for "disabled." */
|
558
|
+
input.jq-ui-forms[type=checkbox]:disabled + label,
|
559
|
+
input.jq-ui-forms[type=checkbox]:hover:disabled + label,
|
560
|
+
input.jq-ui-forms[type=checkbox]:focus:disabled + label,
|
561
|
+
input.jq-ui-forms[type=checkbox]:disabled + label:hover,
|
562
|
+
input.jq-ui-forms[type=checkbox]:disabled + label:hover:active { background-position:0 -175px; opacity:.5 !important; }
|
563
|
+
|
564
|
+
input.jq-ui-forms[type=radio]:disabled + label,
|
565
|
+
input.jq-ui-forms[type=radio]:hover:disabled + label,
|
566
|
+
input.jq-ui-forms[type=radio]:focus:disabled + label,
|
567
|
+
input.jq-ui-forms[type=radio]:disabled + label:hover,
|
568
|
+
input.jq-ui-forms[type=radio]:disabled + label:hover:active { background-position:0 -250px; opacity:.5 !important; }
|
569
|
+
|
570
|
+
input.jq-ui-forms[type=checkbox]:disabled:checked + label,
|
571
|
+
input.jq-ui-forms[type=checkbox]:hover:disabled:checked + label,
|
572
|
+
input.jq-ui-forms[type=checkbox]:focus:disabled:checked + label,
|
573
|
+
input.jq-ui-forms[type=checkbox]:disabled:checked + label:hover,
|
574
|
+
input.jq-ui-forms[type=checkbox]:disabled:checked + label:hover:active { background-position:0 -200px; opacity:.5 !important; }
|
575
|
+
|
576
|
+
input.jq-ui-forms[type=radio]:disabled:checked + label,
|
577
|
+
input.jq-ui-forms[type=radio]:hover:disabled:checked + label,
|
578
|
+
input.jq-ui-forms[type=radio]:focus:disabled:checked + label,
|
579
|
+
input.jq-ui-forms[type=radio]:disabled:checked + label:hover,
|
580
|
+
input.jq-ui-forms[type=radio]:disabled:checked + label:hover:active { background-position:0 -375px; opacity:.5 !important; }
|
581
|
+
|
582
|
+
|
583
|
+
|
584
|
+
|
585
|
+
/******** slider controls */
|
586
|
+
input.jq-ui-slider {
|
587
|
+
position:absolute;
|
588
|
+
left:0;
|
589
|
+
opacity:0;
|
590
|
+
} /* Blocks rendering of the native radio controls. */
|
591
|
+
|
592
|
+
|
593
|
+
input.jq-ui-slider + label {
|
594
|
+
|
595
|
+
float:left;
|
596
|
+
font-size:15px;
|
597
|
+
font-weight:normal;
|
598
|
+
line-height:108%; /* changing this value will change the vertical relationship to the radios & checkboxes. */
|
599
|
+
margin-left:10px;
|
600
|
+
padding-left:57px;
|
601
|
+
color:#fff;
|
602
|
+
background:url('images/Off-On_Slider.png') 0 0px no-repeat;
|
603
|
+
height:16px;
|
604
|
+
width:57px;
|
605
|
+
display:inline-block;
|
606
|
+
-webkit-transition: all 0.3s ease-in-out;
|
607
|
+
|
608
|
+
}
|
609
|
+
input.jq-ui-forms[type=radio]:active:checked + label,
|
610
|
+
input.jq-ui-forms[type=checkbox]:active:checked + label,
|
611
|
+
input.jq-ui-forms[type=radio]:active + label,
|
612
|
+
input.jq-ui-forms[type=checkbox]:active + label,
|
613
|
+
input.jq-ui-slider[type=checkbox]:checked + label ,
|
614
|
+
input.jq-ui-slider[type=radio]:checked + label
|
615
|
+
{ background-position:-28px 0px; }
|
616
|
+
|
617
|
+
input.jq-ui-slider[type=radio]:disabled:checked + label,
|
618
|
+
input.jq-ui-slider[type=radio]:focus:disabled:checked + label,
|
619
|
+
input.jq-ui-slider[type=checkbox]:disabled:checked + label,
|
620
|
+
input.jq-ui-slider[type=checkbox]:focus:disabled:checked + label
|
621
|
+
{ background-position:-28px 0px; opacity:.7 !important;}
|
622
|
+
|
623
|
+
/* Styles for "disabled." */
|
624
|
+
input.jq-ui-slider[type=checkbox]:disabled + label,
|
625
|
+
input.jq-ui-slider[type=checkbox]:focus:disabled + label,
|
626
|
+
input.jq-ui-slider[type=radio]:disabled + label,
|
627
|
+
input.jq-ui-slider[type=radio]:focus:disabled + label
|
628
|
+
{ background-position:0 0; opacity:.7 !important; }
|
629
|
+
|
630
|
+
|