mercury-rails 0.3.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/POST_INSTALL +15 -0
- data/{vendor → app}/assets/images/mercury/button.png +0 -0
- data/{vendor → app}/assets/images/mercury/close.png +0 -0
- data/app/assets/images/mercury/default-snippet.png +0 -0
- data/{vendor → app}/assets/images/mercury/loading-dark.gif +0 -0
- data/{vendor → app}/assets/images/mercury/loading-light.gif +0 -0
- data/{vendor → app}/assets/images/mercury/missing-image.png +0 -0
- data/{vendor → app}/assets/images/mercury/search-icon.png +0 -0
- data/{vendor → app}/assets/images/mercury/temp-logo.png +0 -0
- data/app/assets/images/mercury/toolbar/editable/buttons.png +0 -0
- data/app/assets/images/mercury/toolbar/primary/_expander.png +0 -0
- data/app/assets/images/mercury/toolbar/primary/_pressed.png +0 -0
- data/app/assets/images/mercury/toolbar/primary/action.png +0 -0
- data/app/assets/images/mercury/toolbar/primary/historypanel.png +0 -0
- data/app/assets/images/mercury/toolbar/primary/insertcharacter.png +0 -0
- data/app/assets/images/mercury/toolbar/primary/insertlink.png +0 -0
- data/app/assets/images/mercury/toolbar/primary/insertmedia.png +0 -0
- data/app/assets/images/mercury/toolbar/primary/inserttable.png +0 -0
- data/app/assets/images/mercury/toolbar/primary/inspectorpanel.png +0 -0
- data/app/assets/images/mercury/toolbar/primary/notespanel.png +0 -0
- data/app/assets/images/mercury/toolbar/primary/preview.png +0 -0
- data/app/assets/images/mercury/toolbar/primary/redo.png +0 -0
- data/app/assets/images/mercury/toolbar/primary/save.png +0 -0
- data/app/assets/images/mercury/toolbar/primary/snippetpanel.png +0 -0
- data/app/assets/images/mercury/toolbar/primary/undo.png +0 -0
- data/app/assets/images/mercury/toolbar/snippetable/buttons.png +0 -0
- data/{vendor → app}/assets/javascripts/mercury.js +4 -0
- data/{vendor → app}/assets/javascripts/mercury/dependencies/jquery-1.7.js +0 -0
- data/{vendor → app}/assets/javascripts/mercury/dependencies/jquery-ui-1.8.13.custom.js +0 -0
- data/{vendor → app}/assets/javascripts/mercury/dependencies/jquery.additions.js +0 -0
- data/{vendor → app}/assets/javascripts/mercury/dependencies/jquery.htmlClean.js +0 -0
- data/{vendor → app}/assets/javascripts/mercury/dependencies/liquidmetal.js +0 -0
- data/{vendor → app}/assets/javascripts/mercury/dependencies/showdown.js +0 -0
- data/{vendor → app}/assets/javascripts/mercury/dialog.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/dialogs/backcolor.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/dialogs/forecolor.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/dialogs/formatblock.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/dialogs/snippetpanel.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/dialogs/style.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/finalize.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/history_buffer.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/lightview.js.coffee +0 -0
- data/app/assets/javascripts/mercury/locales/ar.locale.js.coffee +207 -0
- data/{vendor → app}/assets/javascripts/mercury/locales/da.locale.js.coffee +7 -7
- data/{vendor → app}/assets/javascripts/mercury/locales/de.locale.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/locales/es.locale.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/locales/example.local.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/locales/fr.locale.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/locales/it.locale.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/locales/ko.local.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/locales/nl.locale.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/locales/pt.locale.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/locales/sv.local.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/locales/swedish_chef.locale.js.coffee +0 -0
- data/app/assets/javascripts/mercury/locales/zh.local.js.coffee +209 -0
- data/{vendor → app}/assets/javascripts/mercury/mercury.js.coffee +9 -1
- data/{vendor → app}/assets/javascripts/mercury/modal.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/modals/htmleditor.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/modals/insertcharacter.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/modals/insertlink.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/modals/insertmedia.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/modals/insertsnippet.js.coffee +1 -0
- data/{vendor → app}/assets/javascripts/mercury/modals/inserttable.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/native_extensions.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/page_editor.js.coffee +46 -19
- data/{vendor → app}/assets/javascripts/mercury/palette.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/panel.js.coffee +2 -2
- data/{vendor → app}/assets/javascripts/mercury/plugins/save_as_xml/mercury/page_editor.js.coffee +2 -2
- data/{vendor → app}/assets/javascripts/mercury/plugins/save_as_xml/plugin.js +0 -0
- data/{vendor → app}/assets/javascripts/mercury/region.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/regions/editable.js.coffee +5 -5
- data/app/assets/javascripts/mercury/regions/image.js.coffee +114 -0
- data/{vendor → app}/assets/javascripts/mercury/regions/markupable.js.coffee +0 -0
- data/app/assets/javascripts/mercury/regions/simple.js.coffee +325 -0
- data/{vendor → app}/assets/javascripts/mercury/regions/snippetable.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/select.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/snippet.js.coffee +23 -7
- data/{vendor → app}/assets/javascripts/mercury/snippet_toolbar.js.coffee +16 -4
- data/{vendor → app}/assets/javascripts/mercury/statusbar.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/support/history.js +0 -0
- data/{vendor → app}/assets/javascripts/mercury/table_editor.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/toolbar.button.js.coffee +8 -8
- data/{vendor → app}/assets/javascripts/mercury/toolbar.button_group.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/toolbar.expander.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/toolbar.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/tooltip.js.coffee +0 -0
- data/{vendor → app}/assets/javascripts/mercury/uploader.js.coffee +35 -17
- data/{vendor → app}/assets/javascripts/mercury_loader.js +0 -0
- data/{vendor → app}/assets/javascripts/mercury_overrides.js +0 -0
- data/{vendor → app}/assets/stylesheets/mercury.css +0 -0
- data/{vendor → app}/assets/stylesheets/mercury/all_images.css.erb +0 -0
- data/app/assets/stylesheets/mercury/buttons.css +73 -0
- data/{vendor → app}/assets/stylesheets/mercury/dialog.css +13 -4
- data/app/assets/stylesheets/mercury/form.css +125 -0
- data/{vendor → app}/assets/stylesheets/mercury/lightview.css +0 -0
- data/app/assets/stylesheets/mercury/mercury.css +45 -0
- data/{vendor → app}/assets/stylesheets/mercury/modal.css +1 -1
- data/{vendor → app}/assets/stylesheets/mercury/statusbar.css +0 -0
- data/{vendor → app}/assets/stylesheets/mercury/toolbar.css +0 -0
- data/{vendor → app}/assets/stylesheets/mercury/tooltip.css +0 -0
- data/{vendor → app}/assets/stylesheets/mercury/uploader.css +0 -0
- data/{vendor → app}/assets/stylesheets/mercury_overrides.css +0 -0
- data/app/views/mercury/modals/character.html +1 -1
- data/app/views/mercury/modals/htmleditor.html +1 -1
- data/app/views/mercury/modals/link.html +1 -1
- data/app/views/mercury/modals/media.html +1 -1
- data/app/views/mercury/modals/table.html +1 -1
- data/app/views/mercury/snippets/example/options.html.erb +1 -1
- data/features/generators/authentication.feature +10 -0
- data/features/generators/images.feature +41 -0
- data/features/generators/install.feature +21 -0
- data/features/loading/loading.feature +4 -1
- data/features/loading/user_interface.feature +9 -7
- data/features/regions/editable/basic_editing.feature +27 -26
- data/features/regions/editable/inserting_links.feature +8 -7
- data/features/regions/editable/inserting_snippets.feature +7 -7
- data/features/regions/image/uploading_images.feature +0 -0
- data/features/regions/simple/basic_editing.feature +5 -0
- data/features/step_definitions/generator_steps.rb +27 -0
- data/features/step_definitions/mercury_steps.rb +1 -0
- data/features/support/aruba.rb +28 -0
- data/features/support/env.rb +12 -2
- data/features/support/mercury_contents.rb +2 -2
- data/lib/generators/mercury/install/authentication/authentication_generator.rb +15 -0
- data/lib/generators/mercury/install/images/images_generator.rb +44 -0
- data/{app/models/mercury/image.rb → lib/generators/mercury/install/images/templates/ar_paperclip_image.rb} +3 -1
- data/{db/migrate/20110526035601_create_mercury_images.rb → lib/generators/mercury/install/images/templates/ar_paperclip_image_migration.rb} +0 -0
- data/{app/controllers/mercury → lib/generators/mercury/install/images/templates}/images_controller.rb +0 -0
- data/lib/generators/mercury/install/{templates → images/templates}/mongoid_paperclip_image.rb +0 -0
- data/lib/generators/mercury/install/install_generator.rb +3 -20
- data/lib/mercury-rails.rb +1 -2
- data/lib/mercury/authentication.rb +1 -0
- data/lib/mercury/engine.rb +17 -0
- data/lib/mercury/rails.rb +4 -0
- data/lib/mercury/version.rb +3 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +57 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.example.yml +25 -0
- data/spec/dummy/config/database.travisci.yml +4 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +67 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/evergreen.rb +47 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +5 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/blank.html +1 -0
- data/spec/dummy/public/canvastest.html +103 -0
- data/spec/dummy/public/distro.html +349 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/frame.html +15 -0
- data/spec/dummy/public/images/bunny.gif +0 -0
- data/spec/dummy/public/images/bunny2.jpg +0 -0
- data/spec/dummy/public/index.html +392 -0
- data/spec/dummy/public/prototype.js +6082 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/javascripts/mercury/page_editor_spec.js.coffee +55 -16
- data/spec/javascripts/mercury/panel_spec.js.coffee +2 -4
- data/spec/javascripts/mercury/regions/image_spec.js.coffee +34 -0
- data/spec/javascripts/mercury/regions/simple_spec.js.coffee +33 -0
- data/spec/javascripts/mercury/regions/snippetable_spec.js.coffee +1 -1
- data/spec/javascripts/mercury/snippet_spec.js.coffee +27 -2
- data/spec/javascripts/mercury/snippet_toolbar_spec.js.coffee +20 -4
- data/spec/javascripts/mercury/toolbar.button_spec.js.coffee +30 -0
- data/spec/javascripts/mercury/uploader_spec.js.coffee +16 -0
- data/spec/javascripts/templates/mercury/regions/image.html +1 -0
- data/spec/javascripts/templates/mercury/regions/simple.html +3 -0
- metadata +310 -158
- data/config/engine.rb +0 -41
- data/vendor/assets/images/mercury/default-snippet.png +0 -0
- data/vendor/assets/images/mercury/toolbar/editable/buttons.png +0 -0
- data/vendor/assets/images/mercury/toolbar/primary/_expander.png +0 -0
- data/vendor/assets/images/mercury/toolbar/primary/_pressed.png +0 -0
- data/vendor/assets/images/mercury/toolbar/primary/historypanel.png +0 -0
- data/vendor/assets/images/mercury/toolbar/primary/insertcharacter.png +0 -0
- data/vendor/assets/images/mercury/toolbar/primary/insertlink.png +0 -0
- data/vendor/assets/images/mercury/toolbar/primary/insertmedia.png +0 -0
- data/vendor/assets/images/mercury/toolbar/primary/inserttable.png +0 -0
- data/vendor/assets/images/mercury/toolbar/primary/inspectorpanel.png +0 -0
- data/vendor/assets/images/mercury/toolbar/primary/notespanel.png +0 -0
- data/vendor/assets/images/mercury/toolbar/primary/preview.png +0 -0
- data/vendor/assets/images/mercury/toolbar/primary/redo.png +0 -0
- data/vendor/assets/images/mercury/toolbar/primary/save.png +0 -0
- data/vendor/assets/images/mercury/toolbar/primary/snippetpanel.png +0 -0
- data/vendor/assets/images/mercury/toolbar/primary/undo.png +0 -0
- data/vendor/assets/images/mercury/toolbar/snippetable/buttons.png +0 -0
- data/vendor/assets/stylesheets/mercury/mercury.css +0 -151
@@ -0,0 +1,6 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
|
+
|
4
|
+
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
5
|
+
require File.expand_path('../../config/boot', __FILE__)
|
6
|
+
require 'rails/commands'
|
@@ -4,6 +4,7 @@ describe "Mercury.PageEditor", ->
|
|
4
4
|
|
5
5
|
beforeEach ->
|
6
6
|
Mercury.config.regions.className = 'custom-region-class'
|
7
|
+
Date.prototype.getTime = -> 1234
|
7
8
|
|
8
9
|
afterEach ->
|
9
10
|
@pageEditor = null
|
@@ -36,9 +37,9 @@ describe "Mercury.PageEditor", ->
|
|
36
37
|
expect(window.mercuryInstance).toEqual(@pageEditor)
|
37
38
|
|
38
39
|
it "accepts a saveUrl, and options", ->
|
39
|
-
@pageEditor = new Mercury.PageEditor('/foo/1', {foo: 'bar'})
|
40
|
+
@pageEditor = new Mercury.PageEditor('/foo/1', {foo: 'bar', saveDataType: 'text'})
|
40
41
|
expect(@pageEditor.saveUrl).toEqual('/foo/1')
|
41
|
-
expect(@pageEditor.options).toEqual({foo: 'bar', visible: true})
|
42
|
+
expect(@pageEditor.options).toEqual({foo: 'bar', saveDataType: 'text', visible: true})
|
42
43
|
|
43
44
|
it "sets the visible option to true unless it's set", ->
|
44
45
|
@pageEditor = new Mercury.PageEditor('/foo/1', {foo: 'bar', visible: false})
|
@@ -96,6 +97,16 @@ describe "Mercury.PageEditor", ->
|
|
96
97
|
@pageEditor = new Mercury.PageEditor('', {appendTo: $('#test')})
|
97
98
|
expect(@resizeSpy.callCount).toEqual(1)
|
98
99
|
|
100
|
+
it "binds to iframe load event", ->
|
101
|
+
initializeFrameSpy = spyOn(Mercury.PageEditor.prototype, 'initializeFrame')
|
102
|
+
bindEventsSpy = spyOn(Mercury.PageEditor.prototype, 'bindEvents')
|
103
|
+
|
104
|
+
@pageEditor = new Mercury.PageEditor('', {appendTo: $('#test')})
|
105
|
+
@pageEditor.iframe.trigger('load')
|
106
|
+
|
107
|
+
expect(initializeFrameSpy.callCount).toEqual(1)
|
108
|
+
expect(bindEventsSpy.callCount).toEqual(1)
|
109
|
+
|
99
110
|
|
100
111
|
describe "#initializeFrame", ->
|
101
112
|
|
@@ -139,11 +150,6 @@ describe "Mercury.PageEditor", ->
|
|
139
150
|
@pageEditor.initializeFrame()
|
140
151
|
expect(@pageEditor.iframe.get(0).contentWindow.History).toEqual(window.History)
|
141
152
|
|
142
|
-
it "calls bindEvents", ->
|
143
|
-
@finalizeInterfaceSpy.andCallFake(=>)
|
144
|
-
@pageEditor.initializeFrame()
|
145
|
-
expect(@bindEventsSpy.callCount).toEqual(1)
|
146
|
-
|
147
153
|
it "calls resize", ->
|
148
154
|
@finalizeInterfaceSpy.andCallFake(=>)
|
149
155
|
@pageEditor.initializeFrame()
|
@@ -325,6 +331,7 @@ describe "Mercury.PageEditor", ->
|
|
325
331
|
@pageEditor = new Mercury.PageEditor('', {appendTo: $('#test')})
|
326
332
|
@pageEditor.document = $(document)
|
327
333
|
@pageEditor.bindEvents()
|
334
|
+
@pageEditor.bindDocumentEvents()
|
328
335
|
|
329
336
|
describe "custom event: initialize:frame", ->
|
330
337
|
|
@@ -537,8 +544,33 @@ describe "Mercury.PageEditor", ->
|
|
537
544
|
Mercury.config.editorUrlRegEx = original
|
538
545
|
|
539
546
|
it "adds query params", ->
|
540
|
-
expect(@pageEditor.iframeSrc('http://foo.com/editor/path', true)).toEqual('http://foo.com/path?mercury_frame=true')
|
541
|
-
expect(@pageEditor.iframeSrc('http://foo.com/editor/path?something=true', true)).toEqual('http://foo.com/path?something=true&mercury_frame=true')
|
547
|
+
expect(@pageEditor.iframeSrc('http://foo.com/editor/path', true)).toEqual('http://foo.com/path?mercury_frame=true&_=1234')
|
548
|
+
expect(@pageEditor.iframeSrc('http://foo.com/editor/path?something=true', true)).toEqual('http://foo.com/path?something=true&mercury_frame=true&_=1234')
|
549
|
+
|
550
|
+
|
551
|
+
describe "#loadIframeSrc", ->
|
552
|
+
|
553
|
+
beforeEach ->
|
554
|
+
Mercury.PageEditor.prototype.initializeFrame = ->
|
555
|
+
@pageEditor = new Mercury.PageEditor('', {appendTo: $('#test')})
|
556
|
+
|
557
|
+
it 'unbinds events to @document', ->
|
558
|
+
@pageEditor.document = {off: ->}
|
559
|
+
documentSpy = spyOn(@pageEditor.document, 'off')
|
560
|
+
@pageEditor.loadIframeSrc()
|
561
|
+
expect(documentSpy).toHaveBeenCalled()
|
562
|
+
|
563
|
+
it 'resets the iframe loaded data attribute', ->
|
564
|
+
@pageEditor.iframe.data('loaded', true)
|
565
|
+
@pageEditor.loadIframeSrc()
|
566
|
+
expect(@pageEditor.iframe.data('loaded')).toEqual(false)
|
567
|
+
|
568
|
+
it 'sets the iframe source', ->
|
569
|
+
iframe = {contentWindow: {document: {location: {}}}}
|
570
|
+
@pageEditor.iframe = {data: (->), get: -> iframe}
|
571
|
+
@pageEditor.loadIframeSrc('boo')
|
572
|
+
expect(iframe.contentWindow.document.location.href).toEqual('boo?mercury_frame=true&_=1234')
|
573
|
+
|
542
574
|
|
543
575
|
|
544
576
|
describe "#hijackLinksAndForms", ->
|
@@ -650,12 +682,12 @@ describe "Mercury.PageEditor", ->
|
|
650
682
|
expect(@ajaxSpy.argsForCall[0][0]).toEqual('/foo/bar')
|
651
683
|
|
652
684
|
@pageEditor.saveUrl = null
|
653
|
-
Mercury.
|
685
|
+
Mercury.saveUrl = '/foo/bit'
|
654
686
|
@pageEditor.save()
|
655
687
|
expect(@ajaxSpy.argsForCall[1][0]).toEqual('/foo/bit')
|
656
688
|
|
657
689
|
@pageEditor.saveUrl = null
|
658
|
-
Mercury.
|
690
|
+
Mercury.saveUrl = null
|
659
691
|
@pageEditor.save()
|
660
692
|
expect(@ajaxSpy.argsForCall[2][0]).toEqual('/foo/baz')
|
661
693
|
|
@@ -711,14 +743,21 @@ describe "Mercury.PageEditor", ->
|
|
711
743
|
describe "on failed ajax request", ->
|
712
744
|
|
713
745
|
beforeEach ->
|
714
|
-
@ajaxSpy.andCallFake((url, options) => options.error() )
|
746
|
+
@ajaxSpy.andCallFake((url, options) => options.error({'response': 'object'}) )
|
747
|
+
|
748
|
+
it "alerts and triggers save_failed with the url", ->
|
749
|
+
alert_spy = spyOn(window, 'alert').andCallFake(=>)
|
750
|
+
trigger_spy = spyOn(Mercury, 'trigger').andCallFake(=>)
|
715
751
|
|
716
|
-
it "alerts with the url", ->
|
717
|
-
spy = spyOn(window, 'alert').andCallFake(=>)
|
718
752
|
@pageEditor.saveUrl = '/foo/bar'
|
719
753
|
@pageEditor.save()
|
720
|
-
|
721
|
-
expect(
|
754
|
+
|
755
|
+
expect(alert_spy.callCount).toEqual(1)
|
756
|
+
expect(alert_spy.argsForCall[0]).toEqual(['Mercury was unable to save to the url: /foo/bar'])
|
757
|
+
|
758
|
+
expect(trigger_spy.callCount).toEqual(1)
|
759
|
+
expect(trigger_spy.argsForCall[0][0]).toEqual('save_failed')
|
760
|
+
expect(trigger_spy.argsForCall[0][1]).toBeDefined()
|
722
761
|
|
723
762
|
describe "PUT", ->
|
724
763
|
|
@@ -22,7 +22,7 @@ describe "Mercury.Panel", ->
|
|
22
22
|
html = $('<div>').html(@panel.element).html()
|
23
23
|
expect(html).toContain('class="mercury-panel loading"')
|
24
24
|
expect(html).toContain('style="display:none;"')
|
25
|
-
expect(html).toContain('<h1>foo panel</h1><div class="mercury-panel-pane"></div>')
|
25
|
+
expect(html).toContain('<h1><span>foo panel</span></h1><div class="mercury-panel-pane"></div>')
|
26
26
|
expect(html).not.toContain('class="mercury-panel-close"')
|
27
27
|
|
28
28
|
it "appends to any element", ->
|
@@ -159,16 +159,14 @@ describe "Mercury.Panel", ->
|
|
159
159
|
it "sets the element html to be the data passed to it", ->
|
160
160
|
@panel.loadContent('<span>hello world!</span>')
|
161
161
|
html = @panel.element.html()
|
162
|
-
expect(html).toContain('<h1>foo panel</h1>')
|
163
162
|
expect(html).toContain('class="mercury-panel-pane"')
|
164
163
|
expect(html).toContain('style="visibility: hidden;')
|
165
164
|
expect(html).toContain('hello world!')
|
166
165
|
|
167
|
-
it "sets the element html to be the data passed to it", ->
|
166
|
+
it "sets the element html to be the data passed to it -- translated", ->
|
168
167
|
Mercury.config.localization.enabled = true
|
169
168
|
@panel.loadContent('<span>hello world!</span>')
|
170
169
|
html = @panel.element.html()
|
171
|
-
expect(html).toContain('<h1>foo panel</h1>')
|
172
170
|
expect(html).toContain('class="mercury-panel-pane"')
|
173
171
|
expect(html).toContain('style="visibility: hidden;')
|
174
172
|
expect(html).toContain('bork! bork!')
|
@@ -0,0 +1,34 @@
|
|
1
|
+
describe "Mercury.Regions.Image", ->
|
2
|
+
|
3
|
+
template 'mercury/regions/image.html'
|
4
|
+
|
5
|
+
beforeEach ->
|
6
|
+
@regionElement = $('#editable_region1')
|
7
|
+
|
8
|
+
describe "constructor", ->
|
9
|
+
|
10
|
+
beforeEach ->
|
11
|
+
@buildSpy = spyOn(Mercury.Regions.Image.prototype, 'build').andCallFake(=>)
|
12
|
+
@bindEventsSpy = spyOn(Mercury.Regions.Image.prototype, 'bindEvents').andCallFake(=>)
|
13
|
+
|
14
|
+
it "expects an element and window", ->
|
15
|
+
@region = new Mercury.Regions.Image(@regionElement, window)
|
16
|
+
expect(@region.element.get(0)).toEqual($('#editable_region1').get(0))
|
17
|
+
expect(@region.window).toEqual(window)
|
18
|
+
|
19
|
+
it "accepts options", ->
|
20
|
+
@region = new Mercury.Regions.Image(@regionElement, window, {foo: 'something'})
|
21
|
+
expect(@region.options).toEqual({foo: 'something'})
|
22
|
+
|
23
|
+
it "sets it's type", ->
|
24
|
+
@region = new Mercury.Regions.Image(@regionElement, window)
|
25
|
+
expect(@region.type).toEqual('image')
|
26
|
+
|
27
|
+
it "calls build", ->
|
28
|
+
@region = new Mercury.Regions.Image(@regionElement, window)
|
29
|
+
expect(@buildSpy.callCount).toEqual(1)
|
30
|
+
|
31
|
+
it "calls bindEvents", ->
|
32
|
+
@region = new Mercury.Regions.Image(@regionElement, window)
|
33
|
+
expect(@bindEventsSpy.callCount).toEqual(1)
|
34
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
describe "Mercury.Regions.Simple", ->
|
2
|
+
|
3
|
+
template 'mercury/regions/simple.html'
|
4
|
+
|
5
|
+
beforeEach ->
|
6
|
+
@regionElement = $('#editable_region1')
|
7
|
+
|
8
|
+
describe "constructor", ->
|
9
|
+
|
10
|
+
beforeEach ->
|
11
|
+
@buildSpy = spyOn(Mercury.Regions.Simple.prototype, 'build').andCallFake(=>)
|
12
|
+
@bindEventsSpy = spyOn(Mercury.Regions.Simple.prototype, 'bindEvents').andCallFake(=>)
|
13
|
+
|
14
|
+
it "expects an element and window", ->
|
15
|
+
@region = new Mercury.Regions.Simple(@regionElement, window)
|
16
|
+
expect(@region.element.get(0)).toEqual($('#editable_region1').get(0))
|
17
|
+
expect(@region.window).toEqual(window)
|
18
|
+
|
19
|
+
it "accepts options", ->
|
20
|
+
@region = new Mercury.Regions.Simple(@regionElement, window, {foo: 'something'})
|
21
|
+
expect(@region.options).toEqual({foo: 'something'})
|
22
|
+
|
23
|
+
it "sets it's type", ->
|
24
|
+
@region = new Mercury.Regions.Simple(@regionElement, window)
|
25
|
+
expect(@region.type).toEqual('simple')
|
26
|
+
|
27
|
+
it "calls build", ->
|
28
|
+
@region = new Mercury.Regions.Simple(@regionElement, window)
|
29
|
+
expect(@buildSpy.callCount).toEqual(1)
|
30
|
+
|
31
|
+
it "calls bindEvents", ->
|
32
|
+
@region = new Mercury.Regions.Simple(@regionElement, window)
|
33
|
+
expect(@bindEventsSpy.callCount).toEqual(1)
|
@@ -312,7 +312,7 @@ describe "Mercury.Regions.Snippetable.actions", ->
|
|
312
312
|
|
313
313
|
it "finds the snippet by it's identity and replaces it with the new snippet", ->
|
314
314
|
@actions['insertSnippet'].call(@region, {value: Mercury.Snippet.find('snippet_1')})
|
315
|
-
expect($('#snippetable_region2').html()).toContain('class="mercury-snippet"')
|
315
|
+
expect($('#snippetable_region2').html()).toContain('class="mercury-snippet example-snippet"')
|
316
316
|
expect($('#snippetable_region2').html()).toContain('contenteditable="false"')
|
317
317
|
expect($('#snippetable_region2').html()).toContain('data-version="1"')
|
318
318
|
expect($('#snippetable_region2').html()).toContain('data-snippet="snippet_1"')
|
@@ -35,7 +35,7 @@ describe "Mercury.Snippet", ->
|
|
35
35
|
it "builds an element (in whatever context is provided", ->
|
36
36
|
ret = @snippet.getHTML($(document))
|
37
37
|
html = $('<div>').html(ret).html()
|
38
|
-
expect(html).toContain('class="mercury-snippet"')
|
38
|
+
expect(html).toContain('class="mercury-snippet foo-snippet"')
|
39
39
|
expect(html).toContain('contenteditable="false"')
|
40
40
|
expect(html).toContain('data-snippet="identity"')
|
41
41
|
expect(html).toContain('data-version="1"')
|
@@ -53,6 +53,13 @@ describe "Mercury.Snippet", ->
|
|
53
53
|
@snippet.getHTML($(document), callback)
|
54
54
|
expect(@loadPreviewSpy.argsForCall[0][1]).toEqual(callback)
|
55
55
|
|
56
|
+
it "wraps the snippet in the specified wrapperTag", ->
|
57
|
+
@snippet.wrapperTag = 'li'
|
58
|
+
ret = @snippet.getHTML($(document))
|
59
|
+
container = $('<div>')
|
60
|
+
container.html(ret)
|
61
|
+
expect($(container.children()[0]).is('li')).toEqual(true)
|
62
|
+
|
56
63
|
|
57
64
|
describe "#getText", ->
|
58
65
|
|
@@ -142,6 +149,11 @@ describe "Mercury.Snippet", ->
|
|
142
149
|
@snippet.setOptions({foo: 'baz'})
|
143
150
|
expect(@snippet.history.stack.length).toEqual(2)
|
144
151
|
|
152
|
+
it "can set the wrapperTag attribute from options", ->
|
153
|
+
expect(@snippet.wrapperTag).toEqual('div')
|
154
|
+
@snippet.setOptions({wrapperTag: 'li'})
|
155
|
+
expect(@snippet.wrapperTag).toEqual('li')
|
156
|
+
|
145
157
|
|
146
158
|
describe "#setVersion", ->
|
147
159
|
|
@@ -201,6 +213,11 @@ describe "Mercury.Snippet class methods", ->
|
|
201
213
|
Mercury.Snippet.displayOptionsFor('foo')
|
202
214
|
expect(Mercury.snippet).toEqual(null)
|
203
215
|
|
216
|
+
it "can pass options to the modal", ->
|
217
|
+
Mercury.Snippet.displayOptionsFor('foo', {option1: 'option1'})
|
218
|
+
expect(@modalSpy.callCount).toEqual(1)
|
219
|
+
expect(@modalSpy.argsForCall[0]).toEqual(["/mercury/snippets/foo/options.html", {title: 'Snippet Options', handler: 'insertSnippet', snippetName: 'foo', option1: 'option1'}])
|
220
|
+
|
204
221
|
|
205
222
|
describe ".create", ->
|
206
223
|
|
@@ -218,7 +235,15 @@ describe "Mercury.Snippet class methods", ->
|
|
218
235
|
it "pushes into the collection array", ->
|
219
236
|
Mercury.Snippet.create('foo', {foo: 'bar'})
|
220
237
|
expect(Mercury.Snippet.all.length).toEqual(1)
|
221
|
-
|
238
|
+
|
239
|
+
describe "when an snuppet exist with an identical identity", ->
|
240
|
+
it "generates a unique identity", ->
|
241
|
+
Mercury.Snippet.load
|
242
|
+
snippet_1: {name: 'foo', options: {foo: 'bar'}}
|
243
|
+
snippet_2: {name: 'bar', options: {baz: 'pizza'}}
|
244
|
+
|
245
|
+
ret = Mercury.Snippet.create('noobie', {noobie: 'one'})
|
246
|
+
expect(ret.identity).toEqual('snippet_0')
|
222
247
|
|
223
248
|
describe ".find", ->
|
224
249
|
|
@@ -82,6 +82,19 @@ describe "Mercury.SnippetToolbar", ->
|
|
82
82
|
jasmine.simulate.mouseout($('#test .mercury-snippet-toolbar').get(0))
|
83
83
|
expect(spy.callCount).toEqual(1)
|
84
84
|
|
85
|
+
describe "releasing events", ->
|
86
|
+
|
87
|
+
it 'makes the following events releasable', ->
|
88
|
+
events = (eventName for [target, eventName, handler] in @snippetToolbar._boundEvents)
|
89
|
+
expect(events).toEqual(['show:toolbar', 'hide:toolbar', 'scroll'])
|
90
|
+
|
91
|
+
it 'calls off to unbind the events on release', ->
|
92
|
+
targets = (target for [target, eventName, handler] in @snippetToolbar._boundEvents)
|
93
|
+
# we bind to Mercury twice so pop the first one off for spying
|
94
|
+
targets.shift()
|
95
|
+
spys = (spyOn(target, 'off') for target in targets)
|
96
|
+
@snippetToolbar.release()
|
97
|
+
expect(spy).toHaveBeenCalled() for spy in spys
|
85
98
|
|
86
99
|
describe "#show", ->
|
87
100
|
|
@@ -113,10 +126,10 @@ describe "Mercury.SnippetToolbar", ->
|
|
113
126
|
it "positions itself based on the snippet", ->
|
114
127
|
@snippetToolbar.element.show()
|
115
128
|
@snippetToolbar.position()
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
129
|
+
# use a tolerance since there are measurement differences between browsers we want it between 14-18
|
130
|
+
expect(@snippetToolbar.element.offset().top).toBeLessThan(19)
|
131
|
+
expect(@snippetToolbar.element.offset().top).toBeGreaterThan(13)
|
132
|
+
expect(@snippetToolbar.element.offset().left).toEqual(200)
|
120
133
|
|
121
134
|
|
122
135
|
describe "#appear", ->
|
@@ -143,6 +156,8 @@ describe "Mercury.SnippetToolbar", ->
|
|
143
156
|
beforeEach ->
|
144
157
|
@snippetToolbar = new Mercury.SnippetToolbar($('document'), {appendTo: '#test'})
|
145
158
|
|
159
|
+
afterEach -> @snippetToolbar.release()
|
160
|
+
|
146
161
|
it "it clears the hide timeout", ->
|
147
162
|
spy = spyOn(window, 'clearTimeout').andCallFake(=>)
|
148
163
|
@snippetToolbar.hide()
|
@@ -182,3 +197,4 @@ describe "Mercury.SnippetToolbar", ->
|
|
182
197
|
@setTimeoutSpy.andCallFake((timeout, callback) => callback())
|
183
198
|
@snippetToolbar.hide()
|
184
199
|
expect(@snippetToolbar.visible).toEqual(false)
|
200
|
+
|
@@ -87,6 +87,22 @@ describe "Mercury.Toolbar.Button", ->
|
|
87
87
|
jasmine.simulate.click(@button.get(0))
|
88
88
|
expect(@button.hasClass('pressed')).toEqual(false)
|
89
89
|
|
90
|
+
it "builds a panel button with a custom panel object", ->
|
91
|
+
namespace = {}
|
92
|
+
namespace.customPanel = ->
|
93
|
+
namespace.customPanel::toggle = ->
|
94
|
+
'toggled'
|
95
|
+
handler = (name)->
|
96
|
+
new namespace.customPanel()
|
97
|
+
|
98
|
+
constructorSpy = spyOn(namespace, 'customPanel').andCallThrough()
|
99
|
+
panelSpy = spyOn(Mercury, 'Panel')
|
100
|
+
|
101
|
+
@button = new Mercury.Toolbar.Button('customFoo', 'title', 'summary', {panel: handler}, {appendDialogsTo: $('#test')})
|
102
|
+
expect(constructorSpy).toHaveBeenCalled()
|
103
|
+
expect(panelSpy).wasNotCalled()
|
104
|
+
|
105
|
+
|
90
106
|
it "builds palette buttons", ->
|
91
107
|
@button = new Mercury.Toolbar.Button('foo', 'title', 'summary', {palette: '/blank.html'}, {appendDialogsTo: $('#test')})
|
92
108
|
expect($('#test .mercury-palette').length).toEqual(1)
|
@@ -268,6 +284,20 @@ describe "Mercury.Toolbar.Button", ->
|
|
268
284
|
jasmine.simulate.click(@button.get(0))
|
269
285
|
expect(spy.callCount).toEqual(2)
|
270
286
|
|
287
|
+
it "shows and hides the custom panel", ->
|
288
|
+
namespace = {}
|
289
|
+
namespace.customPanel = ->
|
290
|
+
namespace.customPanel::toggle = ->
|
291
|
+
'toggled'
|
292
|
+
handler = (name)->
|
293
|
+
new namespace.customPanel()
|
294
|
+
|
295
|
+
toggleSpy = spyOn(namespace.customPanel.prototype, 'toggle')
|
296
|
+
@button = new Mercury.Toolbar.Button('foo', 'title', 'summary', {panel: handler}, {appendDialogsTo: $('#test')})
|
297
|
+
|
298
|
+
jasmine.simulate.click(@button.get(0))
|
299
|
+
expect(toggleSpy).toHaveBeenCalled()
|
300
|
+
|
271
301
|
|
272
302
|
describe "Mercury.Toolbar.Button.contexts", ->
|
273
303
|
|
@@ -4,6 +4,8 @@ describe "Mercury.uploader", ->
|
|
4
4
|
|
5
5
|
beforeEach ->
|
6
6
|
Mercury.config.uploading.enabled = true
|
7
|
+
@fileReaderSupport = spyOn(Mercury.uploader, 'fileReaderSupported')
|
8
|
+
@fileReaderSupport.andCallFake(=> true)
|
7
9
|
$.fx.off = true
|
8
10
|
@mockFile = {
|
9
11
|
size: 1024
|
@@ -220,6 +222,7 @@ describe "Mercury.uploader", ->
|
|
220
222
|
Mercury.uploader.file = new Mercury.uploader.File(@mockFile)
|
221
223
|
Mercury.uploader.build()
|
222
224
|
spyOn(FileReader.prototype, 'readAsBinaryString').andCallFake(=>)
|
225
|
+
@fileReaderSupport.andCallFake(=> true)
|
223
226
|
@readAsDataURLSpy = spyOn(Mercury.uploader.File.prototype, 'readAsDataURL').andCallFake((callback) => callback('data-url'))
|
224
227
|
|
225
228
|
it "calls file.readAsDataURL", ->
|
@@ -235,6 +238,19 @@ describe "Mercury.uploader", ->
|
|
235
238
|
Mercury.uploader.loadImage()
|
236
239
|
expect(spy.callCount).toEqual(1)
|
237
240
|
|
241
|
+
describe "#loadImage without FileReader", ->
|
242
|
+
|
243
|
+
beforeEach ->
|
244
|
+
Mercury.uploader.options = {appendTo: '#test'}
|
245
|
+
Mercury.uploader.file = new Mercury.uploader.File(@mockFile)
|
246
|
+
Mercury.uploader.build()
|
247
|
+
@fileReaderSupport.andCallFake(=> false)
|
248
|
+
|
249
|
+
it "calls upload", ->
|
250
|
+
spy = spyOn(Mercury.uploader, 'upload').andCallFake(=>)
|
251
|
+
Mercury.uploader.loadImage()
|
252
|
+
expect(spy.callCount).toEqual(1)
|
253
|
+
|
238
254
|
|
239
255
|
describe "#upload", ->
|
240
256
|
|
@@ -0,0 +1 @@
|
|
1
|
+
<img id="editable_region1" src="foo.jpg" />
|