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,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
+