chr 0.3.5 → 0.4.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +2 -0
  3. data/.gitignore +6 -1
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +18 -0
  6. data/README.md +4 -0
  7. data/Rakefile +17 -2
  8. data/app/assets/javascripts/chr.coffee +13 -26
  9. data/app/assets/javascripts/chr/{core/chr.coffee → chr.coffee} +4 -1
  10. data/app/assets/javascripts/chr/{core/chr_router.coffee → chr_router.coffee} +0 -0
  11. data/app/assets/javascripts/chr/{core/item.coffee → item.coffee} +2 -1
  12. data/app/assets/javascripts/chr/{core/list.coffee → list.coffee} +1 -1
  13. data/app/assets/javascripts/chr/{core/list_config.coffee → list_config.coffee} +0 -0
  14. data/app/assets/javascripts/chr/{core/list_pagination.coffee → list_pagination.coffee} +15 -4
  15. data/app/assets/javascripts/chr/{core/list_reorder.coffee → list_reorder.coffee} +0 -0
  16. data/app/assets/javascripts/chr/{core/list_search.coffee → list_search.coffee} +1 -1
  17. data/app/assets/javascripts/chr/{core/module.coffee → module.coffee} +0 -0
  18. data/app/assets/javascripts/chr/{core/utils.coffee → utils.coffee} +0 -0
  19. data/app/assets/javascripts/chr/{core/view.coffee → view.coffee} +21 -9
  20. data/app/assets/javascripts/chr/{core/view_local-storage.coffee → view_local-storage.coffee} +0 -0
  21. data/app/assets/javascripts/{chr/store/array-store.coffee → stores/array.coffee} +0 -0
  22. data/app/assets/javascripts/{chr/store/object-store.coffee → stores/object.coffee} +0 -0
  23. data/app/assets/javascripts/{chr/store/rails-array-store.coffee → stores/rails-array.coffee} +0 -0
  24. data/app/assets/javascripts/{chr/store → stores}/rails-form-object-parser.coffee +4 -1
  25. data/app/assets/javascripts/{chr/store/rails-object-store.coffee → stores/rails-object.coffee} +0 -0
  26. data/app/assets/javascripts/{chr/store/rest-array-store.coffee → stores/rest-array.coffee} +5 -2
  27. data/app/assets/javascripts/{chr/store/rest-object-store.coffee → stores/rest-object.coffee} +0 -0
  28. data/app/assets/stylesheets/{_chr.scss → chr.scss} +2 -7
  29. data/app/assets/stylesheets/chr/{_icons.scss → icons.scss} +0 -0
  30. data/app/assets/stylesheets/chr/{_main.scss → main.scss} +10 -3
  31. data/app/assets/stylesheets/chr/{_mixins.scss → mixins.scss} +0 -77
  32. data/app/assets/stylesheets/chr/{_settings.scss → settings.scss} +1 -1
  33. data/bin/chr +13 -0
  34. data/bin/rake +16 -0
  35. data/bin/setup +13 -0
  36. data/chr.gemspec +41 -21
  37. data/docs/tests.md +64 -0
  38. data/lib/chr.rb +10 -2
  39. data/lib/chr/app_builder.rb +385 -0
  40. data/lib/chr/generators/app_generator.rb +213 -0
  41. data/lib/chr/version.rb +3 -1
  42. data/lib/generators/chr/controller_generator.rb +18 -0
  43. data/templates/Gemfile.erb +38 -0
  44. data/templates/Procfile +1 -0
  45. data/templates/README.md.erb +45 -0
  46. data/templates/_analytics.html.erb +9 -0
  47. data/templates/_flashes.html.erb +7 -0
  48. data/templates/_javascript.html.erb +12 -0
  49. data/templates/application.coffee +2 -0
  50. data/templates/application.scss +1 -0
  51. data/templates/application.yml +6 -0
  52. data/templates/application_gitignore +14 -0
  53. data/templates/application_layout.html.erb.erb +29 -0
  54. data/templates/asset_sync.rb +28 -0
  55. data/templates/bin_setup.erb +36 -0
  56. data/templates/body_class_helper.rb +19 -0
  57. data/templates/bundler_audit.rake +12 -0
  58. data/templates/carrierwave.rb +23 -0
  59. data/templates/character_admin.coffee.erb +28 -0
  60. data/templates/character_admin.scss +3 -0
  61. data/templates/character_admin_index.html.erb +2 -0
  62. data/templates/character_admin_layout.html.erb +21 -0
  63. data/templates/character_base_controller.rb +16 -0
  64. data/templates/development_seeds.rb +12 -0
  65. data/templates/devise_overrides_passwords_controller.rb +10 -0
  66. data/templates/devise_overrides_passwords_edit.html.erb +30 -0
  67. data/templates/devise_overrides_passwords_new.html.erb +21 -0
  68. data/templates/devise_overrides_sessions_controller.rb +12 -0
  69. data/templates/devise_overrides_sessions_new.html.erb +31 -0
  70. data/templates/errors.rb +34 -0
  71. data/templates/json_encoding.rb +1 -0
  72. data/templates/newrelic.yml.erb +34 -0
  73. data/templates/puma.rb +18 -0
  74. data/templates/routes.rb +90 -0
  75. data/templates/sample.env +6 -0
  76. data/templates/secrets.yml +14 -0
  77. data/templates/smtp.rb +9 -0
  78. data/templates/staging.rb +5 -0
  79. data/test/factories/article_factory.rb +19 -0
  80. data/test/files/test.jpg +0 -0
  81. data/test/integration/article_fullsize_test.rb +33 -0
  82. data/test/integration/article_test.rb +33 -0
  83. data/test/integration/magazine_article_test.rb +33 -0
  84. data/test/integration/restricted_article_test.rb +33 -0
  85. data/test/integration/sport_article_test.rb +34 -0
  86. data/test/rails_app/Rakefile +6 -0
  87. data/test/rails_app/app/assets/javascripts/admin.coffee +137 -0
  88. data/test/rails_app/app/assets/javascripts/application.js +1 -0
  89. data/test/rails_app/app/assets/stylesheets/admin.scss +1 -0
  90. data/test/rails_app/app/assets/stylesheets/application.css +1 -0
  91. data/test/rails_app/app/controllers/admin/articles_controller.rb +7 -0
  92. data/test/rails_app/app/controllers/admin/base_controller.rb +8 -0
  93. data/test/rails_app/app/controllers/application_controller.rb +5 -0
  94. data/test/rails_app/app/helpers/application_helper.rb +2 -0
  95. data/test/rails_app/app/models/article.rb +46 -0
  96. data/test/rails_app/app/uploaders/article_image_uploader.rb +16 -0
  97. data/test/rails_app/app/views/admin/index.html.erb +4 -0
  98. data/test/rails_app/app/views/layouts/admin.html.erb +17 -0
  99. data/test/rails_app/app/views/layouts/application.html.erb +14 -0
  100. data/test/rails_app/bin/bundle +3 -0
  101. data/test/rails_app/bin/rails +8 -0
  102. data/test/rails_app/bin/rake +8 -0
  103. data/test/rails_app/bin/setup +29 -0
  104. data/test/rails_app/bin/spring +15 -0
  105. data/test/rails_app/config.ru +4 -0
  106. data/test/rails_app/config/application.rb +36 -0
  107. data/test/rails_app/config/boot.rb +3 -0
  108. data/test/rails_app/config/environment.rb +5 -0
  109. data/test/rails_app/config/environments/development.rb +38 -0
  110. data/test/rails_app/config/environments/production.rb +76 -0
  111. data/test/rails_app/config/environments/test.rb +46 -0
  112. data/test/rails_app/config/initializers/assets.rb +12 -0
  113. data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  114. data/test/rails_app/config/initializers/carrierwave.rb +5 -0
  115. data/test/rails_app/config/initializers/cookies_serializer.rb +3 -0
  116. data/test/rails_app/config/initializers/filter_parameter_logging.rb +4 -0
  117. data/test/rails_app/config/initializers/inflections.rb +16 -0
  118. data/test/rails_app/config/initializers/mime_types.rb +4 -0
  119. data/test/rails_app/config/initializers/session_store.rb +3 -0
  120. data/test/rails_app/config/initializers/wrap_parameters.rb +9 -0
  121. data/test/rails_app/config/locales/en.yml +23 -0
  122. data/test/rails_app/config/mongoid.yml +9 -0
  123. data/test/rails_app/config/routes.rb +8 -0
  124. data/test/rails_app/config/secrets.yml +22 -0
  125. data/test/rails_app/db/seeds.rb +7 -0
  126. data/test/rails_app/public/404.html +67 -0
  127. data/test/rails_app/public/422.html +67 -0
  128. data/test/rails_app/public/500.html +66 -0
  129. data/{app/assets/javascripts/form/input-date.coffee → test/rails_app/public/favicon.ico} +0 -0
  130. data/test/rails_app/public/robots.txt +5 -0
  131. data/test/support/character_front_end.rb +196 -0
  132. data/test/support/chr/item.rb +32 -0
  133. data/test/support/chr/list.rb +31 -0
  134. data/test/support/chr/list_pagination.rb +163 -0
  135. data/test/support/chr/list_reorder.rb +46 -0
  136. data/test/support/chr/list_search.rb +41 -0
  137. data/test/support/chr/view.rb +112 -0
  138. data/test/support/stores/array.rb +20 -0
  139. data/test/support/stores/rest-array.rb +34 -0
  140. data/test/test_helper.rb +68 -0
  141. metadata +373 -80
  142. data/Gruntfile.coffee +0 -101
  143. data/app/assets/javascripts/form/expandable-group.coffee +0 -30
  144. data/app/assets/javascripts/form/form.coffee +0 -221
  145. data/app/assets/javascripts/form/input-checkbox.coffee +0 -83
  146. data/app/assets/javascripts/form/input-color.coffee +0 -55
  147. data/app/assets/javascripts/form/input-file.coffee +0 -144
  148. data/app/assets/javascripts/form/input-form.coffee +0 -171
  149. data/app/assets/javascripts/form/input-form_reorder.coffee +0 -67
  150. data/app/assets/javascripts/form/input-hidden.coffee +0 -57
  151. data/app/assets/javascripts/form/input-list.coffee +0 -154
  152. data/app/assets/javascripts/form/input-list_reorder.coffee +0 -39
  153. data/app/assets/javascripts/form/input-list_typeahead.coffee +0 -55
  154. data/app/assets/javascripts/form/input-password.coffee +0 -32
  155. data/app/assets/javascripts/form/input-select.coffee +0 -84
  156. data/app/assets/javascripts/form/input-select2.coffee +0 -33
  157. data/app/assets/javascripts/form/input-string.coffee +0 -160
  158. data/app/assets/javascripts/form/input-text.coffee +0 -43
  159. data/app/assets/javascripts/input-html.coffee +0 -81
  160. data/app/assets/javascripts/input-markdown.coffee +0 -93
  161. data/app/assets/javascripts/input-redactor.coffee +0 -1
  162. data/app/assets/javascripts/redactor/input-redactor.coffee +0 -53
  163. data/app/assets/javascripts/redactor/input-redactor_character.coffee +0 -83
  164. data/app/assets/javascripts/redactor/input-redactor_images.coffee +0 -166
  165. data/app/assets/javascripts/vendor/ace.js +0 -18280
  166. data/app/assets/javascripts/vendor/jquery.scrollparent.js +0 -14
  167. data/app/assets/javascripts/vendor/jquery.textarea_autosize.js +0 -55
  168. data/app/assets/javascripts/vendor/jquery.typeahead.js +0 -1782
  169. data/app/assets/javascripts/vendor/marked.js +0 -1272
  170. data/app/assets/javascripts/vendor/mode-html.js +0 -2436
  171. data/app/assets/javascripts/vendor/mode-markdown.js +0 -2820
  172. data/app/assets/javascripts/vendor/redactor.fixedtoolbar.js +0 -107
  173. data/app/assets/javascripts/vendor/select2.js +0 -5274
  174. data/app/assets/stylesheets/_input-redactor.scss +0 -35
  175. data/app/assets/stylesheets/form/_expandable-group.scss +0 -16
  176. data/app/assets/stylesheets/form/_input-select2.scss +0 -94
  177. data/app/assets/stylesheets/form/_main.scss +0 -180
  178. data/app/assets/stylesheets/vendor/select2.css +0 -258
  179. data/bower.json +0 -38
  180. data/dist/chr.js +0 -5949
  181. data/dist/input-ace.js +0 -24946
  182. data/dist/input-redactor.js +0 -1
  183. data/lib/mongoid/character.rb +0 -30
  184. data/package.json +0 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7f826f08992b4b9540353bcbbba91f9065e0de72
4
- data.tar.gz: a63be1339e56a9672be6dd74e1e4a8c527827bde
3
+ metadata.gz: 169823bd19263619ab77cad99e39dc2ce2be85cd
4
+ data.tar.gz: 59297731059ca511038bfd95152519dd80d42750
5
5
  SHA512:
6
- metadata.gz: b3213804478267d46391d85bacfa7adb5070a67667b0c1310004480f44a9793903f9634f0b61c8ac7e603fc400b32359d7aa4ee269ac72a1ccd026501b7b3344
7
- data.tar.gz: 5308776a2b5f5b5b76385a14ca232786b8555cff71419ee3f7d267b35089bc857591f04647c061aee2e4d362f82bac665ece115f4726bb9fd90dcfefa180448c
6
+ metadata.gz: be0677f767643cac2529520c2b12b90e78e17dda59ceb4148b51fb900598603695de1ed090df233d31aafce1a5e6d32f30eaf4c0964ea160d3a08a26e851af42
7
+ data.tar.gz: b240a37078f759f47aae0f26dc802aee807f4d1c988571c43622000519f8deea817138b5b5509261dd9854ddff500b9a5e7e43d1e1ded9d2983b0fe0d39e4921
@@ -0,0 +1,2 @@
1
+ # service_name: travis-ci
2
+ # repo_token:
data/.gitignore CHANGED
@@ -5,4 +5,9 @@ _site
5
5
  *swp
6
6
  Gemfile.lock
7
7
  tmp
8
- node_modules
8
+ test/rails_app/tmp
9
+ test/rails_app/log
10
+ test/rails_app/public/uploads
11
+ log
12
+ coverage
13
+ uploads
@@ -0,0 +1 @@
1
+ 2.2.2
@@ -0,0 +1,18 @@
1
+ # Travis CI will consult .ruby-version in the root of the repository and use the
2
+ # indicated Ruby runtime
3
+ language: ruby
4
+ rvm:
5
+ - 2.2.2
6
+
7
+ # Make Travis CI to start the MongoDB service on boot
8
+ services:
9
+ - mongodb
10
+
11
+ notifications:
12
+ email: false
13
+
14
+ before_install:
15
+ - sh -c 'if [ -n "$QMAKE" ]; then sudo apt-add-repository -y ppa:ubuntu-sdk-team/ppa && sudo apt-get update && sudo apt-get install libqt5webkit5-dev qtdeclarative5-dev; fi'
16
+
17
+ script:
18
+ - xvfb-run rake test
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Character
2
2
 
3
+ [![Build Status](https://travis-ci.org/slate-studio/chr.svg?branch=master)](https://travis-ci.org/slate-studio/chr)
4
+
5
+
3
6
  *Powerful responsive javascript CMS for apps.*
4
7
 
5
8
 
@@ -41,6 +44,7 @@ Styles setup:
41
44
 
42
45
  * [Rails Setup](docs/rails.md)
43
46
  * [Bootstrap Data](docs/bootstrap.md)
47
+ * [Tests](docs/tests.md)
44
48
 
45
49
  More documentation and samples comming soon...
46
50
 
data/Rakefile CHANGED
@@ -1,3 +1,18 @@
1
1
  # encoding: utf-8
2
- require "rubygems"
3
- require "bundler"
2
+ require 'rubygems'
3
+ require 'bundler/setup'
4
+ require 'bundler/gem_tasks'
5
+ require 'rake/testtask'
6
+ require 'rdoc/task'
7
+
8
+ desc 'Default: run tests for all ORMs.'
9
+ task default: :test
10
+
11
+ desc 'Run Character unit tests.'
12
+ Rake::TestTask.new(:test) do |t|
13
+ t.libs << 'lib'
14
+ t.libs << 'test'
15
+ t.test_files = FileList['test/**/*_test.rb']
16
+ t.verbose = true
17
+ t.warning = false
18
+ end
@@ -1,28 +1,15 @@
1
- #= require ./chr/core/utils
2
- #= require ./chr/core/chr
1
+ #= require ./chr/utils
2
+ #= require ./chr/chr
3
+ #= require ./chr/module
4
+ #= require ./chr/list
5
+ #= require ./chr/item
6
+ #= require ./chr/view
3
7
 
4
- #= require ./chr/core/module
5
- #= require ./chr/core/list
6
- #= require ./chr/core/item
7
- #= require ./chr/core/view
8
+ #= require ./stores/object
9
+ #= require ./stores/array
10
+ #= require ./stores/rest-object
11
+ #= require ./stores/rest-array
12
+ #= require ./stores/rails-object
13
+ #= require ./stores/rails-array
8
14
 
9
- #= require ./chr/store/object-store
10
- #= require ./chr/store/array-store
11
- #= require ./chr/store/rest-object-store
12
- #= require ./chr/store/rest-array-store
13
- #= require ./chr/store/rails-object-store
14
- #= require ./chr/store/rails-array-store
15
-
16
- #= require ./form/form
17
- #= require ./form/input-form
18
- #= require ./form/input-hidden
19
- #= require ./form/input-string
20
- #= require ./form/input-text
21
- #= require ./form/input-checkbox
22
- #= require ./form/input-password
23
- #= require ./form/input-color
24
- #= require ./form/input-file
25
- #= require ./form/input-list
26
- #= require ./form/input-select
27
- #= require ./form/input-select2
28
- #= require ./form/expandable-group
15
+ #= require formagic
@@ -86,7 +86,7 @@ class @Chr
86
86
  window.location.hash = path
87
87
 
88
88
 
89
- start: (@config) ->
89
+ start: (title, @config) ->
90
90
  @$el =$ (@config.selector ? 'body')
91
91
  @$navBar =$ "<nav class='sidebar'>"
92
92
  @$mainMenu =$ "<div class='menu'>"
@@ -109,6 +109,9 @@ class @Chr
109
109
  showError: (message) ->
110
110
  alert 'Error: ' + message
111
111
 
112
+ showNotification: (message) ->
113
+ alert message
114
+
112
115
 
113
116
  include(Chr, chrRouter)
114
117
 
@@ -84,7 +84,8 @@ class @Item
84
84
  @$el.addClass('reorderable')
85
85
  @$el.append $("<div class='icon-reorder'></div>")
86
86
 
87
- @config.onItemRender?(this)
87
+ if @type == 'object'
88
+ @config.onItemRender?(this)
88
89
 
89
90
 
90
91
  destroy: ->
@@ -98,7 +98,7 @@ class @List
98
98
  if hash.startsWith "#/#{ @module.name }"
99
99
  for a in @$items.children()
100
100
  itemPath = $(a).attr('href')
101
- if hash.startsWith(itemPath)
101
+ if itemPath && hash.startsWith(itemPath)
102
102
  return $(a).addClass('active')
103
103
 
104
104
 
@@ -52,6 +52,18 @@ chr._bind_mobile_scroll = ->
52
52
  @_mobile_scroll_binded = true
53
53
 
54
54
 
55
+ chr._list_height = ($items) ->
56
+ height = 0
57
+ offset = null
58
+
59
+ $items.children().each ->
60
+ if offset != $(this).position().top
61
+ offset = $(this).position().top
62
+ height += $(this).height()
63
+
64
+ return height
65
+
66
+
55
67
  chr._load_next_page = ($viewport, list, scroll_top) ->
56
68
  $items = list.$items
57
69
  store = list.config.arrayStore
@@ -61,11 +73,10 @@ chr._load_next_page = ($viewport, list, scroll_top) ->
61
73
  if store.lastPageLoaded then return
62
74
 
63
75
  # check if scroll is near bottom of the $viewport
64
- viewport_height = $viewport.height()
65
- list_items_height = 0
66
- $items.children().each -> list_items_height += $(this).height()
76
+ viewport_height = $viewport.height()
77
+ list_height = chr._list_height($items)
67
78
 
68
- if list_items_height - scroll_top - 100 > viewport_height
79
+ if list_height - scroll_top - 100 > viewport_height
69
80
  return
70
81
 
71
82
  list.showSpinner()
@@ -9,7 +9,7 @@
9
9
  _bind_search: ->
10
10
  @$search =$ "<div class='search'></div>"
11
11
  @$searchIcon =$ "<a href='#' class='icon'></a>"
12
- @$searchInput =$ "<input type='text' placeholder='Search...' />"
12
+ @$searchInput =$ "<input type='text' placeholder='Search' />"
13
13
  @$searchCancel =$ "<a href='#' class='cancel'>Cancel</a>"
14
14
 
15
15
  @$header.append(@$search)
@@ -11,12 +11,15 @@
11
11
  # -----------------------------------------------------------------------------
12
12
  #
13
13
  # Config options:
14
- # formClass - custom form class to be used
15
- # formSchema - form schema for object, autogenerated if missing
16
- # disableDelete - do not add delete button below the form
17
- # disableSave - do not add save button in header
18
- # fullsizeView — use fullsize layout in desktop mode
19
- # onViewShow - on show callback
14
+ # formClass - custom form class to be used
15
+ # formSchema - form schema for object, autogenerated if missing
16
+ # disableDelete - do not add delete button below the form
17
+ # disableSave - do not add save button in header
18
+ # fullsizeView — use fullsize layout in desktop mode
19
+ # onViewShow - on show callback
20
+ # onSaveSuccess - on document succesfully saved callback
21
+ # defaultNewObject - used to generate new form
22
+ # disableFormCache - do not cache form changes
20
23
  #
21
24
  # Public methods:
22
25
  # show(objectId)
@@ -39,6 +42,10 @@ class @View
39
42
  if @config.fullsizeView
40
43
  @$el.addClass 'fullsize'
41
44
 
45
+ # disable local storage cache, as that has to be
46
+ # refactored to be more secure and obvious to user
47
+ @config.disableFormCache ||= true
48
+
42
49
  # header
43
50
  @$header =$ "<header class='header'></header>"
44
51
  @$spinner =$ "<div class='spinner'></div>"
@@ -90,6 +97,8 @@ class @View
90
97
  @form.updateValues(@object)
91
98
  @_clear_local_storage_cache()
92
99
 
100
+ @config.onSaveSuccess?(@)
101
+
93
102
 
94
103
  _save_error: (message, validationErrors) ->
95
104
  @$el.removeClass('view-saving')
@@ -153,10 +162,12 @@ class @View
153
162
  @$header.append @$saveBtn
154
163
 
155
164
  # sync with local storage cache
156
- @_update_object_from_local_storage()
165
+ if ! @config.disableFormCache
166
+ @_update_object_from_local_storage()
157
167
 
158
168
  # form
159
- @form = new (@config.formClass ? Form)(@object, @config)
169
+ object = @object || @config.defaultNewObject || null
170
+ @form = new (@config.formClass ? Form)(object, @config)
160
171
  @$content.append @form.$el
161
172
  @form.initializePlugins()
162
173
 
@@ -164,7 +175,8 @@ class @View
164
175
  @config.onViewShow?(@)
165
176
 
166
177
  # enable local storage caching
167
- @_bind_form_change()
178
+ if ! @config.disableFormCache
179
+ @_bind_form_change()
168
180
 
169
181
 
170
182
  _show_error: ->
@@ -41,4 +41,7 @@
41
41
 
42
42
  formDataObject.append("#{ @config.resource }#{ attr_name }", attr_value)
43
43
 
44
- return formDataObject
44
+ return formDataObject
45
+
46
+
47
+
@@ -220,12 +220,15 @@ class @RestArrayStore extends ArrayStore
220
220
 
221
221
  if @_is_pagination_edge_case() && d.positionHasChanged
222
222
  if d.position >= (@nextPage - 1) * @objectsPerPage - 1
223
+
224
+ console.log ':: reloading current page ::'
225
+ # @TODO: test this scenario
226
+
223
227
  # if object added to the end of the list reload page to
224
228
  # sync last item on the page
225
229
  @_reload_current_page(callbacks)
226
230
 
227
- else
228
- callbacks.onSuccess(data)
231
+ callbacks.onSuccess(data)
229
232
 
230
233
  ), callbacks.onError
231
234
 
@@ -1,3 +1,4 @@
1
+ @import "normalize-rails";
1
2
  @import "bourbon";
2
3
 
3
4
  @import "chr/settings";
@@ -5,10 +6,4 @@
5
6
  @import "chr/icons";
6
7
  @import "chr/main";
7
8
 
8
- @import "form/input-select2";
9
- @import "form/expandable-group";
10
- @import "form/main";
11
-
12
-
13
-
14
-
9
+ @import "formagic";
@@ -5,7 +5,7 @@ html a { text-decoration: none; }
5
5
 
6
6
 
7
7
  /* Menu -------------------------------------------------------------------- */
8
- .menu { font-size: .8em; letter-spacing: 1px; text-transform: uppercase; }
8
+ .menu { font-size: .8em; }
9
9
  .menu:before { @include menu-title($contrastColor); content: 'CHARACTER'; }
10
10
 
11
11
 
@@ -16,10 +16,17 @@ html a { text-decoration: none; }
16
16
  .new { @include position(absolute, 0 0 null null); @extend .icon-plus; }
17
17
  .new + .search { @include position(absolute, 0 40px inherit inherit); }
18
18
  .spinner { @include spinner; @include hide; position: absolute; margin: 6px 0 0 -36px; }
19
- .save { @include position(absolute, 0 1em null null); @include header-button($stableColor); font-weight: 500; }
19
+
20
+ // this is disabled until local storage is back
21
+ //.save { @include position(absolute, 0 1em null null); @include header-button($stableColor); font-weight: 500; }
22
+ .save { @include position(absolute, 0 1em null null); @include header-button($positiveColor); font-weight: 500; }
20
23
  }
21
24
 
22
- .view.has-unsaved-changes .save { color: $positiveColor; }
25
+ // these are ignored until local storage is back
26
+ .view.has-unsaved-changes .save { color: $positiveColor; }
27
+ .view.has-unsaved-changes .title:after { content: ' (not saved)'; font-weight: 300; font-size: .8em; }
28
+ // ------------------------------------------------------
29
+
23
30
  .show-spinner .spinner { display: inline-block; }
24
31
 
25
32
 
@@ -54,83 +54,6 @@
54
54
  }
55
55
 
56
56
 
57
- /* Switch ------------------------------------------------- */
58
- @mixin switch {
59
- $switch-width: 52px;
60
- $switch-padding: 2px;
61
- $switch-height: 32px;
62
- $switch-radius: $switch-height;
63
- $knob-size: $switch-height - ($switch-padding * 2);
64
- $knob-radius: $switch-height - ($switch-padding * 2);
65
- $knob-width: $knob-size;
66
- $switch-background: $white;
67
- $switch-border-background: $contrastColor;
68
- $switch-shadow: 0 0px 2px transparentize(black, 0.6);
69
-
70
- border-radius: $switch-radius;
71
- cursor: pointer;
72
- display: inline-block;
73
- height: $switch-height;
74
- position: relative;
75
- width: $switch-width;
76
-
77
- input[type="checkbox"] {
78
- display: none;
79
-
80
- + .checkbox {
81
- @include transition(all 0.3s ease);
82
- background: $switch-border-background;
83
- border-radius: $switch-radius;
84
- border: none;
85
- cursor: pointer;
86
- height: $switch-height;
87
- margin: 0;
88
- padding: 0;
89
- position: relative;
90
- width: $switch-width;
91
- z-index: 0;
92
-
93
- &:before {
94
- @include position(absolute, 2px 0 0 2px);
95
- @include transform(scale(1));
96
- @include transition(all 0.3s ease);
97
- background: $switch-background;
98
- border-radius: $switch-radius;
99
- content: "";
100
- height: $knob-radius;
101
- width: $switch-width - ($switch-padding * 2);
102
- z-index: 1;
103
- }
104
-
105
- &:after {
106
- @include position(absolute, 2px 0 0 2px);
107
- @include transition(all 0.3s ease);
108
- @include size($knob-size);
109
- background: $switch-background;
110
- border-radius: $knob-radius;
111
- box-shadow: $switch-shadow;
112
- content: "";
113
- z-index: 2;
114
- }
115
- }
116
-
117
- &:checked {
118
- + .checkbox {
119
- background: $positiveColor;
120
-
121
- &:before {
122
- @include transform(scale(0));
123
- }
124
-
125
- &:after {
126
- left: $switch-width - $knob-width - ($switch-padding);
127
- }
128
- }
129
- }
130
- }
131
- }
132
-
133
-
134
57
  /* Spinner ------------------------------------------------ */
135
58
  @mixin spinner {
136
59
  border: .25em solid rgba($contrastColor, 0.2);