mercury-rails 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. data/LICENSE +20 -0
  2. data/README.rdoc +152 -0
  3. data/VERSION +1 -0
  4. data/app/assets/images/mercury/button.png +0 -0
  5. data/app/assets/images/mercury/clippy.png +0 -0
  6. data/app/assets/images/mercury/default-snippet.png +0 -0
  7. data/app/assets/images/mercury/loading-dark.gif +0 -0
  8. data/app/assets/images/mercury/loading-light.gif +0 -0
  9. data/app/assets/images/mercury/search-icon.png +0 -0
  10. data/app/assets/images/mercury/toolbar/editable/buttons.png +0 -0
  11. data/app/assets/images/mercury/toolbar/markupable/buttons.png +0 -0
  12. data/app/assets/images/mercury/toolbar/primary/_expander.png +0 -0
  13. data/app/assets/images/mercury/toolbar/primary/_pressed.png +0 -0
  14. data/app/assets/images/mercury/toolbar/primary/historypanel.png +0 -0
  15. data/app/assets/images/mercury/toolbar/primary/insertcharacter.png +0 -0
  16. data/app/assets/images/mercury/toolbar/primary/insertlink.png +0 -0
  17. data/app/assets/images/mercury/toolbar/primary/insertmedia.png +0 -0
  18. data/app/assets/images/mercury/toolbar/primary/inserttable.png +0 -0
  19. data/app/assets/images/mercury/toolbar/primary/inspectorpanel.png +0 -0
  20. data/app/assets/images/mercury/toolbar/primary/notespanel.png +0 -0
  21. data/app/assets/images/mercury/toolbar/primary/objectspanel.png +0 -0
  22. data/app/assets/images/mercury/toolbar/primary/preview.png +0 -0
  23. data/app/assets/images/mercury/toolbar/primary/redo.png +0 -0
  24. data/app/assets/images/mercury/toolbar/primary/save.png +0 -0
  25. data/app/assets/images/mercury/toolbar/primary/todospanel.png +0 -0
  26. data/app/assets/images/mercury/toolbar/primary/undo.png +0 -0
  27. data/app/assets/images/mercury/toolbar/snippetable/buttons.png +0 -0
  28. data/app/assets/javascripts/mercury.js +30 -0
  29. data/app/assets/javascripts/mercury/dialog.js.coffee +75 -0
  30. data/app/assets/javascripts/mercury/dialogs/backcolor.js.coffee +6 -0
  31. data/app/assets/javascripts/mercury/dialogs/forecolor.js.coffee +6 -0
  32. data/app/assets/javascripts/mercury/dialogs/formatblock.js.coffee +4 -0
  33. data/app/assets/javascripts/mercury/dialogs/objectspanel.js.coffee +10 -0
  34. data/app/assets/javascripts/mercury/dialogs/style.js.coffee +4 -0
  35. data/app/assets/javascripts/mercury/history_buffer.js.coffee +30 -0
  36. data/app/assets/javascripts/mercury/mercury.js.coffee +293 -0
  37. data/app/assets/javascripts/mercury/modal.js.coffee +177 -0
  38. data/app/assets/javascripts/mercury/modals/htmleditor.js.coffee +10 -0
  39. data/app/assets/javascripts/mercury/modals/insertcharacter.js.coffee +4 -0
  40. data/app/assets/javascripts/mercury/modals/insertlink.js.coffee +92 -0
  41. data/app/assets/javascripts/mercury/modals/insertmedia.js.coffee +72 -0
  42. data/app/assets/javascripts/mercury/modals/insertsnippet.js.coffee +11 -0
  43. data/app/assets/javascripts/mercury/modals/inserttable.js.coffee +56 -0
  44. data/app/assets/javascripts/mercury/native_extensions.js.coffee +47 -0
  45. data/app/assets/javascripts/mercury/page_editor.js.coffee +139 -0
  46. data/app/assets/javascripts/mercury/palette.js.coffee +29 -0
  47. data/app/assets/javascripts/mercury/panel.js.coffee +97 -0
  48. data/app/assets/javascripts/mercury/region.js.coffee +103 -0
  49. data/app/assets/javascripts/mercury/regions/editable.js.coffee +546 -0
  50. data/app/assets/javascripts/mercury/regions/markupable.js.coffee +380 -0
  51. data/app/assets/javascripts/mercury/regions/snippetable.js.coffee +127 -0
  52. data/app/assets/javascripts/mercury/select.js.coffee +40 -0
  53. data/app/assets/javascripts/mercury/snippet.js.coffee +92 -0
  54. data/app/assets/javascripts/mercury/snippet_toolbar.js.coffee +69 -0
  55. data/app/assets/javascripts/mercury/statusbar.js.coffee +25 -0
  56. data/app/assets/javascripts/mercury/table_editor.js.coffee +266 -0
  57. data/app/assets/javascripts/mercury/toolbar.button.js.coffee +152 -0
  58. data/app/assets/javascripts/mercury/toolbar.button_group.js.coffee +42 -0
  59. data/app/assets/javascripts/mercury/toolbar.expander.js.coffee +56 -0
  60. data/app/assets/javascripts/mercury/toolbar.js.coffee +72 -0
  61. data/app/assets/javascripts/mercury/tooltip.js.coffee +67 -0
  62. data/app/assets/javascripts/mercury/uploader.js.coffee +213 -0
  63. data/app/assets/javascripts/mercury/websocket.js.coffee +34 -0
  64. data/app/assets/stylesheets/mercury.css +31 -0
  65. data/app/assets/stylesheets/mercury/dialog.scss +178 -0
  66. data/app/assets/stylesheets/mercury/mercury.scss +119 -0
  67. data/app/assets/stylesheets/mercury/modal.scss +192 -0
  68. data/app/assets/stylesheets/mercury/statusbar.scss +23 -0
  69. data/app/assets/stylesheets/mercury/toolbar.scss +417 -0
  70. data/app/assets/stylesheets/mercury/tooltip.scss +26 -0
  71. data/app/assets/stylesheets/mercury/uploader.scss +109 -0
  72. data/app/controllers/images_controller.rb +19 -0
  73. data/app/controllers/mercury_controller.rb +20 -0
  74. data/app/models/image.rb +14 -0
  75. data/app/views/layouts/mercury.html.haml +12 -0
  76. data/app/views/mercury/modals/character.html.haml +252 -0
  77. data/app/views/mercury/modals/htmleditor.html.haml +8 -0
  78. data/app/views/mercury/modals/link.html.haml +31 -0
  79. data/app/views/mercury/modals/media.html.haml +33 -0
  80. data/app/views/mercury/modals/sanitizer.html.haml +4 -0
  81. data/app/views/mercury/modals/table.html.haml +49 -0
  82. data/app/views/mercury/palettes/backcolor.html.haml +79 -0
  83. data/app/views/mercury/palettes/forecolor.html.haml +79 -0
  84. data/app/views/mercury/panels/history.html.haml +0 -0
  85. data/app/views/mercury/panels/notes.html.haml +0 -0
  86. data/app/views/mercury/panels/snippets.html.haml +10 -0
  87. data/app/views/mercury/selects/formatblock.html.haml +10 -0
  88. data/app/views/mercury/selects/style.html.haml +4 -0
  89. data/app/views/mercury/snippets/example.html.haml +2 -0
  90. data/app/views/mercury/snippets/example_options.html.haml +16 -0
  91. data/config/engine.rb +6 -0
  92. data/config/routes.rb +15 -0
  93. data/db/migrate/20110526035601_create_images.rb +11 -0
  94. data/features/editing/basic.feature +11 -0
  95. data/features/step_definitions/debug_steps.rb +14 -0
  96. data/features/step_definitions/web_steps.rb +211 -0
  97. data/features/support/env.rb +46 -0
  98. data/features/support/paths.rb +35 -0
  99. data/features/support/selectors.rb +42 -0
  100. data/lib/mercury-rails.rb +4 -0
  101. data/log/.gitkeep +0 -0
  102. data/mercury-rails.gemspec +230 -0
  103. data/spec/javascripts/mercury/dialog_spec.js.coffee +258 -0
  104. data/spec/javascripts/mercury/history_buffer_spec.js.coffee +79 -0
  105. data/spec/javascripts/mercury/mercury_spec.js.coffee +52 -0
  106. data/spec/javascripts/mercury/native_extensions_spec.js.coffee +66 -0
  107. data/spec/javascripts/mercury/page_editor_spec.js.coffee +435 -0
  108. data/spec/javascripts/mercury/palette_spec.js.coffee +51 -0
  109. data/spec/javascripts/mercury/panel_spec.js.coffee +147 -0
  110. data/spec/javascripts/mercury/region_spec.js.coffee +261 -0
  111. data/spec/javascripts/mercury/regions/_editable_.js.coffee +0 -0
  112. data/spec/javascripts/mercury/regions/_markupable_.js.coffee +0 -0
  113. data/spec/javascripts/mercury/regions/snippetable_spec.js.coffee +368 -0
  114. data/spec/javascripts/mercury/select_spec.js.coffee +51 -0
  115. data/spec/javascripts/mercury/snippet_spec.js.coffee +246 -0
  116. data/spec/javascripts/mercury/snippet_toolbar_spec.js.coffee +186 -0
  117. data/spec/javascripts/mercury/statusbar_spec.js.coffee +78 -0
  118. data/spec/javascripts/mercury/table_editor_spec.js.coffee +192 -0
  119. data/spec/javascripts/mercury/toolbar.button_group_spec.js.coffee +92 -0
  120. data/spec/javascripts/mercury/toolbar.button_spec.js.coffee +341 -0
  121. data/spec/javascripts/mercury/toolbar.expander_spec.js.coffee +120 -0
  122. data/spec/javascripts/mercury/toolbar_spec.js.coffee +152 -0
  123. data/spec/javascripts/mercury/tooltip_spec.js.coffee +188 -0
  124. data/spec/javascripts/mercury/uploader_spec.js.coffee +512 -0
  125. data/spec/javascripts/responses/blank.html +1 -0
  126. data/spec/javascripts/spec_helper.js +513 -0
  127. data/spec/javascripts/templates/mercury/dialog.html +2 -0
  128. data/spec/javascripts/templates/mercury/page_editor.html +24 -0
  129. data/spec/javascripts/templates/mercury/palette.html +16 -0
  130. data/spec/javascripts/templates/mercury/panel.html +16 -0
  131. data/spec/javascripts/templates/mercury/region.html +2 -0
  132. data/spec/javascripts/templates/mercury/regions/snippetable.html +4 -0
  133. data/spec/javascripts/templates/mercury/select.html +16 -0
  134. data/spec/javascripts/templates/mercury/snippet.html +1 -0
  135. data/spec/javascripts/templates/mercury/snippet_toolbar.html +16 -0
  136. data/spec/javascripts/templates/mercury/statusbar.html +7 -0
  137. data/spec/javascripts/templates/mercury/table_editor.html +65 -0
  138. data/spec/javascripts/templates/mercury/toolbar.button.html +64 -0
  139. data/spec/javascripts/templates/mercury/toolbar.button_group.html +9 -0
  140. data/spec/javascripts/templates/mercury/toolbar.expander.html +18 -0
  141. data/spec/javascripts/templates/mercury/toolbar.html +10 -0
  142. data/spec/javascripts/templates/mercury/tooltip.html +12 -0
  143. data/spec/javascripts/templates/mercury/uploader.html +11 -0
  144. data/vendor/assets/javascripts/jquery-1.6.js +8865 -0
  145. data/vendor/assets/javascripts/jquery-ui-1.8.13.custom.min.js +249 -0
  146. data/vendor/assets/javascripts/jquery-ui-1.8.13.sortable.custom.js +1078 -0
  147. data/vendor/assets/javascripts/jquery.easing.js +173 -0
  148. data/vendor/assets/javascripts/jquery.json2.js +178 -0
  149. data/vendor/assets/javascripts/jquery.serialize_object.js +16 -0
  150. data/vendor/assets/javascripts/jquery.ujs.js +289 -0
  151. data/vendor/assets/javascripts/liquidmetal.js +88 -0
  152. data/vendor/assets/javascripts/showdown.js +1362 -0
  153. metadata +364 -0
@@ -0,0 +1,109 @@
1
+ /*
2
+ * Uploader
3
+ *----------------------------------------------------------------------------*/
4
+ .mercury-uploader-overlay {
5
+ position: absolute;
6
+ z-index: 10040;
7
+ top: 0;
8
+ left: 0;
9
+ width: 100%;
10
+ height: 100%;
11
+ opacity: .95;
12
+ /*display: none;*/
13
+ background: rgba(0,0,0, .65);
14
+ }
15
+ .mercury-uploader {
16
+ position: absolute;
17
+ z-index: 10050;
18
+ top: 300px;
19
+ left: 400px;
20
+ width: 500px;
21
+ height: 150px;
22
+ overflow: hidden;
23
+ padding: 15px;
24
+ background: rgba(0,0,0, .70);
25
+ border-radius: 10px;
26
+ -moz-border-radius: 10px;
27
+ font: normal normal normal 12px/normal Helvetica, Tahoma, Arial, sans-serif;
28
+ color: #CCC;
29
+ .mercury-uploader-preview {
30
+ float: left;
31
+ width: 150px;
32
+ height: 150px;
33
+ border: 1px solid #CCC;
34
+ border-radius: 5px;
35
+ -moz-border-radius: 5px;
36
+ b {
37
+ display: table-cell;
38
+ width: 150px;
39
+ height: 150px;
40
+ text-align: center;
41
+ vertical-align: middle;
42
+ }
43
+ img {
44
+ margin: 5px;
45
+ max-width: 140px;
46
+ max-height: 140px;
47
+ }
48
+ }
49
+ .mercury-uploader-details {
50
+ width: 333px;
51
+ overflow: hidden;
52
+ float: left;
53
+ padding-left: 15px;
54
+ span {
55
+ color: #F00;
56
+ }
57
+ }
58
+ .mercury-uploader-progress {
59
+ position: absolute;
60
+ bottom: 15px;
61
+ right: 15px;
62
+ width: 333px;
63
+ div.mercury-uploader-indicator {
64
+ width: 100%;
65
+ height: 30px;
66
+ margin: 5px 0 0;
67
+ position: relative;
68
+ background-color: #BABABA;
69
+ border-radius: 35px;
70
+ -moz-border-radius: 35px;
71
+ background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #C7C7C7), color-stop(1, #B0B0B0));
72
+ background: -moz-linear-gradient(#B0B0B0 0%, #C7C7C7 100%);
73
+ -webkit-box-shadow: inset 0px 1px 2px 0px rgba(0,0,0, 0.5), 0px 1px 0px 0px rgba(255,255,255, 0.3);
74
+ -moz-box-shadow: inset 0px 1px 2px 0px rgba(0,0,0, 0.5), 0px 1px 0px 0px rgba(255,255,255, 0.3);
75
+ box-shadow: inset 0px 1px 2px 0px rgba(0,0,0, 0.5), 0px 1px 0px 0px rgba(255,255,255, 0.3);
76
+ div {
77
+ min-width: 28px;
78
+ position: relative;
79
+ overflow: hidden;
80
+ height: 28px;
81
+ border-radius: 35px;
82
+ width: 0;
83
+ -moz-border-radius: 35px;
84
+ -webkit-animation: animate-stripes 2s linear infinite;
85
+ -webkit-background-size: 44px 44px;
86
+ background: -webkit-gradient(linear, 0 0, 44 44, color-stop(0.00, rgba(255,255,255, 0.17)), color-stop(0.25, rgba(255,255,255, 0.17)), color-stop(0.26, rgba(255,255,255, 0)), color-stop(0.50, rgba(255,255,255, 0)), color-stop(0.51, rgba(255,255,255, 0.17)), color-stop(0.75, rgba(255,255,255, 0.17)), color-stop(0.76, rgba(255,255,255, 0)), color-stop(1.00, rgba(255,255,255, 0))),
87
+ -webkit-gradient(linear, left bottom, left top, color-stop(0, rgba(255,255,255, 0.1)), color-stop(1, rgba(255,255,255, 0.37)));
88
+ background: -moz-repeating-linear-gradient(top left -30deg, rgba(255,255,255, 0.17), rgba(255,255,255, 0.17) 15px, rgba(255,255,255, 0) 15px, rgba(255,255,255, 0) 30px),
89
+ -moz-linear-gradient(rgba(255,255,255, 0.1) 0%, rgba(255,255,255, 0.37) 100%);
90
+ background-color: #09F;
91
+ box-shadow: inset 0px 1px 0px 0px rgba(255,255,255, 0.4),
92
+ inset 0px -1px 1px rgba(0,0,0, 0.2);
93
+ -moz-box-shadow: inset 0px 1px 0px 0px rgba(255,255,255, 0.4),
94
+ inset 0px -1px 1px rgba(0,0,0, 0.2);
95
+ border: 1px solid #0083DA;
96
+ b {
97
+ display: none;
98
+ position: absolute;
99
+ right: 0;
100
+ line-height: 28px;
101
+ padding-right: 12px;
102
+ color: rgba(0, 0, 0, .6);
103
+ text-shadow: rgba(255, 255, 255, 0.45) 0 1px 0px;
104
+ white-space: nowrap;
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
@@ -0,0 +1,19 @@
1
+ class ImagesController < MercuryController
2
+
3
+ respond_to :json
4
+
5
+ # POST /images.json
6
+ def create
7
+ @image = Image.new(params[:image])
8
+ @image.save
9
+ respond_with @image
10
+ end
11
+
12
+ # DELETE /images/1.json
13
+ def destroy
14
+ @image = Image.find(params[:id])
15
+ @image.destroy
16
+ respond_with @image
17
+ end
18
+
19
+ end
@@ -0,0 +1,20 @@
1
+ class MercuryController < ActionController::Base
2
+ protect_from_forgery
3
+
4
+ def edit
5
+ render text: '', layout: 'mercury'
6
+ end
7
+
8
+ def resource
9
+ render action: "/#{params[:type]}/#{params[:resource]}", layout: false
10
+ end
11
+
12
+ def snippet_options
13
+ render action: "/snippets/#{params[:name]}_options", layout: false
14
+ end
15
+
16
+ def snippet_preview
17
+ render action: "/snippets/#{params[:name]}", layout: false
18
+ end
19
+
20
+ end
@@ -0,0 +1,14 @@
1
+ class Image < ActiveRecord::Base
2
+
3
+ has_attached_file :image, styles: { medium: "300x300>", thumb: "100x100>" }
4
+
5
+ delegate :url, to: :image
6
+
7
+ def serializable_hash(options = nil)
8
+ options ||= {}
9
+ options[:methods] ||= []
10
+ options[:methods] << :url
11
+ super(options)
12
+ end
13
+
14
+ end
@@ -0,0 +1,12 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title Mercury Editor
5
+ = csrf_meta_tags
6
+ = stylesheet_link_tag "mercury"
7
+ = javascript_include_tag "mercury"
8
+ :javascript
9
+ Mercury.Snippet.load({
10
+ 'snippet_1': {name: 'example', options: {'options[favorite_beer]': "miller_lite", 'options[first_name]': "1"}},
11
+ });
12
+ %body= javascript_tag 'new Mercury.PageEditor()'
@@ -0,0 +1,252 @@
1
+ %form#mercury_insertcharacter{ style: 'width:456px' }
2
+
3
+ .mercury-modal-pane-container
4
+ .mercury-modal-pane
5
+
6
+ .character{ data: {entity: "#34"}, title: "quotation mark (APL quote)" } &#34;
7
+ .character{ data: {entity: "#38"}, title: "ampersand" } &#38;
8
+ .character{ data: {entity: "#60"}, title: "less-than sign" } &#60;
9
+ .character{ data: {entity: "#62"}, title: "greater-than sign" } &#62;
10
+ .character{ data: {entity: "#710"}, title: "modifier letter circumflex accent" } &#710;
11
+ .character{ data: {entity: "#732"}, title: "small tilde" } &#732;
12
+ .character{ data: {entity: "#160"}, title: "non-breaking space" } &#160;
13
+ .character{ data: {entity: "#8194"}, title: "en space" } &#8194;
14
+ .character{ data: {entity: "#8195"}, title: "em space" } &#8195;
15
+ .character{ data: {entity: "#8201"}, title: "thin space" } &#8201;
16
+ .character{ data: {entity: "#8211"}, title: "en dash" } &#8211;
17
+ .character{ data: {entity: "#8212"}, title: "em dash" } &#8212;
18
+ .character{ data: {entity: "#8216"}, title: "left single quotation mark" } &#8216;
19
+ .character{ data: {entity: "#8217"}, title: "right single quotation mark" } &#8217;
20
+ .character{ data: {entity: "#8218"}, title: "single low-9 quotation mark" } &#8218;
21
+ .character{ data: {entity: "#8220"}, title: "left double quotation mark" } &#8220;
22
+ .character{ data: {entity: "#8221"}, title: "right double quotation mark" } &#8221;
23
+ .character{ data: {entity: "#8222"}, title: "double low-9 quotation mark" } &#8222;
24
+ .character{ data: {entity: "#8224"}, title: "dagger" } &#8224;
25
+ .character{ data: {entity: "#8225"}, title: "double dagger" } &#8225;
26
+ .character{ data: {entity: "#8240"}, title: "per mille sign" } &#8240;
27
+ .character{ data: {entity: "#8249"}, title: "single left-pointing angle quotation mark" } &#8249;
28
+ .character{ data: {entity: "#8250"}, title: "single right-pointing angle quotation mark" } &#8250;
29
+ .character{ data: {entity: "#161"}, title: "inverted exclamation mark" } &#161;
30
+ .character{ data: {entity: "#162"}, title: "cent sign" } &#162;
31
+ .character{ data: {entity: "#163"}, title: "pound sign" } &#163;
32
+ .character{ data: {entity: "#164"}, title: "currency sign" } &#164;
33
+ .character{ data: {entity: "#165"}, title: "yen sign" } &#165;
34
+ .character{ data: {entity: "#166"}, title: "broken bar" } &#166;
35
+ .character{ data: {entity: "#167"}, title: "section sign" } &#167;
36
+ .character{ data: {entity: "#168"}, title: "spacing diaeresis" } &#168;
37
+ .character{ data: {entity: "#169"}, title: "copyright sign" } &#169;
38
+ .character{ data: {entity: "#170"}, title: "feminine ordinal indicator" } &#170;
39
+ .character{ data: {entity: "#186"}, title: "masculine ordinal indicator" } &#186;
40
+ .character{ data: {entity: "#171"}, title: "left pointing guillemet" } &#171;
41
+ .character{ data: {entity: "#172"}, title: "not sign" } &#172;
42
+ .character{ data: {entity: "#174"}, title: "registered trade mark sign" } &#174;
43
+ .character{ data: {entity: "#175"}, title: "spacing macron" } &#175;
44
+ .character{ data: {entity: "#176"}, title: "degree sign" } &#176;
45
+ .character{ data: {entity: "#177"}, title: "plus-or-minus sign" } &#177;
46
+ .character{ data: {entity: "#185"}, title: "superscript one" } &#185;
47
+ .character{ data: {entity: "#178"}, title: "superscript digit two" } &#178;
48
+ .character{ data: {entity: "#179"}, title: "superscript digit three" } &#179;
49
+ .character{ data: {entity: "#180"}, title: "acute accent" } &#180;
50
+ .character{ data: {entity: "#181"}, title: "micro sign" } &#181;
51
+ .character{ data: {entity: "#182"}, title: "pilcrow sign" } &#182;
52
+ .character{ data: {entity: "#183"}, title: "middle dot" } &#183;
53
+ .character{ data: {entity: "#184"}, title: "cedilla" } &#184;
54
+ .character{ data: {entity: "#187"}, title: "right-pointing double angle quotation mark" } &#187;
55
+ .character{ data: {entity: "#188"}, title: "fraction one quarter" } &#188;
56
+ .character{ data: {entity: "#189"}, title: "fraction one half" } &#189;
57
+ .character{ data: {entity: "#190"}, title: "fraction three quarters" } &#190;
58
+ .character{ data: {entity: "#191"}, title: "inverted question mark" } &#191;
59
+ .character{ data: {entity: "#215"}, title: "multiplication sign" } &#215;
60
+ .character{ data: {entity: "#247"}, title: "division sign" } &#247;
61
+ .character{ data: {entity: "#192"}, title: "latin capital letter A with grave" } &#192;
62
+ .character{ data: {entity: "#224"}, title: "latin small letter a with grave" } &#224;
63
+ .character{ data: {entity: "#193"}, title: "latin capital letter A with acute" } &#193;
64
+ .character{ data: {entity: "#225"}, title: "latin small letter a with acute" } &#225;
65
+ .character{ data: {entity: "#194"}, title: "latin capital letter A with circumflex" } &#194;
66
+ .character{ data: {entity: "#226"}, title: "latin small letter a with circumflex" } &#226;
67
+ .character{ data: {entity: "#195"}, title: "latin capital letter A with tilde" } &#195;
68
+ .character{ data: {entity: "#227"}, title: "latin small letter a with tilde" } &#227;
69
+ .character{ data: {entity: "#196"}, title: "latin capital letter A with diaeresis" } &#196;
70
+ .character{ data: {entity: "#228"}, title: "latin small letter a with diaeresis" } &#228;
71
+ .character{ data: {entity: "#197"}, title: "latin capital letter A with ring above" } &#197;
72
+ .character{ data: {entity: "#229"}, title: "latin small letter a with ring above" } &#229;
73
+ .character{ data: {entity: "#200"}, title: "latin capital letter E with grave" } &#200;
74
+ .character{ data: {entity: "#232"}, title: "latin small letter e with grave" } &#232;
75
+ .character{ data: {entity: "#201"}, title: "latin capital letter E with acute" } &#201;
76
+ .character{ data: {entity: "#233"}, title: "latin small letter e with acute" } &#233;
77
+ .character{ data: {entity: "#202"}, title: "latin capital letter E with circumflex" } &#202;
78
+ .character{ data: {entity: "#234"}, title: "latin small letter e with circumflex" } &#234;
79
+ .character{ data: {entity: "#203"}, title: "latin capital letter E with diaeresis" } &#203;
80
+ .character{ data: {entity: "#235"}, title: "latin small letter e with diaeresis" } &#235;
81
+ .character{ data: {entity: "#204"}, title: "latin capital letter I with grave" } &#204;
82
+ .character{ data: {entity: "#236"}, title: "latin small letter i with grave" } &#236;
83
+ .character{ data: {entity: "#205"}, title: "latin capital letter I with acute" } &#205;
84
+ .character{ data: {entity: "#237"}, title: "latin small letter i with acute" } &#237;
85
+ .character{ data: {entity: "#206"}, title: "latin capital letter I with circumflex" } &#206;
86
+ .character{ data: {entity: "#238"}, title: "latin small letter i with circumflex" } &#238;
87
+ .character{ data: {entity: "#207"}, title: "latin capital letter I with diaeresis" } &#207;
88
+ .character{ data: {entity: "#239"}, title: "latin small letter i with diaeresis" } &#239;
89
+ .character{ data: {entity: "#210"}, title: "latin capital letter O with grave" } &#210;
90
+ .character{ data: {entity: "#242"}, title: "latin small letter o with grave" } &#242;
91
+ .character{ data: {entity: "#211"}, title: "latin capital letter O with acute" } &#211;
92
+ .character{ data: {entity: "#243"}, title: "latin small letter o with acute" } &#243;
93
+ .character{ data: {entity: "#212"}, title: "latin capital letter O with circumflex" } &#212;
94
+ .character{ data: {entity: "#244"}, title: "latin small letter o with circumflex" } &#244;
95
+ .character{ data: {entity: "#213"}, title: "latin capital letter O with tilde" } &#213;
96
+ .character{ data: {entity: "#245"}, title: "latin small letter o with tilde" } &#245;
97
+ .character{ data: {entity: "#214"}, title: "latin capital letter O with diaeresis" } &#214;
98
+ .character{ data: {entity: "#246"}, title: "latin small letter o with diaeresis" } &#246;
99
+ .character{ data: {entity: "#216"}, title: "latin capital letter O with stroke" } &#216;
100
+ .character{ data: {entity: "#248"}, title: "latin small letter o with stroke" } &#248;
101
+ .character{ data: {entity: "#217"}, title: "latin capital letter U with grave" } &#217;
102
+ .character{ data: {entity: "#249"}, title: "latin small letter u with grave" } &#249;
103
+ .character{ data: {entity: "#218"}, title: "latin capital letter U with acute" } &#218;
104
+ .character{ data: {entity: "#250"}, title: "latin small letter u with acute" } &#250;
105
+ .character{ data: {entity: "#219"}, title: "latin capital letter U with circumflex" } &#219;
106
+ .character{ data: {entity: "#251"}, title: "latin small letter u with circumflex" } &#251;
107
+ .character{ data: {entity: "#220"}, title: "latin capital letter U with diaeresis" } &#220;
108
+ .character{ data: {entity: "#252"}, title: "latin small letter u with diaeresis" } &#252;
109
+ .character{ data: {entity: "#221"}, title: "latin capital letter Y with acute" } &#221;
110
+ .character{ data: {entity: "#253"}, title: "latin small letter y with acute" } &#253;
111
+ .character{ data: {entity: "#376"}, title: "latin capital letter Y with diaeresis" } &#376;
112
+ .character{ data: {entity: "#255"}, title: "latin small letter y with diaeresis" } &#255;
113
+ .character{ data: {entity: "#198"}, title: "latin capital ligature AE" } &#198;
114
+ .character{ data: {entity: "#230"}, title: "latin small ligature ae" } &#230;
115
+ .character{ data: {entity: "#338"}, title: "latin capital ligature OE" } &#338;
116
+ .character{ data: {entity: "#339"}, title: "latin small ligature oe" } &#339;
117
+ .character{ data: {entity: "#352"}, title: "latin capital letter S with caron" } &#352;
118
+ .character{ data: {entity: "#353"}, title: "latin small letter s with caron" } &#353;
119
+ .character{ data: {entity: "#199"}, title: "latin capital letter C with cedilla" } &#199;
120
+ .character{ data: {entity: "#231"}, title: "latin small letter c with cedilla" } &#231;
121
+ .character{ data: {entity: "#208"}, title: "latin capital letter ETH" } &#208;
122
+ .character{ data: {entity: "#240"}, title: "latin small letter eth" } &#240;
123
+ .character{ data: {entity: "#209"}, title: "latin capital letter N with tilde" } &#209;
124
+ .character{ data: {entity: "#241"}, title: "latin small letter n with tilde" } &#241;
125
+ .character{ data: {entity: "#222"}, title: "latin capital letter THORN" } &#222;
126
+ .character{ data: {entity: "#254"}, title: "latin small letter thorn" } &#254;
127
+ .character{ data: {entity: "#223"}, title: "latin small letter sharp s (ess-zed)" } &#223;
128
+ .character{ data: {entity: "#402"}, title: "latin small f with hook (function)" } &#402;
129
+ .character{ data: {entity: "#913"}, title: "greek capital letter alpha" } &#913;
130
+ .character{ data: {entity: "#914"}, title: "greek capital letter beta" } &#914;
131
+ .character{ data: {entity: "#915"}, title: "greek capital letter gamma" } &#915;
132
+ .character{ data: {entity: "#916"}, title: "greek capital letter delta" } &#916;
133
+ .character{ data: {entity: "#917"}, title: "greek capital letter epsilon" } &#917;
134
+ .character{ data: {entity: "#918"}, title: "greek capital letter zeta" } &#918;
135
+ .character{ data: {entity: "#919"}, title: "greek capital letter eta" } &#919;
136
+ .character{ data: {entity: "#920"}, title: "greek capital letter theta" } &#920;
137
+ .character{ data: {entity: "#921"}, title: "greek capital letter iota" } &#921;
138
+ .character{ data: {entity: "#922"}, title: "greek capital letter kappa" } &#922;
139
+ .character{ data: {entity: "#923"}, title: "greek capital letter lambda" } &#923;
140
+ .character{ data: {entity: "#924"}, title: "greek capital letter mu" } &#924;
141
+ .character{ data: {entity: "#925"}, title: "greek capital letter nu" } &#925;
142
+ .character{ data: {entity: "#926"}, title: "greek capital letter xi" } &#926;
143
+ .character{ data: {entity: "#927"}, title: "greek capital letter omicron" } &#927;
144
+ .character{ data: {entity: "#928"}, title: "greek capital letter pi" } &#928;
145
+ .character{ data: {entity: "#929"}, title: "greek capital letter rho" } &#929;
146
+ .character{ data: {entity: "#931"}, title: "greek capital letter sigma" } &#931;
147
+ .character{ data: {entity: "#932"}, title: "greek capital letter tau" } &#932;
148
+ .character{ data: {entity: "#933"}, title: "greek capital letter upsilon" } &#933;
149
+ .character{ data: {entity: "#934"}, title: "greek capital letter phi" } &#934;
150
+ .character{ data: {entity: "#935"}, title: "greek capital letter chi" } &#935;
151
+ .character{ data: {entity: "#936"}, title: "greek capital letter psi" } &#936;
152
+ .character{ data: {entity: "#937"}, title: "greek capital letter omega" } &#937;
153
+ .character{ data: {entity: "#945"}, title: "greek small letter alpha" } &#945;
154
+ .character{ data: {entity: "#946"}, title: "greek small letter beta" } &#946;
155
+ .character{ data: {entity: "#947"}, title: "greek small letter gamma" } &#947;
156
+ .character{ data: {entity: "#948"}, title: "greek small letter delta" } &#948;
157
+ .character{ data: {entity: "#949"}, title: "greek small letter epsilon" } &#949;
158
+ .character{ data: {entity: "#950"}, title: "greek small letter zeta" } &#950;
159
+ .character{ data: {entity: "#951"}, title: "greek small letter eta" } &#951;
160
+ .character{ data: {entity: "#952"}, title: "greek small letter theta" } &#952;
161
+ .character{ data: {entity: "#953"}, title: "greek small letter iota" } &#953;
162
+ .character{ data: {entity: "#954"}, title: "greek small letter kappa" } &#954;
163
+ .character{ data: {entity: "#955"}, title: "greek small letter lambda" } &#955;
164
+ .character{ data: {entity: "#956"}, title: "greek small letter mu" } &#956;
165
+ .character{ data: {entity: "#957"}, title: "greek small letter nu" } &#957;
166
+ .character{ data: {entity: "#958"}, title: "greek small letter xi" } &#958;
167
+ .character{ data: {entity: "#959"}, title: "greek small letter omicron" } &#959;
168
+ .character{ data: {entity: "#960"}, title: "greek small letter pi" } &#960;
169
+ .character{ data: {entity: "#961"}, title: "greek small letter rho" } &#961;
170
+ .character{ data: {entity: "#962"}, title: "greek small letter final sigma" } &#962;
171
+ .character{ data: {entity: "#963"}, title: "greek small letter sigma" } &#963;
172
+ .character{ data: {entity: "#964"}, title: "greek small letter tau" } &#964;
173
+ .character{ data: {entity: "#965"}, title: "greek small letter upsilon" } &#965;
174
+ .character{ data: {entity: "#966"}, title: "greek small letter phi" } &#966;
175
+ .character{ data: {entity: "#967"}, title: "greek small letter chi" } &#967;
176
+ .character{ data: {entity: "#968"}, title: "greek small letter psi" } &#968;
177
+ .character{ data: {entity: "#969"}, title: "greek small letter omega" } &#969;
178
+ .character{ data: {entity: "#977"}, title: "greek small letter theta symbol" } &#977;
179
+ .character{ data: {entity: "#978"}, title: "greek upsilon with hook symbol" } &#978;
180
+ .character{ data: {entity: "#982"}, title: "greek pi symbol" } &#982;
181
+ .character{ data: {entity: "#8226"}, title: "bullet (black small circle)" } &#8226;
182
+ .character{ data: {entity: "#8230"}, title: "horizontal ellipsis" } &#8230;
183
+ .character{ data: {entity: "#8242"}, title: "prime (minutes/feet)" } &#8242;
184
+ .character{ data: {entity: "#8243"}, title: "double prime (seconds/inches)" } &#8243;
185
+ .character{ data: {entity: "#8254"}, title: "overline" } &#8254;
186
+ .character{ data: {entity: "#8260"}, title: "fraction slash" } &#8260;
187
+ .character{ data: {entity: "#8472"}, title: "Weierstrass p" } &#8472;
188
+ .character{ data: {entity: "#8465"}, title: "imaginary part" } &#8465;
189
+ .character{ data: {entity: "#8476"}, title: "real part symbol" } &#8476;
190
+ .character{ data: {entity: "#8482"}, title: "trade mark sign" } &#8482;
191
+ .character{ data: {entity: "#8501"}, title: "first transfinite cardinal" } &#8501;
192
+ .character{ data: {entity: "#8592"}, title: "leftwards arrow" } &#8592;
193
+ .character{ data: {entity: "#8593"}, title: "upwards arrow" } &#8593;
194
+ .character{ data: {entity: "#8594"}, title: "rightwards arrow" } &#8594;
195
+ .character{ data: {entity: "#8595"}, title: "downwards arrow" } &#8595;
196
+ .character{ data: {entity: "#8596"}, title: "left right arrow" } &#8596;
197
+ .character{ data: {entity: "#8629"}, title: "downwards arrow with corner leftwards" } &#8629;
198
+ .character{ data: {entity: "#8656"}, title: "leftwards double arrow" } &#8656;
199
+ .character{ data: {entity: "#8657"}, title: "upwards double arrow" } &#8657;
200
+ .character{ data: {entity: "#8658"}, title: "rightwards double arrow" } &#8658;
201
+ .character{ data: {entity: "#8659"}, title: "downwards double arrow" } &#8659;
202
+ .character{ data: {entity: "#8660"}, title: "left right double arrow" } &#8660;
203
+ .character{ data: {entity: "#8704"}, title: "for all" } &#8704;
204
+ .character{ data: {entity: "#8706"}, title: "partial differential" } &#8706;
205
+ .character{ data: {entity: "#8707"}, title: "there exists" } &#8707;
206
+ .character{ data: {entity: "#8709"}, title: "empty set (null set/diameter)" } &#8709;
207
+ .character{ data: {entity: "#8711"}, title: "nabla (backward difference)" } &#8711;
208
+ .character{ data: {entity: "#8712"}, title: "element of" } &#8712;
209
+ .character{ data: {entity: "#8713"}, title: "not an element of" } &#8713;
210
+ .character{ data: {entity: "#8715"}, title: "contains as member" } &#8715;
211
+ .character{ data: {entity: "#8719"}, title: "n-ary product (product sign)" } &#8719;
212
+ .character{ data: {entity: "#8721"}, title: "n-ary sumation" } &#8721;
213
+ .character{ data: {entity: "#8722"}, title: "minus sign" } &#8722;
214
+ .character{ data: {entity: "#8727"}, title: "asterisk operator" } &#8727;
215
+ .character{ data: {entity: "#8730"}, title: "square root (radical sign)" } &#8730;
216
+ .character{ data: {entity: "#8733"}, title: "proportional to" } &#8733;
217
+ .character{ data: {entity: "#8734"}, title: "infinity" } &#8734;
218
+ .character{ data: {entity: "#8736"}, title: "angle" } &#8736;
219
+ .character{ data: {entity: "#8743"}, title: "logical and (wedge)" } &#8743;
220
+ .character{ data: {entity: "#8744"}, title: "logical or (vee)" } &#8744;
221
+ .character{ data: {entity: "#8745"}, title: "intersection (cap)" } &#8745;
222
+ .character{ data: {entity: "#8746"}, title: "union (cup)" } &#8746;
223
+ .character{ data: {entity: "#8747"}, title: "integral" } &#8747;
224
+ .character{ data: {entity: "#8756"}, title: "therefore" } &#8756;
225
+ .character{ data: {entity: "#8764"}, title: "tilde operator (varies with/similar to)" } &#8764;
226
+ .character{ data: {entity: "#8773"}, title: "approximately equal to" } &#8773;
227
+ .character{ data: {entity: "#8776"}, title: "almost equal to (asymptotic to)" } &#8776;
228
+ .character{ data: {entity: "#8800"}, title: "not equal to" } &#8800;
229
+ .character{ data: {entity: "#8801"}, title: "identical to" } &#8801;
230
+ .character{ data: {entity: "#8804"}, title: "less-than or equal to" } &#8804;
231
+ .character{ data: {entity: "#8805"}, title: "greater-than or equal to" } &#8805;
232
+ .character{ data: {entity: "#8834"}, title: "subset of" } &#8834;
233
+ .character{ data: {entity: "#8835"}, title: "superset of" } &#8835;
234
+ .character{ data: {entity: "#8836"}, title: "not a subset of" } &#8836;
235
+ .character{ data: {entity: "#8838"}, title: "subset of or equal to" } &#8838;
236
+ .character{ data: {entity: "#8839"}, title: "superset of or equal to" } &#8839;
237
+ .character{ data: {entity: "#8853"}, title: "circled plus (direct sum)" } &#8853;
238
+ .character{ data: {entity: "#8855"}, title: "circled times (vector product)" } &#8855;
239
+ .character{ data: {entity: "#8869"}, title: "up tack (orthogonal to/perpendicular)" } &#8869;
240
+ .character{ data: {entity: "#8901"}, title: "dot operator" } &#8901;
241
+ .character{ data: {entity: "#8968"}, title: "left ceiling (apl upstile)" } &#8968;
242
+ .character{ data: {entity: "#8969"}, title: "right ceiling" } &#8969;
243
+ .character{ data: {entity: "#8970"}, title: "left floor (apl downstile)" } &#8970;
244
+ .character{ data: {entity: "#8971"}, title: "right floor" } &#8971;
245
+ .character{ data: {entity: "#9001"}, title: "left-pointing angle bracket (bra)" } &#9001;
246
+ .character{ data: {entity: "#9002"}, title: "right-pointing angle bracket (ket)" } &#9002;
247
+ .character{ data: {entity: "#9674"}, title: "lozenge" } &#9674;
248
+ .character{ data: {entity: "#9824"}, title: "black spade suit" } &#9824;
249
+ .character{ data: {entity: "#9827"}, title: "black club suit (shamrock)" } &#9827;
250
+ .character{ data: {entity: "#9829"}, title: "black heart suit (valentine)" } &#9829;
251
+ .character{ data: {entity: "#9830"}, title: "black diamond suit" } &#9830;
252
+ .character{ data: {entity: "#x2603"}, title: "snowman" } &#x2603;
@@ -0,0 +1,8 @@
1
+ = semantic_form_for 'htmleditor', { html: { id: 'mercury_htmleditor', style: 'width:650px' } } do |f|
2
+
3
+ %textarea.mercury-modal-pane-container{ rows: '5' }
4
+
5
+ .mercury-modal-controls
6
+
7
+ = f.buttons do
8
+ = f.commit_button 'Save and Replace'
@@ -0,0 +1,31 @@
1
+ = semantic_form_for 'link', { html: { id: 'mercury_link', style: 'width:600px' } } do |f|
2
+
3
+ .mercury-modal-pane-container
4
+ .mercury-modal-pane
5
+
6
+ = f.inputs id: 'link_text_container' do
7
+ = f.input :text, required: false, label: 'Link Content'
8
+
9
+ = f.inputs 'Standard Links' do
10
+ = f.input :external_url, required: false, input_html: { class: 'selectable' },
11
+ label: '<input name="link_type" type="radio" value="external_url" checked="checked"/>URL'.html_safe
12
+
13
+ = f.inputs 'Index / Bookmark Links' do
14
+ = f.input :existing_bookmark, as: :select, required: false, input_html: { class: 'selectable' }, collection: [], include_blank: false,
15
+ label: '<input name="link_type" type="radio" value="existing_bookmark"/>Existing Links'.html_safe
16
+ = f.input :new_bookmark, required: false, input_html: { class: 'selectable' },
17
+ label: '<input name="link_type" type="radio" value="new_bookmark"/>Bookmark'.html_safe
18
+
19
+ = f.inputs 'Options' do
20
+ = f.input :target, as: :select, required: false, label: 'Link Target',
21
+ include_blank: 'Self (the same window or tab)',
22
+ collection: [['Blank (a new window or tab)', '_blank'], ['Top (removes any frames)', '_top'], ['Popup Window (javascript new window popup)', 'popup']]
23
+
24
+ #popup_options.link-target-options{ style: 'display:none' }
25
+ = f.input :popup_width, required: false, label: 'Popup Width'
26
+ = f.input :popup_height, required: false, label: 'Popup Height'
27
+
28
+ .mercury-modal-controls
29
+
30
+ = f.buttons do
31
+ = f.commit_button 'Insert Link'