kuji-mercury-rails 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. data/LICENSE +25 -0
  2. data/POST_INSTALL +15 -0
  3. data/app/controllers/mercury/images_controller.rb +19 -0
  4. data/app/controllers/mercury_controller.rb +34 -0
  5. data/app/models/mercury/image.rb +16 -0
  6. data/app/views/layouts/mercury.html.erb +33 -0
  7. data/app/views/mercury/lightviews/about.html +11 -0
  8. data/app/views/mercury/modals/character.html +255 -0
  9. data/app/views/mercury/modals/htmleditor.html +13 -0
  10. data/app/views/mercury/modals/link.html +75 -0
  11. data/app/views/mercury/modals/media.html +82 -0
  12. data/app/views/mercury/modals/table.html +84 -0
  13. data/app/views/mercury/palettes/backcolor.html +73 -0
  14. data/app/views/mercury/palettes/forecolor.html +73 -0
  15. data/app/views/mercury/panels/history.html +3 -0
  16. data/app/views/mercury/panels/notes.html +3 -0
  17. data/app/views/mercury/panels/snippets.html +12 -0
  18. data/app/views/mercury/selects/formatblock.html +11 -0
  19. data/app/views/mercury/selects/style.html +5 -0
  20. data/app/views/mercury/snippets/example/options.html.erb +34 -0
  21. data/app/views/mercury/snippets/example/preview.html.erb +1 -0
  22. data/config/engine.rb +41 -0
  23. data/db/migrate/20110526035601_create_mercury_images.rb +11 -0
  24. data/features/loading/loading.feature +22 -0
  25. data/features/loading/navigating.feature +77 -0
  26. data/features/loading/user_interface.feature +67 -0
  27. data/features/regions/editable/advanced_editing.feature +0 -0
  28. data/features/regions/editable/basic_editing.feature +195 -0
  29. data/features/regions/editable/inserting_links.feature +98 -0
  30. data/features/regions/editable/inserting_media.feature +110 -0
  31. data/features/regions/editable/inserting_snippets.feature +102 -0
  32. data/features/regions/editable/inserting_special_characters.feature +24 -0
  33. data/features/regions/editable/inserting_tables.feature +109 -0
  34. data/features/regions/editable/pasting.feature +0 -0
  35. data/features/regions/editable/uploading_images.feature +0 -0
  36. data/features/regions/image/uploading_images.feature +0 -0
  37. data/features/regions/markupable/advanced_editing.feature +0 -0
  38. data/features/regions/markupable/basic_editing.feature +0 -0
  39. data/features/regions/markupable/inserting_links.feature +0 -0
  40. data/features/regions/markupable/inserting_media.feature +0 -0
  41. data/features/regions/markupable/inserting_snippets.feature +0 -0
  42. data/features/regions/markupable/inserting_special_characters.feature +0 -0
  43. data/features/regions/markupable/inserting_tables.feature +0 -0
  44. data/features/regions/markupable/uploading_images.feature +0 -0
  45. data/features/regions/simple/basic_editing.feature +5 -0
  46. data/features/regions/snippetable/advanced_editing.feature +0 -0
  47. data/features/regions/snippetable/basic_editing.feature +0 -0
  48. data/features/regions/snippetable/inserting_snippets.feature +0 -0
  49. data/features/saving/saving.feature +33 -0
  50. data/features/step_definitions/debug_steps.rb +14 -0
  51. data/features/step_definitions/mercury_steps.rb +438 -0
  52. data/features/step_definitions/web_steps.rb +211 -0
  53. data/features/support/env.rb +46 -0
  54. data/features/support/mercury_contents.rb +25 -0
  55. data/features/support/mercury_selectors.rb +148 -0
  56. data/features/support/paths.rb +38 -0
  57. data/features/support/selectors.rb +44 -0
  58. data/lib/generators/mercury/install/install_generator.rb +49 -0
  59. data/lib/generators/mercury/install/templates/mongoid_paperclip_image.rb +17 -0
  60. data/lib/mercury-rails.rb +3 -0
  61. data/lib/mercury/authentication.rb +8 -0
  62. data/spec/javascripts/mercury/dialog_spec.js.coffee +281 -0
  63. data/spec/javascripts/mercury/dialogs/backcolor_spec.js.coffee +37 -0
  64. data/spec/javascripts/mercury/dialogs/forecolor_spec.js.coffee +37 -0
  65. data/spec/javascripts/mercury/dialogs/formatblock_spec.js.coffee +25 -0
  66. data/spec/javascripts/mercury/dialogs/snippetpanel_spec.js.coffee +30 -0
  67. data/spec/javascripts/mercury/dialogs/style_spec.js.coffee +25 -0
  68. data/spec/javascripts/mercury/history_buffer_spec.js.coffee +76 -0
  69. data/spec/javascripts/mercury/lightview_spec.js.coffee +497 -0
  70. data/spec/javascripts/mercury/mercury_spec.js.coffee +132 -0
  71. data/spec/javascripts/mercury/modal_spec.js.coffee +504 -0
  72. data/spec/javascripts/mercury/modals/htmleditor_spec.js.coffee +30 -0
  73. data/spec/javascripts/mercury/modals/insertcharacter_spec.js.coffee +29 -0
  74. data/spec/javascripts/mercury/modals/insertlink_spec.js.coffee +220 -0
  75. data/spec/javascripts/mercury/modals/insertmedia_spec.js.coffee +167 -0
  76. data/spec/javascripts/mercury/modals/insertsnippet_spec.js.coffee +52 -0
  77. data/spec/javascripts/mercury/modals/inserttable_spec.js.coffee +160 -0
  78. data/spec/javascripts/mercury/native_extensions_spec.js.coffee +60 -0
  79. data/spec/javascripts/mercury/page_editor_spec.js.coffee +757 -0
  80. data/spec/javascripts/mercury/palette_spec.js.coffee +49 -0
  81. data/spec/javascripts/mercury/panel_spec.js.coffee +183 -0
  82. data/spec/javascripts/mercury/region_spec.js.coffee +298 -0
  83. data/spec/javascripts/mercury/regions/editable_spec.js.coffee +561 -0
  84. data/spec/javascripts/mercury/regions/image_spec.js.coffee +34 -0
  85. data/spec/javascripts/mercury/regions/markupable_spec.js.coffee +367 -0
  86. data/spec/javascripts/mercury/regions/simple_spec.js.coffee +33 -0
  87. data/spec/javascripts/mercury/regions/snippetable_spec.js.coffee +370 -0
  88. data/spec/javascripts/mercury/select_spec.js.coffee +49 -0
  89. data/spec/javascripts/mercury/snippet_spec.js.coffee +253 -0
  90. data/spec/javascripts/mercury/snippet_toolbar_spec.js.coffee +184 -0
  91. data/spec/javascripts/mercury/statusbar_spec.js.coffee +150 -0
  92. data/spec/javascripts/mercury/table_editor_spec.js.coffee +194 -0
  93. data/spec/javascripts/mercury/toolbar.button_group_spec.js.coffee +90 -0
  94. data/spec/javascripts/mercury/toolbar.button_spec.js.coffee +360 -0
  95. data/spec/javascripts/mercury/toolbar.expander_spec.js.coffee +118 -0
  96. data/spec/javascripts/mercury/toolbar_spec.js.coffee +222 -0
  97. data/spec/javascripts/mercury/tooltip_spec.js.coffee +186 -0
  98. data/spec/javascripts/mercury/uploader_spec.js.coffee +530 -0
  99. data/spec/javascripts/spec_helper.js +513 -0
  100. data/spec/javascripts/templates/mercury/dialog.html +2 -0
  101. data/spec/javascripts/templates/mercury/dialogs/backcolor.html +5 -0
  102. data/spec/javascripts/templates/mercury/dialogs/forecolor.html +5 -0
  103. data/spec/javascripts/templates/mercury/dialogs/formatblock.html +3 -0
  104. data/spec/javascripts/templates/mercury/dialogs/snippetpanel.html +16 -0
  105. data/spec/javascripts/templates/mercury/dialogs/style.html +3 -0
  106. data/spec/javascripts/templates/mercury/lightview.html +13 -0
  107. data/spec/javascripts/templates/mercury/modal.html +13 -0
  108. data/spec/javascripts/templates/mercury/modals/htmleditor.html +5 -0
  109. data/spec/javascripts/templates/mercury/modals/insertcharacter.html +5 -0
  110. data/spec/javascripts/templates/mercury/modals/insertlink.html +30 -0
  111. data/spec/javascripts/templates/mercury/modals/insertmedia.html +35 -0
  112. data/spec/javascripts/templates/mercury/modals/insertsnippet.html +6 -0
  113. data/spec/javascripts/templates/mercury/modals/inserttable.html +27 -0
  114. data/spec/javascripts/templates/mercury/page_editor.html +35 -0
  115. data/spec/javascripts/templates/mercury/palette.html +16 -0
  116. data/spec/javascripts/templates/mercury/panel.html +16 -0
  117. data/spec/javascripts/templates/mercury/region.html +2 -0
  118. data/spec/javascripts/templates/mercury/regions/editable.html +3 -0
  119. data/spec/javascripts/templates/mercury/regions/image.html +1 -0
  120. data/spec/javascripts/templates/mercury/regions/simple.html +3 -0
  121. data/spec/javascripts/templates/mercury/regions/snippetable.html +4 -0
  122. data/spec/javascripts/templates/mercury/select.html +16 -0
  123. data/spec/javascripts/templates/mercury/snippet.html +1 -0
  124. data/spec/javascripts/templates/mercury/snippet_toolbar.html +16 -0
  125. data/spec/javascripts/templates/mercury/statusbar.html +8 -0
  126. data/spec/javascripts/templates/mercury/table_editor.html +65 -0
  127. data/spec/javascripts/templates/mercury/toolbar.button.html +64 -0
  128. data/spec/javascripts/templates/mercury/toolbar.button_group.html +9 -0
  129. data/spec/javascripts/templates/mercury/toolbar.expander.html +18 -0
  130. data/spec/javascripts/templates/mercury/toolbar.html +11 -0
  131. data/spec/javascripts/templates/mercury/tooltip.html +12 -0
  132. data/spec/javascripts/templates/mercury/uploader.html +11 -0
  133. data/vendor/assets/images/mercury/button.png +0 -0
  134. data/vendor/assets/images/mercury/close.png +0 -0
  135. data/vendor/assets/images/mercury/default-snippet.png +0 -0
  136. data/vendor/assets/images/mercury/loading-dark.gif +0 -0
  137. data/vendor/assets/images/mercury/loading-light.gif +0 -0
  138. data/vendor/assets/images/mercury/missing-image.png +0 -0
  139. data/vendor/assets/images/mercury/search-icon.png +0 -0
  140. data/vendor/assets/images/mercury/temp-logo.png +0 -0
  141. data/vendor/assets/images/mercury/toolbar/editable/buttons.png +0 -0
  142. data/vendor/assets/images/mercury/toolbar/primary/_expander.png +0 -0
  143. data/vendor/assets/images/mercury/toolbar/primary/_pressed.png +0 -0
  144. data/vendor/assets/images/mercury/toolbar/primary/historypanel.png +0 -0
  145. data/vendor/assets/images/mercury/toolbar/primary/insertcharacter.png +0 -0
  146. data/vendor/assets/images/mercury/toolbar/primary/insertlink.png +0 -0
  147. data/vendor/assets/images/mercury/toolbar/primary/insertmedia.png +0 -0
  148. data/vendor/assets/images/mercury/toolbar/primary/inserttable.png +0 -0
  149. data/vendor/assets/images/mercury/toolbar/primary/inspectorpanel.png +0 -0
  150. data/vendor/assets/images/mercury/toolbar/primary/notespanel.png +0 -0
  151. data/vendor/assets/images/mercury/toolbar/primary/preview.png +0 -0
  152. data/vendor/assets/images/mercury/toolbar/primary/redo.png +0 -0
  153. data/vendor/assets/images/mercury/toolbar/primary/save.png +0 -0
  154. data/vendor/assets/images/mercury/toolbar/primary/snippetpanel.png +0 -0
  155. data/vendor/assets/images/mercury/toolbar/primary/undo.png +0 -0
  156. data/vendor/assets/images/mercury/toolbar/snippetable/buttons.png +0 -0
  157. data/vendor/assets/javascripts/mercury.js +479 -0
  158. data/vendor/assets/javascripts/mercury/dependencies/jquery-1.7.js +9300 -0
  159. data/vendor/assets/javascripts/mercury/dependencies/jquery-ui-1.8.13.custom.js +1328 -0
  160. data/vendor/assets/javascripts/mercury/dependencies/jquery.additions.js +206 -0
  161. data/vendor/assets/javascripts/mercury/dependencies/jquery.htmlClean.js +527 -0
  162. data/vendor/assets/javascripts/mercury/dependencies/liquidmetal.js +88 -0
  163. data/vendor/assets/javascripts/mercury/dependencies/showdown.js +1340 -0
  164. data/vendor/assets/javascripts/mercury/dialog.js.coffee +159 -0
  165. data/vendor/assets/javascripts/mercury/dialogs/backcolor.js.coffee +6 -0
  166. data/vendor/assets/javascripts/mercury/dialogs/forecolor.js.coffee +6 -0
  167. data/vendor/assets/javascripts/mercury/dialogs/formatblock.js.coffee +4 -0
  168. data/vendor/assets/javascripts/mercury/dialogs/snippetpanel.js.coffee +10 -0
  169. data/vendor/assets/javascripts/mercury/dialogs/style.js.coffee +4 -0
  170. data/vendor/assets/javascripts/mercury/finalize.js.coffee +3 -0
  171. data/vendor/assets/javascripts/mercury/history_buffer.js.coffee +30 -0
  172. data/vendor/assets/javascripts/mercury/lightview.js.coffee +205 -0
  173. data/vendor/assets/javascripts/mercury/locales/ar.locale.js.coffee +207 -0
  174. data/vendor/assets/javascripts/mercury/locales/da.locale.js.coffee +211 -0
  175. data/vendor/assets/javascripts/mercury/locales/de.locale.js.coffee +206 -0
  176. data/vendor/assets/javascripts/mercury/locales/es.locale.js.coffee +211 -0
  177. data/vendor/assets/javascripts/mercury/locales/example.local.js.coffee +211 -0
  178. data/vendor/assets/javascripts/mercury/locales/fr.locale.js.coffee +211 -0
  179. data/vendor/assets/javascripts/mercury/locales/it.locale.js.coffee +208 -0
  180. data/vendor/assets/javascripts/mercury/locales/ko.local.js.coffee +206 -0
  181. data/vendor/assets/javascripts/mercury/locales/nl.locale.js.coffee +206 -0
  182. data/vendor/assets/javascripts/mercury/locales/pt.locale.js.coffee +211 -0
  183. data/vendor/assets/javascripts/mercury/locales/sv.local.js.coffee +209 -0
  184. data/vendor/assets/javascripts/mercury/locales/swedish_chef.locale.js.coffee +213 -0
  185. data/vendor/assets/javascripts/mercury/mercury.js.coffee +109 -0
  186. data/vendor/assets/javascripts/mercury/modal.js.coffee +198 -0
  187. data/vendor/assets/javascripts/mercury/modals/htmleditor.js.coffee +11 -0
  188. data/vendor/assets/javascripts/mercury/modals/insertcharacter.js.coffee +4 -0
  189. data/vendor/assets/javascripts/mercury/modals/insertlink.js.coffee +92 -0
  190. data/vendor/assets/javascripts/mercury/modals/insertmedia.js.coffee +81 -0
  191. data/vendor/assets/javascripts/mercury/modals/insertsnippet.js.coffee +12 -0
  192. data/vendor/assets/javascripts/mercury/modals/inserttable.js.coffee +54 -0
  193. data/vendor/assets/javascripts/mercury/native_extensions.js.coffee +55 -0
  194. data/vendor/assets/javascripts/mercury/page_editor.js.coffee +225 -0
  195. data/vendor/assets/javascripts/mercury/palette.js.coffee +29 -0
  196. data/vendor/assets/javascripts/mercury/panel.js.coffee +115 -0
  197. data/vendor/assets/javascripts/mercury/plugins/save_as_xml/mercury/page_editor.js.coffee +28 -0
  198. data/vendor/assets/javascripts/mercury/plugins/save_as_xml/plugin.js +9 -0
  199. data/vendor/assets/javascripts/mercury/region.js.coffee +107 -0
  200. data/vendor/assets/javascripts/mercury/regions/editable.js.coffee +600 -0
  201. data/vendor/assets/javascripts/mercury/regions/image.js.coffee +114 -0
  202. data/vendor/assets/javascripts/mercury/regions/markupable.js.coffee +398 -0
  203. data/vendor/assets/javascripts/mercury/regions/simple.js.coffee +325 -0
  204. data/vendor/assets/javascripts/mercury/regions/snippetable.js.coffee +124 -0
  205. data/vendor/assets/javascripts/mercury/select.js.coffee +44 -0
  206. data/vendor/assets/javascripts/mercury/snippet.js.coffee +106 -0
  207. data/vendor/assets/javascripts/mercury/snippet_toolbar.js.coffee +72 -0
  208. data/vendor/assets/javascripts/mercury/statusbar.js.coffee +51 -0
  209. data/vendor/assets/javascripts/mercury/support/history.js +1 -0
  210. data/vendor/assets/javascripts/mercury/table_editor.js.coffee +265 -0
  211. data/vendor/assets/javascripts/mercury/toolbar.button.js.coffee +173 -0
  212. data/vendor/assets/javascripts/mercury/toolbar.button_group.js.coffee +42 -0
  213. data/vendor/assets/javascripts/mercury/toolbar.expander.js.coffee +56 -0
  214. data/vendor/assets/javascripts/mercury/toolbar.js.coffee +86 -0
  215. data/vendor/assets/javascripts/mercury/tooltip.js.coffee +74 -0
  216. data/vendor/assets/javascripts/mercury/uploader.js.coffee +244 -0
  217. data/vendor/assets/javascripts/mercury_loader.js +193 -0
  218. data/vendor/assets/javascripts/mercury_overrides.js +6 -0
  219. data/vendor/assets/stylesheets/mercury.css +28 -0
  220. data/vendor/assets/stylesheets/mercury/all_images.css.erb +89 -0
  221. data/vendor/assets/stylesheets/mercury/dialog.css +212 -0
  222. data/vendor/assets/stylesheets/mercury/form.css +118 -0
  223. data/vendor/assets/stylesheets/mercury/lightview.css +151 -0
  224. data/vendor/assets/stylesheets/mercury/mercury.css +37 -0
  225. data/vendor/assets/stylesheets/mercury/modal.css +183 -0
  226. data/vendor/assets/stylesheets/mercury/statusbar.css +32 -0
  227. data/vendor/assets/stylesheets/mercury/toolbar.css +304 -0
  228. data/vendor/assets/stylesheets/mercury/tooltip.css +26 -0
  229. data/vendor/assets/stylesheets/mercury/uploader.css +111 -0
  230. data/vendor/assets/stylesheets/mercury_overrides.css +17 -0
  231. metadata +572 -0
@@ -0,0 +1,44 @@
1
+ module HtmlSelectorsHelpers
2
+ # Maps a name to a selector. Used primarily by the
3
+ #
4
+ # When /^(.+) within (.+)$/ do |step, scope|
5
+ #
6
+ # step definitions in web_steps.rb
7
+ #
8
+ def selector_for(locator)
9
+
10
+ # add in for mercury support
11
+ result = mercury_selector_for(locator)
12
+ return result if result.present?
13
+
14
+ case locator
15
+
16
+ when /the page/
17
+ "html > body"
18
+
19
+ # Add more mappings here.
20
+ # Here is an example that pulls values out of the Regexp:
21
+ #
22
+ # when /the (notice|error|info) flash/
23
+ # ".flash.#{$1}"
24
+
25
+ # You can also return an array to use a different selector
26
+ # type, like:
27
+ #
28
+ # when /the header/
29
+ # [:xpath, "//header"]
30
+
31
+ # This allows you to provide a quoted selector as the scope
32
+ # for "within" steps as was previously the default for the
33
+ # web steps:
34
+ when /"(.+)"/
35
+ $1
36
+
37
+ else
38
+ raise "Can't find mapping from \"#{locator}\" to a selector.\n" +
39
+ "Now, go and add a mapping in #{__FILE__}"
40
+ end
41
+ end
42
+ end
43
+
44
+ World(HtmlSelectorsHelpers)
@@ -0,0 +1,49 @@
1
+ module Mercury
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root Mercury::Engine.root
5
+
6
+ desc "Installs Mercury into your application by copying the configuration file."
7
+
8
+ class_option :orm, :default => 'active_record', :banner => 'mongoid',
9
+ :desc => 'ORM for required models -- active_record, or mongoid'
10
+
11
+ class_option :full, :type => :boolean, :aliases => '-g',
12
+ :desc => 'Full installation will install the layout and css overrides for easier customization.'
13
+
14
+ def copy_config
15
+ copy_file 'vendor/assets/javascripts/mercury.js', 'app/assets/javascripts/mercury.js'
16
+ end
17
+
18
+ def add_routes
19
+ route %Q{Mercury::Engine.routes}
20
+ end
21
+
22
+ def copy_models
23
+ if options[:orm] == 'mongoid'
24
+ copy_file 'lib/generators/mercury/install/templates/mongoid_paperclip_image.rb', 'app/models/mercury/image.rb'
25
+ else
26
+ copy_file 'app/models/mercury/image.rb' if options[:full]
27
+ end
28
+ end
29
+
30
+ def copy_layout_and_css_overrides
31
+ if options[:full] || yes?("Install the layout and CSS overrides files? [yN]")
32
+ copy_file 'app/views/layouts/mercury.html.erb', 'app/views/layouts/mercury.html.erb'
33
+ copy_file 'vendor/assets/stylesheets/mercury_overrides.css', 'app/assets/stylesheets/mercury_overrides.css'
34
+ end
35
+ end
36
+
37
+ def copy_authentication_overrides
38
+ if options[:full] || yes?("Install the authentication file so you can restrict access to editing? [yN]")
39
+ copy_file 'lib/mercury/authentication.rb'
40
+ end
41
+ end
42
+
43
+ def display_readme
44
+ readme 'POST_INSTALL' if behavior == :invoke
45
+ end
46
+
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,17 @@
1
+ class Mercury::Image
2
+ include Mongoid::Document
3
+ include Mongoid::Paperclip
4
+
5
+ has_mongoid_attached_file :image
6
+
7
+ validates_presence_of :image
8
+
9
+ delegate :url, :to => :image
10
+
11
+ def serializable_hash(options = nil)
12
+ options ||= {}
13
+ options[:methods] ||= []
14
+ options[:methods] << :url
15
+ super(options)
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ require 'paperclip'
2
+
3
+ require File.expand_path('../config/engine', File.dirname(__FILE__))
@@ -0,0 +1,8 @@
1
+ module Mercury
2
+ module Authentication
3
+
4
+ def can_edit?
5
+ true # check here to see if the user is logged in/has access
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,281 @@
1
+ describe "Mercury.Dialog", ->
2
+
3
+ template 'mercury/dialog.html'
4
+
5
+ beforeEach ->
6
+ $.fx.off = true
7
+ Mercury.determinedLocale =
8
+ top: {'hello world!': 'bork! bork!'}
9
+ sub: {'foo': 'Bork!'}
10
+
11
+ afterEach ->
12
+ delete(@dialog)
13
+ Mercury.config.localization.enabled = false
14
+
15
+
16
+ describe "constructor", ->
17
+
18
+ beforeEach ->
19
+ @buildSpy = spyOn(Mercury.Dialog.prototype, 'build').andCallFake(=>)
20
+ @bindEventsSpy = spyOn(Mercury.Dialog.prototype, 'bindEvents').andCallFake(=>)
21
+ @preloadSpy = spyOn(Mercury.Dialog.prototype, 'preload').andCallFake(=>)
22
+
23
+ it "expects a url and name", ->
24
+ @dialog = new Mercury.Dialog('/blank.html', 'foo')
25
+ expect(@dialog.url).toEqual('/blank.html')
26
+ expect(@dialog.name).toEqual('foo')
27
+
28
+ it "accepts options", ->
29
+ @dialog = new Mercury.Dialog('/blank.html', 'foo', {for: 'something', foo: 'bar'})
30
+ expect(@dialog.options).toEqual({for: 'something', foo: 'bar'})
31
+
32
+ it "calls build", ->
33
+ @dialog = new Mercury.Dialog()
34
+ expect(@buildSpy.callCount).toEqual(1)
35
+
36
+ it "calls bindEvents", ->
37
+ @dialog = new Mercury.Dialog()
38
+ expect(@bindEventsSpy.callCount).toEqual(1)
39
+
40
+ it "preloads if configured", ->
41
+ @dialog = new Mercury.Dialog()
42
+ expect(@preloadSpy.callCount).toEqual(1)
43
+
44
+
45
+ describe "#build", ->
46
+
47
+ beforeEach ->
48
+ @bindEventsSpy = spyOn(Mercury.Dialog.prototype, 'bindEvents').andCallFake(=>)
49
+ @preloadSpy = spyOn(Mercury.Dialog.prototype, 'preload').andCallFake(=>)
50
+
51
+ it "builds an element", ->
52
+ @dialog = new Mercury.Dialog('/blank.html', 'foo', {appendTo: '#test'})
53
+ html = $('<div>').html(@dialog.element).html()
54
+ expect(html).toContain('class="mercury-dialog mercury-foo-dialog loading"')
55
+ expect(html).toContain('style="display:none"')
56
+
57
+ it "appends to any element", ->
58
+ @dialog = new Mercury.Dialog('/blank.html', 'foo', {appendTo: '#dialog_container'})
59
+ expect($('#dialog_container .mercury-dialog').length).toEqual(1)
60
+
61
+
62
+ describe "#bindEvents", ->
63
+
64
+ it "only observes mousedown to stop the event"
65
+
66
+
67
+ describe "#preload", ->
68
+
69
+ beforeEach ->
70
+ @loadSpy = spyOn(Mercury.Dialog.prototype, 'load').andCallFake(=>)
71
+
72
+ it "calls load if configured", ->
73
+ @dialog = new Mercury.Dialog('/blank.html', 'foo', {appendTo: '#test', preload: true})
74
+ expect(@loadSpy.callCount).toEqual(1)
75
+
76
+ it "doesn't call load if configured", ->
77
+ @dialog = new Mercury.Dialog('/blank.html', 'foo', {appendTo: '#test', preload: false})
78
+ expect(@loadSpy.callCount).toEqual(0)
79
+
80
+
81
+ describe "#toggle", ->
82
+
83
+ beforeEach ->
84
+ @dialog = new Mercury.Dialog('/blank.html', 'foo', {appendTo: '#test'})
85
+
86
+ it "shows or hides", ->
87
+ expect(@dialog.element.css('display')).toEqual('none')
88
+ @dialog.toggle()
89
+ expect(@dialog.element.css('display')).toEqual('block')
90
+ @dialog.toggle()
91
+ expect(@dialog.element.css('display')).toEqual('none')
92
+
93
+
94
+ describe "#resize", ->
95
+
96
+ beforeEach ->
97
+ @dialog = new Mercury.Dialog('/blank.html', 'foo', {appendTo: '#test'})
98
+
99
+ it "calls show", ->
100
+ spy = spyOn(Mercury.Dialog.prototype, 'show').andCallFake(=>)
101
+ @dialog.resize()
102
+ expect(spy.callCount).toEqual(1)
103
+
104
+
105
+ describe "#show", ->
106
+
107
+ beforeEach ->
108
+ @dialog = new Mercury.Dialog('/blank.html', 'foo', {appendTo: '#test'})
109
+
110
+ it "triggers a custom event to hide all other dialogs", ->
111
+ spy = spyOn(Mercury, 'trigger').andCallFake(=>)
112
+ @dialog.show()
113
+ expect(spy.callCount).toEqual(1)
114
+ expect(spy.argsForCall[0]).toEqual(['hide:dialogs', @dialog])
115
+
116
+ describe "when already loaded", ->
117
+
118
+ beforeEach ->
119
+ @dialog.loaded = true
120
+
121
+ it "sets width and height on the element to auto", ->
122
+ @dialog.element.css({width: 100})
123
+ @dialog.show()
124
+ expect(@dialog.element.get(0).style.width).toEqual('auto')
125
+ expect(@dialog.element.get(0).style.height).toEqual('auto')
126
+
127
+ it "calls position", ->
128
+ spy = spyOn(Mercury.Dialog.prototype, 'position').andCallFake(=>)
129
+ @dialog.show()
130
+ expect(spy.callCount).toEqual(1)
131
+ expect(spy.argsForCall[0]).toEqual([true])
132
+
133
+ it "calls appear", ->
134
+ spy = spyOn(Mercury.Dialog.prototype, 'appear').andCallFake(=>)
135
+ @dialog.show()
136
+ expect(spy.callCount).toEqual(1)
137
+
138
+ describe "when not loaded", ->
139
+
140
+ it "calls position", ->
141
+ spy = spyOn(Mercury.Dialog.prototype, 'position').andCallFake(=>)
142
+ @dialog.show()
143
+ expect(spy.callCount).toEqual(1)
144
+ expect(spy.argsForCall[0]).toEqual([])
145
+
146
+ it "calls appear", ->
147
+ spy = spyOn(Mercury.Dialog.prototype, 'appear').andCallFake(=>)
148
+ @dialog.show()
149
+ expect(spy.callCount).toEqual(1)
150
+
151
+
152
+ describe "#position", ->
153
+
154
+ it "does nothing and is there as an interface method"
155
+
156
+
157
+ describe "#appear", ->
158
+
159
+ beforeEach ->
160
+ @dialog = new Mercury.Dialog('/blank.html', 'foo', {appendTo: '#test'})
161
+
162
+ it "animates the dialog in", ->
163
+ @dialog.appear()
164
+ expect(@dialog.element.css('display')).toEqual('block')
165
+ expect(parseFloat(@dialog.element.css('opacity')).toPrecision(2)).toEqual('0.95')
166
+
167
+ it "calls load if it's not already loaded", ->
168
+
169
+
170
+ describe "#hide", ->
171
+
172
+ beforeEach ->
173
+ @dialog = new Mercury.Dialog('/blank.html', 'foo', {appendTo: '#test'})
174
+
175
+ it "hides the dialog", ->
176
+ @dialog.element.css({display: 'block'})
177
+ @dialog.hide()
178
+ expect(@dialog.element.css('display')).toEqual('none')
179
+ expect(@dialog.visible).toEqual(false)
180
+
181
+
182
+ describe "#load", ->
183
+
184
+ beforeEach ->
185
+ @spyFunction = ->
186
+ Mercury.dialogHandlers.foo = ->
187
+ @dialog = new Mercury.Dialog('/blank.html', 'foo', {appendTo: '#test', for: $('#button')})
188
+
189
+ it "does nothing if there's no url", ->
190
+ spy = spyOn($, 'ajax').andCallFake(=>)
191
+ @dialog.url = false
192
+ @dialog.load()
193
+ expect(spy.callCount).toEqual(0)
194
+
195
+ describe "on a preloaded view", ->
196
+
197
+ beforeEach ->
198
+ Mercury.preloadedViews = {'/blank.html': 'this is the preloaded content'}
199
+
200
+ afterEach ->
201
+ Mercury.preloadedViews = {}
202
+
203
+ it "calls loadContent with the content in the preloaded view", ->
204
+ spy = spyOn(Mercury.Dialog.prototype, 'loadContent').andCallFake(=>)
205
+ @dialog.load()
206
+ expect(spy.callCount).toEqual(1)
207
+ expect(spy.argsForCall[0]).toEqual(['this is the preloaded content'])
208
+
209
+ describe "when not a preloaded view", ->
210
+
211
+ it "makes an ajax request", ->
212
+ spy = spyOn($, 'ajax').andCallFake(=>)
213
+ @dialog.load()
214
+ expect(spy.callCount).toEqual(1)
215
+
216
+ describe "on success", ->
217
+
218
+ beforeEach ->
219
+ @loadContentSpy = spyOn(Mercury.Dialog.prototype, 'loadContent').andCallFake(=>)
220
+ @ajaxSpy = spyOn($, 'ajax').andCallFake (url, options) =>
221
+ options.success('return value') if (options.success)
222
+
223
+ it "calls loadContent with data", ->
224
+ @dialog.load()
225
+ expect(@loadContentSpy.callCount).toEqual(1)
226
+ expect(@loadContentSpy.argsForCall[0]).toEqual(['return value'])
227
+
228
+ it "calls a dialog handler if there's one", ->
229
+ spy = spyOn(Mercury.dialogHandlers, 'foo').andCallFake(=>)
230
+ @dialog.load()
231
+ expect(spy.callCount).toEqual(1)
232
+
233
+ it "calls a callback if one was provided", ->
234
+ spy = spyOn(@, 'spyFunction').andCallFake(=>)
235
+ @dialog.load(@spyFunction)
236
+ expect(spy.callCount).toEqual(1)
237
+
238
+ describe "on failure", ->
239
+
240
+ beforeEach ->
241
+ @alertSpy = spyOn(window, 'alert').andCallFake(=>)
242
+ @ajaxSpy = spyOn($, 'ajax').andCallFake (url, options) =>
243
+ options.error() if (options.error)
244
+
245
+ it "hides", ->
246
+ spy = spyOn(Mercury.Dialog.prototype, 'hide').andCallFake(=>)
247
+ @dialog.load()
248
+ expect(spy.callCount).toEqual(1)
249
+
250
+ it "removes the pressed state for it's button", ->
251
+ $('#button').addClass('pressed')
252
+ @dialog.load()
253
+ expect($('#button').hasClass('pressed')).toEqual(false)
254
+
255
+ it "alerts the user", ->
256
+ @dialog.load()
257
+ expect(@alertSpy.callCount).toEqual(1)
258
+ expect(@alertSpy.argsForCall[0]).toEqual(['Mercury was unable to load /blank.html for the "foo" dialog.'])
259
+
260
+
261
+ describe "#loadContent", ->
262
+
263
+ beforeEach ->
264
+ @dialog = new Mercury.Dialog('/blank.html', 'foo', {appendTo: '#test'})
265
+
266
+ it "sets loaded to be true", ->
267
+ @dialog.loadContent()
268
+ expect(@dialog.loaded).toEqual(true)
269
+
270
+ it "removes the loading class from the element", ->
271
+ @dialog.loadContent()
272
+ expect(@dialog.element.hasClass('loading')).toEqual(false)
273
+
274
+ it "sets the element html to be the data passed to it", ->
275
+ @dialog.loadContent('<span>hello world!</span>')
276
+ expect(@dialog.element.html()).toEqual('<span>hello world!</span>')
277
+
278
+ it "translates the content if configured", ->
279
+ Mercury.config.localization.enabled = true
280
+ @dialog.loadContent('<span>hello world!</span>')
281
+ expect(@dialog.element.html()).toEqual('<span>bork! bork!</span>')
@@ -0,0 +1,37 @@
1
+ describe "Mercury.dialogHandlers.backColor", ->
2
+
3
+ template 'mercury/dialogs/backcolor.html'
4
+
5
+ beforeEach ->
6
+ @dialog = {element: $('#test'), button: $('#button')}
7
+ Mercury.dialogHandlers.backColor.call(@dialog)
8
+
9
+ describe "when a .picker or .last-picked element is clicked", ->
10
+
11
+ it "sets the last picked color to whatever was selected", ->
12
+ $('.last-picked').css({background: '#0000FF'})
13
+ jasmine.simulate.click($('#white').get(0))
14
+ expect($('.last-picked').css('backgroundColor')).toEqual('rgb(255, 255, 255)')
15
+ jasmine.simulate.click($('#red').get(0))
16
+ expect($('.last-picked').css('backgroundColor')).toEqual('rgb(255, 0, 0)')
17
+
18
+ it "sets the background color of the button", ->
19
+ $('#button').css({background: '#0000FF'})
20
+ jasmine.simulate.click($('#white').get(0))
21
+ expect($('#button').css('backgroundColor')).toEqual('rgb(255, 255, 255)')
22
+ jasmine.simulate.click($('#red').get(0))
23
+ expect($('#button').css('backgroundColor')).toEqual('rgb(255, 0, 0)')
24
+
25
+ it "triggers an action", ->
26
+ spy = spyOn(Mercury, 'trigger').andCallFake(=>)
27
+ jasmine.simulate.click($('#white').get(0))
28
+ expect(spy.callCount).toEqual(1)
29
+ expect(spy.argsForCall[0]).toEqual(['action', {action: 'backColor', value: 'rgb(255, 255, 255)'}])
30
+
31
+
32
+ describe "when any other element is clicked", ->
33
+
34
+ it "does nothing", ->
35
+ spy = spyOn(Mercury, 'trigger').andCallFake(=>)
36
+ jasmine.simulate.click($('#green').get(0))
37
+ expect(spy.callCount).toEqual(0)