xmt_froala 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +28 -0
- data/Rakefile +2 -0
- data/app/assets/javascripts/xmt_froala.js +31 -0
- data/app/assets/stylesheets/xmt_froala.css +17 -0
- data/app/controllers/xmt_froala/application_controller.rb +5 -0
- data/app/controllers/xmt_froala/assets_controller.rb +94 -0
- data/app/models/xmt_froala/asset_uploader.rb +107 -0
- data/app/models/xmt_froala/file_uploader.rb +10 -0
- data/app/models/xmt_froala/flash_uploader.rb +10 -0
- data/app/models/xmt_froala/image_uploader.rb +10 -0
- data/app/models/xmt_froala/media_uploader.rb +10 -0
- data/config/routes.rb +6 -0
- data/lib/generators/xmt_froala/install/USAGE +10 -0
- data/lib/generators/xmt_froala/install/install_generator.rb +23 -0
- data/lib/generators/xmt_froala/install/templates/application.js +17 -0
- data/lib/generators/xmt_froala/install/templates/xmt_froala.rb +29 -0
- data/lib/generators/xmt_froala/migration/USAGE +14 -0
- data/lib/generators/xmt_froala/migration/migration_generator.rb +36 -0
- data/lib/generators/xmt_froala/migration/templates/migration/migration.rb +18 -0
- data/lib/generators/xmt_froala/migration/templates/models/active_record/xmt_froala/asset.rb +14 -0
- data/lib/generators/xmt_froala/migration/templates/models/active_record/xmt_froala/file.rb +3 -0
- data/lib/generators/xmt_froala/migration/templates/models/active_record/xmt_froala/flash.rb +3 -0
- data/lib/generators/xmt_froala/migration/templates/models/active_record/xmt_froala/image.rb +3 -0
- data/lib/generators/xmt_froala/migration/templates/models/active_record/xmt_froala/media.rb +3 -0
- data/lib/generators/xmt_froala/migration/templates/models/mongoid/xmt_froala/asset.rb +27 -0
- data/lib/generators/xmt_froala/migration/templates/models/mongoid/xmt_froala/file.rb +3 -0
- data/lib/generators/xmt_froala/migration/templates/models/mongoid/xmt_froala/flash.rb +3 -0
- data/lib/generators/xmt_froala/migration/templates/models/mongoid/xmt_froala/image.rb +3 -0
- data/lib/generators/xmt_froala/migration/templates/models/mongoid/xmt_froala/media.rb +3 -0
- data/lib/tasks/xmt_froala_tasks.rake +9 -0
- data/lib/xmt_froala.rb +65 -0
- data/lib/xmt_froala/active_record.rb +14 -0
- data/lib/xmt_froala/engine.rb +32 -0
- data/lib/xmt_froala/formtastic.rb +12 -0
- data/lib/xmt_froala/helper.rb +105 -0
- data/lib/xmt_froala/simple_form.rb +11 -0
- data/lib/xmt_froala/version.rb +3 -0
- data/vendor/assets/javascripts/xmt_froala/froala_editor.js +0 -0
- data/vendor/assets/javascripts/xmt_froala/languages/ar.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/bs.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/cs.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/da.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/de.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/en_ca.js +262 -0
- data/vendor/assets/javascripts/xmt_froala/languages/en_gb.js +262 -0
- data/vendor/assets/javascripts/xmt_froala/languages/es.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/et.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/fa.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/fi.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/fr.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/he.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/hr.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/hu.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/id.js +319 -0
- data/vendor/assets/javascripts/xmt_froala/languages/it.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/ja.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/ko.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/me.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/nb.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/nl.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/pl.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/pt_br.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/pt_pt.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/ro.js +319 -0
- data/vendor/assets/javascripts/xmt_froala/languages/ru.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/sk.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/sr.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/sv.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/th.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/tr.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/uk.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/languages/vi.js +258 -0
- data/vendor/assets/javascripts/xmt_froala/languages/zh_cn.js +320 -0
- data/vendor/assets/javascripts/xmt_froala/languages/zh_tw.js +318 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/align.js +139 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/align.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/char_counter.js +154 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/char_counter.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/code_beautifier.js +3270 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/code_beautifier.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/code_view.js +393 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/code_view.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/colors.js +492 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/colors.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/draggable.js +459 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/draggable.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/emoticons.js +509 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/emoticons.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/entities.js +121 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/entities.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/file.js +736 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/file.min.js +239 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/font_family.js +182 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/font_family.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/font_size.js +118 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/font_size.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/forms.js +430 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/forms.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/fullscreen.js +274 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/fullscreen.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/help.js +216 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/help.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/image.js +3323 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/image.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/image_manager.js +1056 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/image_manager.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/inline_style.js +94 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/inline_style.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/line_breaker.js +537 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/line_breaker.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/link.js +1157 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/link.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/lists.js +462 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/lists.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/paragraph_format.js +290 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/paragraph_format.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/paragraph_style.js +144 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/paragraph_style.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/plain_paste.js +96 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/print.js +137 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/print.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/quick_format.js +89 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/quick_insert.js +478 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/quick_insert.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/quote.js +141 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/quote.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/save.js +189 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/save.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/special_characters.js +781 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/special_characters.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/table.js +4194 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/table.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/url.js +194 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/url.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/video.js +2342 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/video.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/word_paste.js +1403 -0
- data/vendor/assets/javascripts/xmt_froala/plugins/word_paste.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/third_party/embedly.js +543 -0
- data/vendor/assets/javascripts/xmt_froala/third_party/embedly.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/third_party/image_aviary.js +163 -0
- data/vendor/assets/javascripts/xmt_froala/third_party/image_aviary.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/third_party/spell_checker.js +222 -0
- data/vendor/assets/javascripts/xmt_froala/third_party/spell_checker.min.js +7 -0
- data/vendor/assets/javascripts/xmt_froala/xmt_froala.js +15172 -0
- data/vendor/assets/stylesheets/xmt_froala/css/font-awesome.css +2546 -0
- data/vendor/assets/stylesheets/xmt_froala/css/froala_editor.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/froala_editor.pkgd.css +2902 -0
- data/vendor/assets/stylesheets/xmt_froala/css/froala_editor.pkgd.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/froala_style.css +413 -0
- data/vendor/assets/stylesheets/xmt_froala/css/froala_style.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/char_counter.css +57 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/char_counter.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/code_view.css +112 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/code_view.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/colors.css +155 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/colors.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/draggable.css +43 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/draggable.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/emoticons.css +42 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/emoticons.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/file.css +146 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/file.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/fullscreen.css +28 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/fullscreen.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/help.css +52 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/help.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/image.css +244 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/image.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/image_manager.css +266 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/image_manager.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/line_breaker.css +37 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/line_breaker.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/quick_insert.css +70 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/quick_insert.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/special_characters.css +51 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/special_characters.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/table.css +181 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/table.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/video.css +231 -0
- data/vendor/assets/stylesheets/xmt_froala/css/plugins/video.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/themes/dark.css +1281 -0
- data/vendor/assets/stylesheets/xmt_froala/css/themes/dark.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/themes/gray.css +1281 -0
- data/vendor/assets/stylesheets/xmt_froala/css/themes/gray.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/themes/red.css +1281 -0
- data/vendor/assets/stylesheets/xmt_froala/css/themes/red.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/themes/royal.css +1281 -0
- data/vendor/assets/stylesheets/xmt_froala/css/themes/royal.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/third_party/embedly.css +64 -0
- data/vendor/assets/stylesheets/xmt_froala/css/third_party/embedly.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/third_party/spell_checker.css +72 -0
- data/vendor/assets/stylesheets/xmt_froala/css/third_party/spell_checker.min.css +7 -0
- data/vendor/assets/stylesheets/xmt_froala/css/xmt_froala.css +1423 -0
- data/vendor/assets/stylesheets/xmt_froala/fonts/FontAwesome.otf +0 -0
- data/vendor/assets/stylesheets/xmt_froala/fonts/fontawesome-webfont.eot +0 -0
- data/vendor/assets/stylesheets/xmt_froala/fonts/fontawesome-webfont.svg +2671 -0
- data/vendor/assets/stylesheets/xmt_froala/fonts/fontawesome-webfont.ttf +0 -0
- data/vendor/assets/stylesheets/xmt_froala/fonts/fontawesome-webfont.woff +0 -0
- data/vendor/assets/stylesheets/xmt_froala/fonts/fontawesome-webfont.woff2 +0 -0
- metadata +273 -0
@@ -0,0 +1,7 @@
|
|
1
|
+
/*!
|
2
|
+
* froala_editor v2.8.1 (https://www.froala.com/wysiwyg-editor)
|
3
|
+
* License https://froala.com/wysiwyg-editor/terms/
|
4
|
+
* Copyright 2014-2018 Froala Labs
|
5
|
+
*/
|
6
|
+
|
7
|
+
!function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(e,t){return t===undefined&&(t="undefined"!=typeof window?require("jquery"):require("jquery")(e)),n(t)}:n(window.jQuery)}(function(d){d.extend(d.FE.DEFAULTS,{quickInsertButtons:["image","video","embedly","table","ul","ol","hr"],quickInsertTags:["p","div","h1","h2","h3","h4","h5","h6","pre","blockquote"]}),d.FE.QUICK_INSERT_BUTTONS={},d.FE.DefineIcon("quickInsert",{PATH:'<path d="M22,16.75 L16.75,16.75 L16.75,22 L15.25,22.000 L15.25,16.75 L10,16.75 L10,15.25 L15.25,15.25 L15.25,10 L16.75,10 L16.75,15.25 L22,15.25 L22,16.75 Z"/>',template:"svg"}),d.FE.RegisterQuickInsertButton=function(e,t){d.FE.QUICK_INSERT_BUTTONS[e]=d.extend({undo:!0},t)},d.FE.RegisterQuickInsertButton("image",{icon:"insertImage",requiredPlugin:"image",title:"Insert Image",undo:!1,callback:function(){var e=this;e.shared.$qi_image_input||(e.shared.$qi_image_input=d('<input accept="image/*" name="quickInsertImage'+this.id+'" style="display: none;" type="file">'),d("body:first").append(e.shared.$qi_image_input),e.events.$on(e.shared.$qi_image_input,"change",function(){var e=d(this).data("inst");this.files&&(e.quickInsert.hide(),e.image.upload(this.files)),d(this).val("")},!0)),e.$qi_image_input=e.shared.$qi_image_input,e.helpers.isMobile()&&e.selection.save(),e.events.disableBlur(),e.$qi_image_input.data("inst",e).trigger("click")}}),d.FE.RegisterQuickInsertButton("video",{icon:"insertVideo",requiredPlugin:"video",title:"Insert Video",undo:!1,callback:function(){var e=prompt(this.language.translate("Paste the URL of the video you want to insert."));e&&this.video.insertByURL(e)}}),d.FE.RegisterQuickInsertButton("embedly",{icon:"embedly",requiredPlugin:"embedly",title:"Embed URL",undo:!1,callback:function(){var e=prompt(this.language.translate("Paste the URL of any web content you want to insert."));e&&this.embedly.add(e)}}),d.FE.RegisterQuickInsertButton("table",{icon:"insertTable",requiredPlugin:"table",title:"Insert Table",callback:function(){this.table.insert(2,2)}}),d.FE.RegisterQuickInsertButton("ol",{icon:"formatOL",requiredPlugin:"lists",title:"Ordered List",callback:function(){this.lists.format("OL")}}),d.FE.RegisterQuickInsertButton("ul",{icon:"formatUL",requiredPlugin:"lists",title:"Unordered List",callback:function(){this.lists.format("UL")}}),d.FE.RegisterQuickInsertButton("hr",{icon:"insertHR",title:"Insert Horizontal Line",callback:function(){this.commands.insertHR()}}),d.FE.PLUGINS.quickInsert=function(r){var a,l;function t(e){var t,n,i;t=e.offset().top-r.$box.offset().top,n=0-a.outerWidth(),r.opts.enter!=d.FE.ENTER_BR?i=(a.outerHeight()-e.outerHeight())/2:(d("<span>"+d.FE.INVISIBLE_SPACE+"</span>").insertAfter(e),i=(a.outerHeight()-e.next().outerHeight())/2,e.next().remove()),r.opts.iframe&&(t+=r.$iframe.offset().top-r.helpers.scrollTop()),a.hasClass("fr-on")&&0<=t&&l.css("top",t-i),0<=t&&t-i<=r.$box.outerHeight()-e.outerHeight()?(a.hasClass("fr-hidden")&&(a.hasClass("fr-on")&&o(),a.removeClass("fr-hidden")),a.css("top",t-i)):a.hasClass("fr-visible")&&(a.addClass("fr-hidden"),u()),a.css("left",n)}function n(e){a||function(){r.shared.$quick_insert||(r.shared.$quick_insert=d('<div class="fr-quick-insert"><a class="fr-floating-btn" role="button" tabIndex="-1" title="'+r.language.translate("Quick Insert")+'">'+r.icon.create("quickInsert")+"</a></div>"));a=r.shared.$quick_insert,r.tooltip.bind(r.$box,".fr-quick-insert > a.fr-floating-btn"),r.events.on("destroy",function(){a.removeClass("fr-on").appendTo(d("body:first")).css("left",-9999).css("top",-9999),l&&(u(),l.appendTo(d("body:first")))},!0),r.events.on("shared.destroy",function(){a.html("").removeData().remove(),a=null,l&&(l.html("").removeData().remove(),l=null)},!0),r.events.on("commands.before",s),r.events.on("commands.after",function(){r.popups.areVisible()||i()}),r.events.bindClick(r.$box,".fr-quick-insert > a",o),r.events.bindClick(r.$box,".fr-qi-helper > a.fr-btn",function(e){var t=d(e.currentTarget).data("cmd");if(!1===r.events.trigger("quickInsert.commands.before",[t]))return!1;d.FE.QUICK_INSERT_BUTTONS[t].callback.apply(r,[e.currentTarget]),d.FE.QUICK_INSERT_BUTTONS[t].undo&&r.undo.saveStep(),r.events.trigger("quickInsert.commands.after",[t]),r.quickInsert.hide()}),r.events.$on(r.$wp,"scroll",function(){a.hasClass("fr-visible")&&t(a.data("tag"))})}(),a.hasClass("fr-on")&&u(),r.$box.append(a),t(e),a.data("tag",e),a.addClass("fr-visible")}function i(){if(r.core.hasFocus()){var e=r.selection.element();if(r.opts.enter==d.FE.ENTER_BR||r.node.isBlock(e)||(e=r.node.blockParent(e)),r.opts.enter==d.FE.ENTER_BR&&!r.node.isBlock(e)){var t=r.node.deepestParent(e);t&&(e=t)}e&&(r.opts.enter!=d.FE.ENTER_BR&&r.node.isEmpty(e)&&r.node.isElement(e.parentNode)&&0<=r.opts.quickInsertTags.indexOf(e.tagName.toLowerCase())||r.opts.enter==d.FE.ENTER_BR&&("BR"==e.tagName&&(!e.previousSibling||"BR"==e.previousSibling.tagName||r.node.isBlock(e.previousSibling))||r.node.isEmpty(e)&&(!e.previousSibling||"BR"==e.previousSibling.tagName||r.node.isBlock(e.previousSibling))&&(!e.nextSibling||"BR"==e.nextSibling.tagName||r.node.isBlock(e.nextSibling))))?a&&a.data("tag").is(d(e))&&a.hasClass("fr-on")?u():r.selection.isCollapsed()&&n(d(e)):s()}}function s(){a&&(a.hasClass("fr-on")&&u(),a.removeClass("fr-visible fr-on"),a.css("left",-9999).css("top",-9999))}function o(e){if(e&&e.preventDefault(),a.hasClass("fr-on")&&!a.hasClass("fr-hidden"))u();else{if(!r.shared.$qi_helper){for(var t=r.opts.quickInsertButtons,n='<div class="fr-qi-helper">',i=0,s=0;s<t.length;s++){var o=d.FE.QUICK_INSERT_BUTTONS[t[s]];o&&(!o.requiredPlugin||d.FE.PLUGINS[o.requiredPlugin]&&0<=r.opts.pluginsEnabled.indexOf(o.requiredPlugin))&&(n+='<a class="fr-btn fr-floating-btn" role="button" title="'+r.language.translate(o.title)+'" tabIndex="-1" data-cmd="'+t[s]+'" style="transition-delay: '+.025*i+++'s;">'+r.icon.create(o.icon)+"</a>")}n+="</div>",r.shared.$qi_helper=d(n),r.tooltip.bind(r.shared.$qi_helper,"> a.fr-btn"),r.events.$on(r.shared.$qi_helper,"mousedown",function(e){e.preventDefault()},!0)}(l=r.shared.$qi_helper).appendTo(r.$box),setTimeout(function(){l.css("top",parseFloat(a.css("top"))),l.css("left",parseFloat(a.css("left"))+a.outerWidth()),l.find("a").addClass("fr-size-1"),a.addClass("fr-on")},10)}}function u(){var e=r.$box.find(".fr-qi-helper");e.length&&(e.find("a").removeClass("fr-size-1"),e.css("left",-9999),a.hasClass("fr-hidden")||a.removeClass("fr-on"))}return{_init:function(){if(!r.$wp)return!1;r.opts.iframe&&r.$el.parent("html").find("head").append('<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css">'),r.popups.onShow("image.edit",s),r.events.on("mouseup",i),r.helpers.isMobile()&&r.events.$on(d(r.o_doc),"selectionchange",i),r.events.on("blur",s),r.events.on("keyup",i),r.events.on("keydown",function(){setTimeout(function(){i()},0)})},hide:s}}});
|
@@ -0,0 +1,141 @@
|
|
1
|
+
/*!
|
2
|
+
* froala_editor v2.8.1 (https://www.froala.com/wysiwyg-editor)
|
3
|
+
* License https://froala.com/wysiwyg-editor/terms/
|
4
|
+
* Copyright 2014-2018 Froala Labs
|
5
|
+
*/
|
6
|
+
|
7
|
+
(function (factory) {
|
8
|
+
if (typeof define === 'function' && define.amd) {
|
9
|
+
// AMD. Register as an anonymous module.
|
10
|
+
define(['jquery'], factory);
|
11
|
+
} else if (typeof module === 'object' && module.exports) {
|
12
|
+
// Node/CommonJS
|
13
|
+
module.exports = function( root, jQuery ) {
|
14
|
+
if ( jQuery === undefined ) {
|
15
|
+
// require('jQuery') returns a factory that requires window to
|
16
|
+
// build a jQuery instance, we normalize how we use modules
|
17
|
+
// that require this pattern but the window provided is a noop
|
18
|
+
// if it's defined (how jquery works)
|
19
|
+
if ( typeof window !== 'undefined' ) {
|
20
|
+
jQuery = require('jquery');
|
21
|
+
}
|
22
|
+
else {
|
23
|
+
jQuery = require('jquery')(root);
|
24
|
+
}
|
25
|
+
}
|
26
|
+
return factory(jQuery);
|
27
|
+
};
|
28
|
+
} else {
|
29
|
+
// Browser globals
|
30
|
+
factory(window.jQuery);
|
31
|
+
}
|
32
|
+
}(function ($) {
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
$.FE.PLUGINS.quote = function (editor) {
|
37
|
+
function _deepestParent(node) {
|
38
|
+
while (node.parentNode && node.parentNode != editor.el) {
|
39
|
+
node = node.parentNode;
|
40
|
+
}
|
41
|
+
|
42
|
+
return node;
|
43
|
+
}
|
44
|
+
|
45
|
+
function _increase () {
|
46
|
+
|
47
|
+
// Get blocks.
|
48
|
+
var blocks = editor.selection.blocks();
|
49
|
+
var i;
|
50
|
+
|
51
|
+
// Normalize blocks.
|
52
|
+
for (i = 0; i < blocks.length; i++) {
|
53
|
+
blocks[i] = _deepestParent(blocks[i]);
|
54
|
+
}
|
55
|
+
|
56
|
+
// Save selection to restore it later.
|
57
|
+
editor.selection.save();
|
58
|
+
|
59
|
+
var $quote = $('<blockquote>');
|
60
|
+
$quote.insertBefore(blocks[0]);
|
61
|
+
|
62
|
+
for (i = 0; i < blocks.length; i++) {
|
63
|
+
$quote.append(blocks[i]);
|
64
|
+
}
|
65
|
+
|
66
|
+
// Unwrap temp divs.
|
67
|
+
editor.html.unwrap();
|
68
|
+
|
69
|
+
editor.selection.restore();
|
70
|
+
}
|
71
|
+
|
72
|
+
function _decrease () {
|
73
|
+
|
74
|
+
// Get blocks.
|
75
|
+
var blocks = editor.selection.blocks();
|
76
|
+
var i;
|
77
|
+
|
78
|
+
for (i = 0; i < blocks.length; i++) {
|
79
|
+
if (blocks[i].tagName != 'BLOCKQUOTE') {
|
80
|
+
blocks[i] = $(blocks[i]).parentsUntil(editor.$el, 'BLOCKQUOTE').get(0);
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
editor.selection.save();
|
85
|
+
|
86
|
+
for (i = 0; i < blocks.length; i++) {
|
87
|
+
if (blocks[i]) {
|
88
|
+
$(blocks[i]).replaceWith(blocks[i].innerHTML);
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
// Unwrap temp divs.
|
93
|
+
editor.html.unwrap();
|
94
|
+
|
95
|
+
editor.selection.restore();
|
96
|
+
}
|
97
|
+
|
98
|
+
function apply (val) {
|
99
|
+
|
100
|
+
// Wrap.
|
101
|
+
editor.selection.save();
|
102
|
+
editor.html.wrap(true, true, true, true);
|
103
|
+
editor.selection.restore();
|
104
|
+
|
105
|
+
if (val == 'increase') {
|
106
|
+
_increase();
|
107
|
+
}
|
108
|
+
else if (val == 'decrease') {
|
109
|
+
_decrease();
|
110
|
+
}
|
111
|
+
|
112
|
+
|
113
|
+
}
|
114
|
+
|
115
|
+
return {
|
116
|
+
apply: apply
|
117
|
+
}
|
118
|
+
}
|
119
|
+
|
120
|
+
// Register the quote command.
|
121
|
+
$.FE.RegisterShortcut($.FE.KEYCODE.SINGLE_QUOTE, 'quote', 'increase', '\'');
|
122
|
+
$.FE.RegisterShortcut($.FE.KEYCODE.SINGLE_QUOTE, 'quote', 'decrease', '\'', true);
|
123
|
+
$.FE.RegisterCommand('quote', {
|
124
|
+
title: 'Quote',
|
125
|
+
type: 'dropdown',
|
126
|
+
options: {
|
127
|
+
increase: 'Increase',
|
128
|
+
decrease: 'Decrease'
|
129
|
+
},
|
130
|
+
callback: function (cmd, val) {
|
131
|
+
this.quote.apply(val);
|
132
|
+
},
|
133
|
+
plugin: 'quote'
|
134
|
+
})
|
135
|
+
|
136
|
+
// Add the quote icon.
|
137
|
+
$.FE.DefineIcon('quote', {
|
138
|
+
NAME: 'quote-left'
|
139
|
+
});
|
140
|
+
|
141
|
+
}));
|
@@ -0,0 +1,7 @@
|
|
1
|
+
/*!
|
2
|
+
* froala_editor v2.8.1 (https://www.froala.com/wysiwyg-editor)
|
3
|
+
* License https://froala.com/wysiwyg-editor/terms/
|
4
|
+
* Copyright 2014-2018 Froala Labs
|
5
|
+
*/
|
6
|
+
|
7
|
+
!function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(e,t){return t===undefined&&(t="undefined"!=typeof window?require("jquery"):require("jquery")(e)),n(t)}:n(window.jQuery)}(function(i){i.FE.PLUGINS.quote=function(o){function r(e){for(;e.parentNode&&e.parentNode!=o.el;)e=e.parentNode;return e}return{apply:function(e){o.selection.save(),o.html.wrap(!0,!0,!0,!0),o.selection.restore(),"increase"==e?function(){var e,t=o.selection.blocks();for(e=0;e<t.length;e++)t[e]=r(t[e]);o.selection.save();var n=i("<blockquote>");for(n.insertBefore(t[0]),e=0;e<t.length;e++)n.append(t[e]);o.html.unwrap(),o.selection.restore()}():"decrease"==e&&function(){var e,t=o.selection.blocks();for(e=0;e<t.length;e++)"BLOCKQUOTE"!=t[e].tagName&&(t[e]=i(t[e]).parentsUntil(o.$el,"BLOCKQUOTE").get(0));for(o.selection.save(),e=0;e<t.length;e++)t[e]&&i(t[e]).replaceWith(t[e].innerHTML);o.html.unwrap(),o.selection.restore()}()}}},i.FE.RegisterShortcut(i.FE.KEYCODE.SINGLE_QUOTE,"quote","increase","'"),i.FE.RegisterShortcut(i.FE.KEYCODE.SINGLE_QUOTE,"quote","decrease","'",!0),i.FE.RegisterCommand("quote",{title:"Quote",type:"dropdown",options:{increase:"Increase",decrease:"Decrease"},callback:function(e,t){this.quote.apply(t)},plugin:"quote"}),i.FE.DefineIcon("quote",{NAME:"quote-left"})});
|
@@ -0,0 +1,189 @@
|
|
1
|
+
/*!
|
2
|
+
* froala_editor v2.8.1 (https://www.froala.com/wysiwyg-editor)
|
3
|
+
* License https://froala.com/wysiwyg-editor/terms/
|
4
|
+
* Copyright 2014-2018 Froala Labs
|
5
|
+
*/
|
6
|
+
|
7
|
+
(function (factory) {
|
8
|
+
if (typeof define === 'function' && define.amd) {
|
9
|
+
// AMD. Register as an anonymous module.
|
10
|
+
define(['jquery'], factory);
|
11
|
+
} else if (typeof module === 'object' && module.exports) {
|
12
|
+
// Node/CommonJS
|
13
|
+
module.exports = function( root, jQuery ) {
|
14
|
+
if ( jQuery === undefined ) {
|
15
|
+
// require('jQuery') returns a factory that requires window to
|
16
|
+
// build a jQuery instance, we normalize how we use modules
|
17
|
+
// that require this pattern but the window provided is a noop
|
18
|
+
// if it's defined (how jquery works)
|
19
|
+
if ( typeof window !== 'undefined' ) {
|
20
|
+
jQuery = require('jquery');
|
21
|
+
}
|
22
|
+
else {
|
23
|
+
jQuery = require('jquery')(root);
|
24
|
+
}
|
25
|
+
}
|
26
|
+
return factory(jQuery);
|
27
|
+
};
|
28
|
+
} else {
|
29
|
+
// Browser globals
|
30
|
+
factory(window.jQuery);
|
31
|
+
}
|
32
|
+
}(function ($) {
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
// Extend defaults.
|
37
|
+
$.extend($.FE.DEFAULTS, {
|
38
|
+
saveInterval: 10000,
|
39
|
+
saveURL: null,
|
40
|
+
saveParams: {},
|
41
|
+
saveParam: 'body',
|
42
|
+
saveMethod: 'POST'
|
43
|
+
});
|
44
|
+
|
45
|
+
|
46
|
+
$.FE.PLUGINS.save = function (editor) {
|
47
|
+
var _timeout = null;
|
48
|
+
var _last_html = null;
|
49
|
+
var _force = false;
|
50
|
+
|
51
|
+
var BAD_LINK = 1;
|
52
|
+
var ERROR_ON_SERVER = 2;
|
53
|
+
|
54
|
+
var error_messages = {};
|
55
|
+
error_messages[BAD_LINK] = 'Missing saveURL option.';
|
56
|
+
error_messages[ERROR_ON_SERVER] = 'Something went wrong during save.';
|
57
|
+
|
58
|
+
/**
|
59
|
+
* Throw an image error.
|
60
|
+
*/
|
61
|
+
function _throwError (code, response) {
|
62
|
+
editor.events.trigger('save.error', [{
|
63
|
+
code: code,
|
64
|
+
message: error_messages[code]
|
65
|
+
}, response]);
|
66
|
+
}
|
67
|
+
|
68
|
+
function save (html) {
|
69
|
+
if (typeof html == 'undefined') html = editor.html.get();
|
70
|
+
|
71
|
+
var original_html = html;
|
72
|
+
|
73
|
+
// Trigger before save event.
|
74
|
+
var event_returned_value = editor.events.trigger('save.before', [html]);
|
75
|
+
|
76
|
+
if (event_returned_value === false) return false;
|
77
|
+
else if (typeof event_returned_value == 'string') html = event_returned_value;
|
78
|
+
|
79
|
+
if (editor.opts.saveURL) {
|
80
|
+
var params = {};
|
81
|
+
|
82
|
+
for (var key in editor.opts.saveParams) {
|
83
|
+
if (editor.opts.saveParams.hasOwnProperty(key)) {
|
84
|
+
var param = editor.opts.saveParams[key];
|
85
|
+
|
86
|
+
if (typeof(param) == 'function') {
|
87
|
+
params[key] = param.call(this);
|
88
|
+
}
|
89
|
+
else {
|
90
|
+
params[key] = param;
|
91
|
+
}
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
var dt = {};
|
96
|
+
dt[editor.opts.saveParam] = html;
|
97
|
+
|
98
|
+
$.ajax({
|
99
|
+
type: editor.opts.saveMethod,
|
100
|
+
url: editor.opts.saveURL,
|
101
|
+
data: $.extend(dt, params),
|
102
|
+
crossDomain: editor.opts.requestWithCORS,
|
103
|
+
xhrFields: {
|
104
|
+
withCredentials: editor.opts.requestWithCredentials
|
105
|
+
},
|
106
|
+
headers: editor.opts.requestHeaders
|
107
|
+
})
|
108
|
+
.done(function (data) {
|
109
|
+
_last_html = original_html;
|
110
|
+
|
111
|
+
// data
|
112
|
+
editor.events.trigger('save.after', [data]);
|
113
|
+
})
|
114
|
+
.fail(function (xhr) {
|
115
|
+
|
116
|
+
// (error)
|
117
|
+
_throwError(ERROR_ON_SERVER, xhr.response || xhr.responseText);
|
118
|
+
});
|
119
|
+
}
|
120
|
+
else {
|
121
|
+
|
122
|
+
// (error)
|
123
|
+
_throwError(BAD_LINK);
|
124
|
+
}
|
125
|
+
}
|
126
|
+
|
127
|
+
function _mightSave () {
|
128
|
+
clearTimeout(_timeout);
|
129
|
+
_timeout = setTimeout(function () {
|
130
|
+
var html = editor.html.get();
|
131
|
+
|
132
|
+
if (_last_html != html || _force) {
|
133
|
+
_last_html = html;
|
134
|
+
_force = false;
|
135
|
+
|
136
|
+
save(html);
|
137
|
+
}
|
138
|
+
}, editor.opts.saveInterval);
|
139
|
+
}
|
140
|
+
|
141
|
+
/**
|
142
|
+
* Reset the saving interval.
|
143
|
+
*/
|
144
|
+
function reset () {
|
145
|
+
_mightSave();
|
146
|
+
_force = false;
|
147
|
+
}
|
148
|
+
|
149
|
+
/**
|
150
|
+
* Force saving at the end of the current interval.
|
151
|
+
*/
|
152
|
+
function force () {
|
153
|
+
_force = true;
|
154
|
+
}
|
155
|
+
|
156
|
+
/*
|
157
|
+
* Initialize.
|
158
|
+
*/
|
159
|
+
function _init () {
|
160
|
+
if (editor.opts.saveInterval) {
|
161
|
+
_last_html = editor.html.get();
|
162
|
+
editor.events.on('contentChanged', _mightSave);
|
163
|
+
editor.events.on('keydown destroy', function () {
|
164
|
+
clearTimeout(_timeout);
|
165
|
+
});
|
166
|
+
}
|
167
|
+
}
|
168
|
+
|
169
|
+
return {
|
170
|
+
_init: _init,
|
171
|
+
save: save,
|
172
|
+
reset: reset,
|
173
|
+
force: force
|
174
|
+
}
|
175
|
+
}
|
176
|
+
|
177
|
+
$.FE.DefineIcon('save', { NAME: 'floppy-o' });
|
178
|
+
$.FE.RegisterCommand('save', {
|
179
|
+
title: 'Save',
|
180
|
+
undo: false,
|
181
|
+
focus: false,
|
182
|
+
refreshAfterCallback: false,
|
183
|
+
callback: function () {
|
184
|
+
this.save.save();
|
185
|
+
},
|
186
|
+
plugin: 'save'
|
187
|
+
});
|
188
|
+
|
189
|
+
}));
|
@@ -0,0 +1,7 @@
|
|
1
|
+
/*!
|
2
|
+
* froala_editor v2.8.1 (https://www.froala.com/wysiwyg-editor)
|
3
|
+
* License https://froala.com/wysiwyg-editor/terms/
|
4
|
+
* Copyright 2014-2018 Froala Labs
|
5
|
+
*/
|
6
|
+
|
7
|
+
!function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(e,t){return t===undefined&&(t="undefined"!=typeof window?require("jquery"):require("jquery")(e)),n(t)}:n(window.jQuery)}(function(l){l.extend(l.FE.DEFAULTS,{saveInterval:1e4,saveURL:null,saveParams:{},saveParam:"body",saveMethod:"POST"}),l.FE.PLUGINS.save=function(i){var e=null,u=null,t=!1,v=1,f=2,n={};function d(e,t){i.events.trigger("save.error",[{code:e,message:n[e]},t])}function s(e){void 0===e&&(e=i.html.get());var t=e,n=i.events.trigger("save.before",[e]);if(!1===n)return!1;if("string"==typeof n&&(e=n),i.opts.saveURL){var s={};for(var o in i.opts.saveParams)if(i.opts.saveParams.hasOwnProperty(o)){var a=i.opts.saveParams[o];s[o]="function"==typeof a?a.call(this):a}var r={};r[i.opts.saveParam]=e,l.ajax({type:i.opts.saveMethod,url:i.opts.saveURL,data:l.extend(r,s),crossDomain:i.opts.requestWithCORS,xhrFields:{withCredentials:i.opts.requestWithCredentials},headers:i.opts.requestHeaders}).done(function(e){u=t,i.events.trigger("save.after",[e])}).fail(function(e){d(f,e.response||e.responseText)})}else d(v)}function o(){clearTimeout(e),e=setTimeout(function(){var e=i.html.get();(u!=e||t)&&(t=!1,s(u=e))},i.opts.saveInterval)}return n[v]="Missing saveURL option.",n[f]="Something went wrong during save.",{_init:function(){i.opts.saveInterval&&(u=i.html.get(),i.events.on("contentChanged",o),i.events.on("keydown destroy",function(){clearTimeout(e)}))},save:s,reset:function(){o(),t=!1},force:function(){t=!0}}},l.FE.DefineIcon("save",{NAME:"floppy-o"}),l.FE.RegisterCommand("save",{title:"Save",undo:!1,focus:!1,refreshAfterCallback:!1,callback:function(){this.save.save()},plugin:"save"})});
|
@@ -0,0 +1,781 @@
|
|
1
|
+
/*!
|
2
|
+
* froala_editor v2.8.1 (https://www.froala.com/wysiwyg-editor)
|
3
|
+
* License https://froala.com/wysiwyg-editor/terms/
|
4
|
+
* Copyright 2014-2018 Froala Labs
|
5
|
+
*/
|
6
|
+
|
7
|
+
(function (factory) {
|
8
|
+
if (typeof define === 'function' && define.amd) {
|
9
|
+
// AMD. Register as an anonymous module.
|
10
|
+
define(['jquery'], factory);
|
11
|
+
} else if (typeof module === 'object' && module.exports) {
|
12
|
+
// Node/CommonJS
|
13
|
+
module.exports = function( root, jQuery ) {
|
14
|
+
if ( jQuery === undefined ) {
|
15
|
+
// require('jQuery') returns a factory that requires window to
|
16
|
+
// build a jQuery instance, we normalize how we use modules
|
17
|
+
// that require this pattern but the window provided is a noop
|
18
|
+
// if it's defined (how jquery works)
|
19
|
+
if ( typeof window !== 'undefined' ) {
|
20
|
+
jQuery = require('jquery');
|
21
|
+
}
|
22
|
+
else {
|
23
|
+
jQuery = require('jquery')(root);
|
24
|
+
}
|
25
|
+
}
|
26
|
+
return factory(jQuery);
|
27
|
+
};
|
28
|
+
} else {
|
29
|
+
// Browser globals
|
30
|
+
factory(window.jQuery);
|
31
|
+
}
|
32
|
+
}(function ($) {
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
// Extend defaults.
|
37
|
+
$.extend($.FE.DEFAULTS, {
|
38
|
+
specialCharactersSets: [
|
39
|
+
{
|
40
|
+
title: 'Latin',
|
41
|
+
list: [
|
42
|
+
{ 'char': '¡', desc: 'INVERTED EXCLAMATION MARK' },
|
43
|
+
{ 'char': '¢', desc: 'CENT SIGN' },
|
44
|
+
{ 'char': '£', desc: 'POUND SIGN' },
|
45
|
+
{ 'char': '¤', desc: 'CURRENCY SIGN' },
|
46
|
+
{ 'char': '¥', desc: 'YEN SIGN' },
|
47
|
+
{ 'char': '¦', desc: 'BROKEN BAR' },
|
48
|
+
{ 'char': '§', desc: 'SECTION SIGN' },
|
49
|
+
{ 'char': '¨', desc: 'DIAERESIS' },
|
50
|
+
{ 'char': '©', desc: 'COPYRIGHT SIGN' },
|
51
|
+
{ 'char': '™', desc: 'TRADEMARK SIGN' },
|
52
|
+
{ 'char': 'ª', desc: 'FEMININE ORDINAL INDICATOR' },
|
53
|
+
{ 'char': '«', desc: 'LEFT-POINTING DOUBLE ANGLE QUOTATION MARK' },
|
54
|
+
{ 'char': '¬', desc: 'NOT SIGN' },
|
55
|
+
{ 'char': '®', desc: 'REGISTERED SIGN' },
|
56
|
+
{ 'char': '¯', desc: 'MACRON' },
|
57
|
+
{ 'char': '°', desc: 'DEGREE SIGN' },
|
58
|
+
{ 'char': '±', desc: 'PLUS-MINUS SIGN' },
|
59
|
+
{ 'char': '²', desc: 'SUPERSCRIPT TWO' },
|
60
|
+
{ 'char': '³', desc: 'SUPERSCRIPT THREE' },
|
61
|
+
{ 'char': '´', desc: 'ACUTE ACCENT' },
|
62
|
+
{ 'char': 'µ', desc: 'MICRO SIGN' },
|
63
|
+
{ 'char': '¶', desc: 'PILCROW SIGN' },
|
64
|
+
{ 'char': '·', desc: 'MIDDLE DOT' },
|
65
|
+
{ 'char': '¸', desc: 'CEDILLA' },
|
66
|
+
{ 'char': '¹', desc: 'SUPERSCRIPT ONE' },
|
67
|
+
{ 'char': 'º', desc: 'MASCULINE ORDINAL INDICATOR' },
|
68
|
+
{ 'char': '»', desc: 'RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK' },
|
69
|
+
{ 'char': '¼', desc: 'VULGAR FRACTION ONE QUARTER' },
|
70
|
+
{ 'char': '½', desc: 'VULGAR FRACTION ONE HALF' },
|
71
|
+
{ 'char': '¾', desc: 'VULGAR FRACTION THREE QUARTERS' },
|
72
|
+
{ 'char': '¿', desc: 'INVERTED QUESTION MARK' },
|
73
|
+
{ 'char': 'À', desc: 'LATIN CAPITAL LETTER A WITH GRAVE' },
|
74
|
+
{ 'char': 'Á', desc: 'LATIN CAPITAL LETTER A WITH ACUTE' },
|
75
|
+
{ 'char': 'Â', desc: 'LATIN CAPITAL LETTER A WITH CIRCUMFLEX' },
|
76
|
+
{ 'char': 'Ã', desc: 'LATIN CAPITAL LETTER A WITH TILDE' },
|
77
|
+
{ 'char': 'Ä', desc: 'LATIN CAPITAL LETTER A WITH DIAERESIS ' },
|
78
|
+
{ 'char': 'Å', desc: 'LATIN CAPITAL LETTER A WITH RING ABOVE' },
|
79
|
+
{ 'char': 'Æ', desc: 'LATIN CAPITAL LETTER AE' },
|
80
|
+
{ 'char': 'Ç', desc: 'LATIN CAPITAL LETTER C WITH CEDILLA' },
|
81
|
+
{ 'char': 'È', desc: 'LATIN CAPITAL LETTER E WITH GRAVE' },
|
82
|
+
{ 'char': 'É', desc: 'LATIN CAPITAL LETTER E WITH ACUTE' },
|
83
|
+
{ 'char': 'Ê', desc: 'LATIN CAPITAL LETTER E WITH CIRCUMFLEX' },
|
84
|
+
{ 'char': 'Ë', desc: 'LATIN CAPITAL LETTER E WITH DIAERESIS' },
|
85
|
+
{ 'char': 'Ì', desc: 'LATIN CAPITAL LETTER I WITH GRAVE' },
|
86
|
+
{ 'char': 'Í', desc: 'LATIN CAPITAL LETTER I WITH ACUTE' },
|
87
|
+
{ 'char': 'Î', desc: 'LATIN CAPITAL LETTER I WITH CIRCUMFLEX' },
|
88
|
+
{ 'char': 'Ï', desc: 'LATIN CAPITAL LETTER I WITH DIAERESIS' },
|
89
|
+
{ 'char': 'Ð', desc: 'LATIN CAPITAL LETTER ETH' },
|
90
|
+
{ 'char': 'Ñ', desc: 'LATIN CAPITAL LETTER N WITH TILDE' },
|
91
|
+
{ 'char': 'Ò', desc: 'LATIN CAPITAL LETTER O WITH GRAVE' },
|
92
|
+
{ 'char': 'Ó', desc: 'LATIN CAPITAL LETTER O WITH ACUTE' },
|
93
|
+
{ 'char': 'Ô', desc: 'LATIN CAPITAL LETTER O WITH CIRCUMFLEX' },
|
94
|
+
{ 'char': 'Õ', desc: 'LATIN CAPITAL LETTER O WITH TILDE' },
|
95
|
+
{ 'char': 'Ö', desc: 'LATIN CAPITAL LETTER O WITH DIAERESIS' },
|
96
|
+
{ 'char': '×', desc: 'MULTIPLICATION SIGN' },
|
97
|
+
{ 'char': 'Ø', desc: 'LATIN CAPITAL LETTER O WITH STROKE' },
|
98
|
+
{ 'char': 'Ù', desc: 'LATIN CAPITAL LETTER U WITH GRAVE' },
|
99
|
+
{ 'char': 'Ú', desc: 'LATIN CAPITAL LETTER U WITH ACUTE' },
|
100
|
+
{ 'char': 'Û', desc: 'LATIN CAPITAL LETTER U WITH CIRCUMFLEX' },
|
101
|
+
{ 'char': 'Ü', desc: 'LATIN CAPITAL LETTER U WITH DIAERESIS' },
|
102
|
+
{ 'char': 'Ý', desc: 'LATIN CAPITAL LETTER Y WITH ACUTE' },
|
103
|
+
{ 'char': 'Þ', desc: 'LATIN CAPITAL LETTER THORN' },
|
104
|
+
{ 'char': 'ß', desc: 'LATIN SMALL LETTER SHARP S' },
|
105
|
+
{ 'char': 'à', desc: 'LATIN SMALL LETTER A WITH GRAVE' },
|
106
|
+
{ 'char': 'á', desc: 'LATIN SMALL LETTER A WITH ACUTE ' },
|
107
|
+
{ 'char': 'â', desc: 'LATIN SMALL LETTER A WITH CIRCUMFLEX' },
|
108
|
+
{ 'char': 'ã', desc: 'LATIN SMALL LETTER A WITH TILDE' },
|
109
|
+
{ 'char': 'ä', desc: 'LATIN SMALL LETTER A WITH DIAERESIS' },
|
110
|
+
{ 'char': 'å', desc: 'LATIN SMALL LETTER A WITH RING ABOVE' },
|
111
|
+
{ 'char': 'æ', desc: 'LATIN SMALL LETTER AE' },
|
112
|
+
{ 'char': 'ç', desc: 'LATIN SMALL LETTER C WITH CEDILLA' },
|
113
|
+
{ 'char': 'è', desc: 'LATIN SMALL LETTER E WITH GRAVE' },
|
114
|
+
{ 'char': 'é', desc: 'LATIN SMALL LETTER E WITH ACUTE' },
|
115
|
+
{ 'char': 'ê', desc: 'LATIN SMALL LETTER E WITH CIRCUMFLEX' },
|
116
|
+
{ 'char': 'ë', desc: 'LATIN SMALL LETTER E WITH DIAERESIS' },
|
117
|
+
{ 'char': 'ì', desc: 'LATIN SMALL LETTER I WITH GRAVE' },
|
118
|
+
{ 'char': 'í', desc: 'LATIN SMALL LETTER I WITH ACUTE' },
|
119
|
+
{ 'char': 'î', desc: 'LATIN SMALL LETTER I WITH CIRCUMFLEX' },
|
120
|
+
{ 'char': 'ï', desc: 'LATIN SMALL LETTER I WITH DIAERESIS' },
|
121
|
+
{ 'char': 'ð', desc: 'LATIN SMALL LETTER ETH' },
|
122
|
+
{ 'char': 'ñ', desc: 'LATIN SMALL LETTER N WITH TILDE' },
|
123
|
+
{ 'char': 'ò', desc: 'LATIN SMALL LETTER O WITH GRAVE' },
|
124
|
+
{ 'char': 'ó', desc: 'LATIN SMALL LETTER O WITH ACUTE' },
|
125
|
+
{ 'char': 'ô', desc: 'LATIN SMALL LETTER O WITH CIRCUMFLEX' },
|
126
|
+
{ 'char': 'õ', desc: 'LATIN SMALL LETTER O WITH TILDE' },
|
127
|
+
{ 'char': 'ö', desc: 'LATIN SMALL LETTER O WITH DIAERESIS' },
|
128
|
+
{ 'char': '÷', desc: 'DIVISION SIGN' },
|
129
|
+
{ 'char': 'ø', desc: 'LATIN SMALL LETTER O WITH STROKE' },
|
130
|
+
{ 'char': 'ù', desc: 'LATIN SMALL LETTER U WITH GRAVE' },
|
131
|
+
{ 'char': 'ú', desc: 'LATIN SMALL LETTER U WITH ACUTE' },
|
132
|
+
{ 'char': 'û', desc: 'LATIN SMALL LETTER U WITH CIRCUMFLEX' },
|
133
|
+
{ 'char': 'ü', desc: 'LATIN SMALL LETTER U WITH DIAERESIS' },
|
134
|
+
{ 'char': 'ý', desc: 'LATIN SMALL LETTER Y WITH ACUTE' },
|
135
|
+
{ 'char': 'þ', desc: 'LATIN SMALL LETTER THORN' },
|
136
|
+
{ 'char': 'ÿ', desc: 'LATIN SMALL LETTER Y WITH DIAERESIS' }
|
137
|
+
]
|
138
|
+
},
|
139
|
+
{
|
140
|
+
title: 'Greek',
|
141
|
+
list: [
|
142
|
+
{ 'char': 'Α', desc: 'GREEK CAPITAL LETTER ALPHA' },
|
143
|
+
{ 'char': 'Β', desc: 'GREEK CAPITAL LETTER BETA' },
|
144
|
+
{ 'char': 'Γ', desc: 'GREEK CAPITAL LETTER GAMMA' },
|
145
|
+
{ 'char': 'Δ', desc: 'GREEK CAPITAL LETTER DELTA' },
|
146
|
+
{ 'char': 'Ε', desc: 'GREEK CAPITAL LETTER EPSILON' },
|
147
|
+
{ 'char': 'Ζ', desc: 'GREEK CAPITAL LETTER ZETA' },
|
148
|
+
{ 'char': 'Η', desc: 'GREEK CAPITAL LETTER ETA' },
|
149
|
+
{ 'char': 'Θ', desc: 'GREEK CAPITAL LETTER THETA' },
|
150
|
+
{ 'char': 'Ι', desc: 'GREEK CAPITAL LETTER IOTA' },
|
151
|
+
{ 'char': 'Κ', desc: 'GREEK CAPITAL LETTER KAPPA' },
|
152
|
+
{ 'char': 'Λ', desc: 'GREEK CAPITAL LETTER LAMBDA' },
|
153
|
+
{ 'char': 'Μ', desc: 'GREEK CAPITAL LETTER MU' },
|
154
|
+
{ 'char': 'Ν', desc: 'GREEK CAPITAL LETTER NU' },
|
155
|
+
{ 'char': 'Ξ', desc: 'GREEK CAPITAL LETTER XI' },
|
156
|
+
{ 'char': 'Ο', desc: 'GREEK CAPITAL LETTER OMICRON' },
|
157
|
+
{ 'char': 'Π', desc: 'GREEK CAPITAL LETTER PI' },
|
158
|
+
{ 'char': 'Ρ', desc: 'GREEK CAPITAL LETTER RHO' },
|
159
|
+
{ 'char': 'Σ', desc: 'GREEK CAPITAL LETTER SIGMA' },
|
160
|
+
{ 'char': 'Τ', desc: 'GREEK CAPITAL LETTER TAU' },
|
161
|
+
{ 'char': 'Υ', desc: 'GREEK CAPITAL LETTER UPSILON' },
|
162
|
+
{ 'char': 'Φ', desc: 'GREEK CAPITAL LETTER PHI' },
|
163
|
+
{ 'char': 'Χ', desc: 'GREEK CAPITAL LETTER CHI' },
|
164
|
+
{ 'char': 'Ψ', desc: 'GREEK CAPITAL LETTER PSI' },
|
165
|
+
{ 'char': 'Ω', desc: 'GREEK CAPITAL LETTER OMEGA' },
|
166
|
+
{ 'char': 'α', desc: 'GREEK SMALL LETTER ALPHA' },
|
167
|
+
{ 'char': 'β', desc: 'GREEK SMALL LETTER BETA' },
|
168
|
+
{ 'char': 'γ', desc: 'GREEK SMALL LETTER GAMMA' },
|
169
|
+
{ 'char': 'δ', desc: 'GREEK SMALL LETTER DELTA' },
|
170
|
+
{ 'char': 'ε', desc: 'GREEK SMALL LETTER EPSILON' },
|
171
|
+
{ 'char': 'ζ', desc: 'GREEK SMALL LETTER ZETA' },
|
172
|
+
{ 'char': 'η', desc: 'GREEK SMALL LETTER ETA' },
|
173
|
+
{ 'char': 'θ', desc: 'GREEK SMALL LETTER THETA' },
|
174
|
+
{ 'char': 'ι', desc: 'GREEK SMALL LETTER IOTA' },
|
175
|
+
{ 'char': 'κ', desc: 'GREEK SMALL LETTER KAPPA' },
|
176
|
+
{ 'char': 'λ', desc: 'GREEK SMALL LETTER LAMBDA' },
|
177
|
+
{ 'char': 'μ', desc: 'GREEK SMALL LETTER MU' },
|
178
|
+
{ 'char': 'ν', desc: 'GREEK SMALL LETTER NU' },
|
179
|
+
{ 'char': 'ξ', desc: 'GREEK SMALL LETTER XI' },
|
180
|
+
{ 'char': 'ο', desc: 'GREEK SMALL LETTER OMICRON' },
|
181
|
+
{ 'char': 'π', desc: 'GREEK SMALL LETTER PI' },
|
182
|
+
{ 'char': 'ρ', desc: 'GREEK SMALL LETTER RHO' },
|
183
|
+
{ 'char': 'ς', desc: 'GREEK SMALL LETTER FINAL SIGMA' },
|
184
|
+
{ 'char': 'σ', desc: 'GREEK SMALL LETTER SIGMA' },
|
185
|
+
{ 'char': 'τ', desc: 'GREEK SMALL LETTER TAU' },
|
186
|
+
{ 'char': 'υ', desc: 'GREEK SMALL LETTER UPSILON' },
|
187
|
+
{ 'char': 'φ', desc: 'GREEK SMALL LETTER PHI' },
|
188
|
+
{ 'char': 'χ', desc: 'GREEK SMALL LETTER CHI' },
|
189
|
+
{ 'char': 'ψ', desc: 'GREEK SMALL LETTER PSI' },
|
190
|
+
{ 'char': 'ω', desc: 'GREEK SMALL LETTER OMEGA' },
|
191
|
+
{ 'char': 'ϑ', desc: 'GREEK THETA SYMBOL' },
|
192
|
+
{ 'char': 'ϒ', desc: 'GREEK UPSILON WITH HOOK SYMBOL' },
|
193
|
+
{ 'char': 'ϕ', desc: 'GREEK PHI SYMBOL' },
|
194
|
+
{ 'char': 'ϖ', desc: 'GREEK PI SYMBOL' },
|
195
|
+
{ 'char': 'Ϝ', desc: 'GREEK LETTER DIGAMMA' },
|
196
|
+
{ 'char': 'ϝ', desc: 'GREEK SMALL LETTER DIGAMMA' },
|
197
|
+
{ 'char': 'ϰ', desc: 'GREEK KAPPA SYMBOL' },
|
198
|
+
{ 'char': 'ϱ', desc: 'GREEK RHO SYMBOL' },
|
199
|
+
{ 'char': 'ϵ', desc: 'GREEK LUNATE EPSILON SYMBOL' },
|
200
|
+
{ 'char': '϶', desc: 'GREEK REVERSED LUNATE EPSILON SYMBOL' }
|
201
|
+
]
|
202
|
+
},
|
203
|
+
{
|
204
|
+
title: 'Cyrillic',
|
205
|
+
list: [
|
206
|
+
{ 'char': 'Ѐ', desc: 'CYRILLIC CAPITAL LETTER IE WITH GRAVE' },
|
207
|
+
{ 'char': 'Ё', desc: 'CYRILLIC CAPITAL LETTER IO' },
|
208
|
+
{ 'char': 'Ђ', desc: 'CYRILLIC CAPITAL LETTER DJE' },
|
209
|
+
{ 'char': 'Ѓ', desc: 'CYRILLIC CAPITAL LETTER GJE' },
|
210
|
+
{ 'char': 'Є', desc: 'CYRILLIC CAPITAL LETTER UKRAINIAN IE' },
|
211
|
+
{ 'char': 'Ѕ', desc: 'CYRILLIC CAPITAL LETTER DZE' },
|
212
|
+
{ 'char': 'І', desc: 'CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I' },
|
213
|
+
{ 'char': 'Ї', desc: 'CYRILLIC CAPITAL LETTER YI' },
|
214
|
+
{ 'char': 'Ј', desc: 'CYRILLIC CAPITAL LETTER JE' },
|
215
|
+
{ 'char': 'Љ', desc: 'CYRILLIC CAPITAL LETTER LJE' },
|
216
|
+
{ 'char': 'Њ', desc: 'CYRILLIC CAPITAL LETTER NJE' },
|
217
|
+
{ 'char': 'Ћ', desc: 'CYRILLIC CAPITAL LETTER TSHE' },
|
218
|
+
{ 'char': 'Ќ', desc: 'CYRILLIC CAPITAL LETTER KJE' },
|
219
|
+
{ 'char': 'Ѝ', desc: 'CYRILLIC CAPITAL LETTER I WITH GRAVE' },
|
220
|
+
{ 'char': 'Ў', desc: 'CYRILLIC CAPITAL LETTER SHORT U' },
|
221
|
+
{ 'char': 'Џ', desc: 'CYRILLIC CAPITAL LETTER DZHE' },
|
222
|
+
{ 'char': 'А', desc: 'CYRILLIC CAPITAL LETTER A' },
|
223
|
+
{ 'char': 'Б', desc: 'CYRILLIC CAPITAL LETTER BE' },
|
224
|
+
{ 'char': 'В', desc: 'CYRILLIC CAPITAL LETTER VE' },
|
225
|
+
{ 'char': 'Г', desc: 'CYRILLIC CAPITAL LETTER GHE' },
|
226
|
+
{ 'char': 'Д', desc: 'CYRILLIC CAPITAL LETTER DE' },
|
227
|
+
{ 'char': 'Е', desc: 'CYRILLIC CAPITAL LETTER IE' },
|
228
|
+
{ 'char': 'Ж', desc: 'CYRILLIC CAPITAL LETTER ZHE' },
|
229
|
+
{ 'char': 'З', desc: 'CYRILLIC CAPITAL LETTER ZE' },
|
230
|
+
{ 'char': 'И', desc: 'CYRILLIC CAPITAL LETTER I' },
|
231
|
+
{ 'char': 'Й', desc: 'CYRILLIC CAPITAL LETTER SHORT I' },
|
232
|
+
{ 'char': 'К', desc: 'CYRILLIC CAPITAL LETTER KA' },
|
233
|
+
{ 'char': 'Л', desc: 'CYRILLIC CAPITAL LETTER EL' },
|
234
|
+
{ 'char': 'М', desc: 'CYRILLIC CAPITAL LETTER EM' },
|
235
|
+
{ 'char': 'Н', desc: 'CYRILLIC CAPITAL LETTER EN' },
|
236
|
+
{ 'char': 'О', desc: 'CYRILLIC CAPITAL LETTER O' },
|
237
|
+
{ 'char': 'П', desc: 'CYRILLIC CAPITAL LETTER PE' },
|
238
|
+
{ 'char': 'Р', desc: 'CYRILLIC CAPITAL LETTER ER' },
|
239
|
+
{ 'char': 'С', desc: 'CYRILLIC CAPITAL LETTER ES' },
|
240
|
+
{ 'char': 'Т', desc: 'CYRILLIC CAPITAL LETTER TE' },
|
241
|
+
{ 'char': 'У', desc: 'CYRILLIC CAPITAL LETTER U' },
|
242
|
+
{ 'char': 'Ф', desc: 'CYRILLIC CAPITAL LETTER EF' },
|
243
|
+
{ 'char': 'Х', desc: 'CYRILLIC CAPITAL LETTER HA' },
|
244
|
+
{ 'char': 'Ц', desc: 'CYRILLIC CAPITAL LETTER TSE' },
|
245
|
+
{ 'char': 'Ч', desc: 'CYRILLIC CAPITAL LETTER CHE' },
|
246
|
+
{ 'char': 'Ш', desc: 'CYRILLIC CAPITAL LETTER SHA' },
|
247
|
+
{ 'char': 'Щ', desc: 'CYRILLIC CAPITAL LETTER SHCHA' },
|
248
|
+
{ 'char': 'Ъ', desc: 'CYRILLIC CAPITAL LETTER HARD SIGN' },
|
249
|
+
{ 'char': 'Ы', desc: 'CYRILLIC CAPITAL LETTER YERU' },
|
250
|
+
{ 'char': 'Ь', desc: 'CYRILLIC CAPITAL LETTER SOFT SIGN' },
|
251
|
+
{ 'char': 'Э', desc: 'CYRILLIC CAPITAL LETTER E' },
|
252
|
+
{ 'char': 'Ю', desc: 'CYRILLIC CAPITAL LETTER YU' },
|
253
|
+
{ 'char': 'Я', desc: 'CYRILLIC CAPITAL LETTER YA' },
|
254
|
+
{ 'char': 'а', desc: 'CYRILLIC SMALL LETTER A' },
|
255
|
+
{ 'char': 'б', desc: 'CYRILLIC SMALL LETTER BE' },
|
256
|
+
{ 'char': 'в', desc: 'CYRILLIC SMALL LETTER VE' },
|
257
|
+
{ 'char': 'г', desc: 'CYRILLIC SMALL LETTER GHE' },
|
258
|
+
{ 'char': 'д', desc: 'CYRILLIC SMALL LETTER DE' },
|
259
|
+
{ 'char': 'е', desc: 'CYRILLIC SMALL LETTER IE' },
|
260
|
+
{ 'char': 'ж', desc: 'CYRILLIC SMALL LETTER ZHE' },
|
261
|
+
{ 'char': 'з', desc: 'CYRILLIC SMALL LETTER ZE' },
|
262
|
+
{ 'char': 'и', desc: 'CYRILLIC SMALL LETTER I' },
|
263
|
+
{ 'char': 'й', desc: 'CYRILLIC SMALL LETTER SHORT I' },
|
264
|
+
{ 'char': 'к', desc: 'CYRILLIC SMALL LETTER KA' },
|
265
|
+
{ 'char': 'л', desc: 'CYRILLIC SMALL LETTER EL' },
|
266
|
+
{ 'char': 'м', desc: 'CYRILLIC SMALL LETTER EM' },
|
267
|
+
{ 'char': 'н', desc: 'CYRILLIC SMALL LETTER EN' },
|
268
|
+
{ 'char': 'о', desc: 'CYRILLIC SMALL LETTER O' },
|
269
|
+
{ 'char': 'п', desc: 'CYRILLIC SMALL LETTER PE' },
|
270
|
+
{ 'char': 'р', desc: 'CYRILLIC SMALL LETTER ER' },
|
271
|
+
{ 'char': 'с', desc: 'CYRILLIC SMALL LETTER ES' },
|
272
|
+
{ 'char': 'т', desc: 'CYRILLIC SMALL LETTER TE' },
|
273
|
+
{ 'char': 'у', desc: 'CYRILLIC SMALL LETTER U' },
|
274
|
+
{ 'char': 'ф', desc: 'CYRILLIC SMALL LETTER EF' },
|
275
|
+
{ 'char': 'х', desc: 'CYRILLIC SMALL LETTER HA' },
|
276
|
+
{ 'char': 'ц', desc: 'CYRILLIC SMALL LETTER TSE' },
|
277
|
+
{ 'char': 'ч', desc: 'CYRILLIC SMALL LETTER CHE' },
|
278
|
+
{ 'char': 'ш', desc: 'CYRILLIC SMALL LETTER SHA' },
|
279
|
+
{ 'char': 'щ', desc: 'CYRILLIC SMALL LETTER SHCHA' },
|
280
|
+
{ 'char': 'ъ', desc: 'CYRILLIC SMALL LETTER HARD SIGN' },
|
281
|
+
{ 'char': 'ы', desc: 'CYRILLIC SMALL LETTER YERU' },
|
282
|
+
{ 'char': 'ь', desc: 'CYRILLIC SMALL LETTER SOFT SIGN' },
|
283
|
+
{ 'char': 'э', desc: 'CYRILLIC SMALL LETTER E' },
|
284
|
+
{ 'char': 'ю', desc: 'CYRILLIC SMALL LETTER YU' },
|
285
|
+
{ 'char': 'я', desc: 'CYRILLIC SMALL LETTER YA' },
|
286
|
+
{ 'char': 'ѐ', desc: 'CYRILLIC SMALL LETTER IE WITH GRAVE' },
|
287
|
+
{ 'char': 'ё', desc: 'CYRILLIC SMALL LETTER IO' },
|
288
|
+
{ 'char': 'ђ', desc: 'CYRILLIC SMALL LETTER DJE' },
|
289
|
+
{ 'char': 'ѓ', desc: 'CYRILLIC SMALL LETTER GJE' },
|
290
|
+
{ 'char': 'є', desc: 'CYRILLIC SMALL LETTER UKRAINIAN IE' },
|
291
|
+
{ 'char': 'ѕ', desc: 'CYRILLIC SMALL LETTER DZE' },
|
292
|
+
{ 'char': 'і', desc: 'CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I' },
|
293
|
+
{ 'char': 'ї', desc: 'CYRILLIC SMALL LETTER YI' },
|
294
|
+
{ 'char': 'ј', desc: 'CYRILLIC SMALL LETTER JE' },
|
295
|
+
{ 'char': 'љ', desc: 'CYRILLIC SMALL LETTER LJE' },
|
296
|
+
{ 'char': 'њ', desc: 'CYRILLIC SMALL LETTER NJE' },
|
297
|
+
{ 'char': 'ћ', desc: 'CYRILLIC SMALL LETTER TSHE' },
|
298
|
+
{ 'char': 'ќ', desc: 'CYRILLIC SMALL LETTER KJE' },
|
299
|
+
{ 'char': 'ѝ', desc: 'CYRILLIC SMALL LETTER I WITH GRAVE' },
|
300
|
+
{ 'char': 'ў', desc: 'CYRILLIC SMALL LETTER SHORT U' },
|
301
|
+
{ 'char': 'џ', desc: 'CYRILLIC SMALL LETTER DZHE' }
|
302
|
+
]
|
303
|
+
},
|
304
|
+
{
|
305
|
+
title: 'Punctuation',
|
306
|
+
list: [
|
307
|
+
{ 'char': '–', desc: 'EN DASH' },
|
308
|
+
{ 'char': '—', desc: 'EM DASH' },
|
309
|
+
{ 'char': '‘', desc: 'LEFT SINGLE QUOTATION MARK' },
|
310
|
+
{ 'char': '’', desc: 'RIGHT SINGLE QUOTATION MARK' },
|
311
|
+
{ 'char': '‚', desc: 'SINGLE LOW-9 QUOTATION MARK' },
|
312
|
+
{ 'char': '“', desc: 'LEFT DOUBLE QUOTATION MARK' },
|
313
|
+
{ 'char': '”', desc: 'RIGHT DOUBLE QUOTATION MARK' },
|
314
|
+
{ 'char': '„', desc: 'DOUBLE LOW-9 QUOTATION MARK' },
|
315
|
+
{ 'char': '†', desc: 'DAGGER' },
|
316
|
+
{ 'char': '‡', desc: 'DOUBLE DAGGER' },
|
317
|
+
{ 'char': '•', desc: 'BULLET' },
|
318
|
+
{ 'char': '…', desc: 'HORIZONTAL ELLIPSIS' },
|
319
|
+
{ 'char': '‰', desc: 'PER MILLE SIGN' },
|
320
|
+
{ 'char': '′', desc: 'PRIME' },
|
321
|
+
{ 'char': '″', desc: 'DOUBLE PRIME' },
|
322
|
+
{ 'char': '‹', desc: 'SINGLE LEFT-POINTING ANGLE QUOTATION MARK' },
|
323
|
+
{ 'char': '›', desc: 'SINGLE RIGHT-POINTING ANGLE QUOTATION MARK' },
|
324
|
+
{ 'char': '‾', desc: 'OVERLINE' },
|
325
|
+
{ 'char': '⁄', desc: 'FRACTION SLASH' }
|
326
|
+
]
|
327
|
+
},
|
328
|
+
{
|
329
|
+
title: 'Currency',
|
330
|
+
list: [
|
331
|
+
{ 'char': '₠', desc: 'EURO-CURRENCY SIGN' },
|
332
|
+
{ 'char': '₡', desc: 'COLON SIGN' },
|
333
|
+
{ 'char': '₢', desc: 'CRUZEIRO SIGN' },
|
334
|
+
{ 'char': '₣', desc: 'FRENCH FRANC SIGN' },
|
335
|
+
{ 'char': '₤', desc: 'LIRA SIGN' },
|
336
|
+
{ 'char': '₥', desc: 'MILL SIGN' },
|
337
|
+
{ 'char': '₦', desc: 'NAIRA SIGN' },
|
338
|
+
{ 'char': '₧', desc: 'PESETA SIGN' },
|
339
|
+
{ 'char': '₨', desc: 'RUPEE SIGN' },
|
340
|
+
{ 'char': '₩', desc: 'WON SIGN' },
|
341
|
+
{ 'char': '₪', desc: 'NEW SHEQEL SIGN' },
|
342
|
+
{ 'char': '₫', desc: 'DONG SIGN' },
|
343
|
+
{ 'char': '€', desc: 'EURO SIGN' },
|
344
|
+
{ 'char': '₭', desc: 'KIP SIGN' },
|
345
|
+
{ 'char': '₮', desc: 'TUGRIK SIGN' },
|
346
|
+
{ 'char': '₯', desc: 'DRACHMA SIGN' },
|
347
|
+
{ 'char': '₰', desc: 'GERMAN PENNY SYMBOL' },
|
348
|
+
{ 'char': '₱', desc: 'PESO SIGN' },
|
349
|
+
{ 'char': '₲', desc: 'GUARANI SIGN' },
|
350
|
+
{ 'char': '₳', desc: 'AUSTRAL SIGN' },
|
351
|
+
{ 'char': '₴', desc: 'HRYVNIA SIGN' },
|
352
|
+
{ 'char': '₵', desc: 'CEDI SIGN' },
|
353
|
+
{ 'char': '₶', desc: 'LIVRE TOURNOIS SIGN' },
|
354
|
+
{ 'char': '₷', desc: 'SPESMILO SIGN' },
|
355
|
+
{ 'char': '₸', desc: 'TENGE SIGN' },
|
356
|
+
{ 'char': '₹', desc: 'INDIAN RUPEE SIGN' }
|
357
|
+
]
|
358
|
+
},
|
359
|
+
{
|
360
|
+
title: 'Arrows',
|
361
|
+
list: [
|
362
|
+
{ 'char': '←', desc: 'LEFTWARDS ARROW' },
|
363
|
+
{ 'char': '↑', desc: 'UPWARDS ARROW' },
|
364
|
+
{ 'char': '→', desc: 'RIGHTWARDS ARROW' },
|
365
|
+
{ 'char': '↓', desc: 'DOWNWARDS ARROW' },
|
366
|
+
{ 'char': '↔', desc: 'LEFT RIGHT ARROW' },
|
367
|
+
{ 'char': '↕', desc: 'UP DOWN ARROW' },
|
368
|
+
{ 'char': '↖', desc: 'NORTH WEST ARROW' },
|
369
|
+
{ 'char': '↗', desc: 'NORTH EAST ARROW' },
|
370
|
+
{ 'char': '↘', desc: 'SOUTH EAST ARROW' },
|
371
|
+
{ 'char': '↙', desc: 'SOUTH WEST ARROW' },
|
372
|
+
{ 'char': '↚', desc: 'LEFTWARDS ARROW WITH STROKE' },
|
373
|
+
{ 'char': '↛', desc: 'RIGHTWARDS ARROW WITH STROKE' },
|
374
|
+
{ 'char': '↜', desc: 'LEFTWARDS WAVE ARROW' },
|
375
|
+
{ 'char': '↝', desc: 'RIGHTWARDS WAVE ARROW' },
|
376
|
+
{ 'char': '↞', desc: 'LEFTWARDS TWO HEADED ARROW' },
|
377
|
+
{ 'char': '↟', desc: 'UPWARDS TWO HEADED ARROW' },
|
378
|
+
{ 'char': '↠', desc: 'RIGHTWARDS TWO HEADED ARROW' },
|
379
|
+
{ 'char': '↡', desc: 'DOWNWARDS TWO HEADED ARROW' },
|
380
|
+
{ 'char': '↢', desc: 'LEFTWARDS ARROW WITH TAIL' },
|
381
|
+
{ 'char': '↣', desc: 'RIGHTWARDS ARROW WITH TAIL' },
|
382
|
+
{ 'char': '↤', desc: 'LEFTWARDS ARROW FROM BAR' },
|
383
|
+
{ 'char': '↥', desc: 'UPWARDS ARROW FROM BAR' },
|
384
|
+
{ 'char': '↦', desc: 'RIGHTWARDS ARROW FROM BAR' },
|
385
|
+
{ 'char': '↧', desc: 'DOWNWARDS ARROW FROM BAR' },
|
386
|
+
{ 'char': '↨', desc: 'UP DOWN ARROW WITH BASE' },
|
387
|
+
{ 'char': '↩', desc: 'LEFTWARDS ARROW WITH HOOK' },
|
388
|
+
{ 'char': '↪', desc: 'RIGHTWARDS ARROW WITH HOOK' },
|
389
|
+
{ 'char': '↫', desc: 'LEFTWARDS ARROW WITH LOOP' },
|
390
|
+
{ 'char': '↬', desc: 'RIGHTWARDS ARROW WITH LOOP' },
|
391
|
+
{ 'char': '↭', desc: 'LEFT RIGHT WAVE ARROW' },
|
392
|
+
{ 'char': '↮', desc: 'LEFT RIGHT ARROW WITH STROKE' },
|
393
|
+
{ 'char': '↯', desc: 'DOWNWARDS ZIGZAG ARROW' },
|
394
|
+
{ 'char': '↰', desc: 'UPWARDS ARROW WITH TIP LEFTWARDS' },
|
395
|
+
{ 'char': '↱', desc: 'UPWARDS ARROW WITH TIP RIGHTWARDS' },
|
396
|
+
{ 'char': '↲', desc: 'DOWNWARDS ARROW WITH TIP LEFTWARDS' },
|
397
|
+
{ 'char': '↳', desc: 'DOWNWARDS ARROW WITH TIP RIGHTWARDS' },
|
398
|
+
{ 'char': '↴', desc: 'RIGHTWARDS ARROW WITH CORNER DOWNWARDS' },
|
399
|
+
{ 'char': '↵', desc: 'DOWNWARDS ARROW WITH CORNER LEFTWARDS' },
|
400
|
+
{ 'char': '↶', desc: 'ANTICLOCKWISE TOP SEMICIRCLE ARROW' },
|
401
|
+
{ 'char': '↷', desc: 'CLOCKWISE TOP SEMICIRCLE ARROW' },
|
402
|
+
{ 'char': '↸', desc: 'NORTH WEST ARROW TO LONG BAR' },
|
403
|
+
{ 'char': '↹', desc: 'LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR' },
|
404
|
+
{ 'char': '↺', desc: 'ANTICLOCKWISE OPEN CIRCLE ARROW' },
|
405
|
+
{ 'char': '↻', desc: 'CLOCKWISE OPEN CIRCLE ARROW' },
|
406
|
+
{ 'char': '↼', desc: 'LEFTWARDS HARPOON WITH BARB UPWARDS' },
|
407
|
+
{ 'char': '↽', desc: 'LEFTWARDS HARPOON WITH BARB DOWNWARDS' },
|
408
|
+
{ 'char': '↾', desc: 'UPWARDS HARPOON WITH BARB RIGHTWARDS' },
|
409
|
+
{ 'char': '↿', desc: 'UPWARDS HARPOON WITH BARB LEFTWARDS' },
|
410
|
+
{ 'char': '⇀', desc: 'RIGHTWARDS HARPOON WITH BARB UPWARDS' },
|
411
|
+
{ 'char': '⇁', desc: 'RIGHTWARDS HARPOON WITH BARB DOWNWARDS' },
|
412
|
+
{ 'char': '⇂', desc: 'DOWNWARDS HARPOON WITH BARB RIGHTWARDS' },
|
413
|
+
{ 'char': '⇃', desc: 'DOWNWARDS HARPOON WITH BARB LEFTWARDS' },
|
414
|
+
{ 'char': '⇄', desc: 'RIGHTWARDS ARROW OVER LEFTWARDS ARROW' },
|
415
|
+
{ 'char': '⇅', desc: 'UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW' },
|
416
|
+
{ 'char': '⇆', desc: 'LEFTWARDS ARROW OVER RIGHTWARDS ARROW' },
|
417
|
+
{ 'char': '⇇', desc: 'LEFTWARDS PAIRED ARROWS' },
|
418
|
+
{ 'char': '⇈', desc: 'UPWARDS PAIRED ARROWS' },
|
419
|
+
{ 'char': '⇉', desc: 'RIGHTWARDS PAIRED ARROWS' },
|
420
|
+
{ 'char': '⇊', desc: 'DOWNWARDS PAIRED ARROWS' },
|
421
|
+
{ 'char': '⇋', desc: 'LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON' },
|
422
|
+
{ 'char': '⇌', desc: 'RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON' },
|
423
|
+
{ 'char': '⇍', desc: 'LEFTWARDS DOUBLE ARROW WITH STROKE' },
|
424
|
+
{ 'char': '⇎', desc: 'LEFT RIGHT DOUBLE ARROW WITH STROKE' },
|
425
|
+
{ 'char': '⇏', desc: 'RIGHTWARDS DOUBLE ARROW WITH STROKE' },
|
426
|
+
{ 'char': '⇐', desc: 'LEFTWARDS DOUBLE ARROW' },
|
427
|
+
{ 'char': '⇑', desc: 'UPWARDS DOUBLE ARROW' },
|
428
|
+
{ 'char': '⇒', desc: 'RIGHTWARDS DOUBLE ARROW' },
|
429
|
+
{ 'char': '⇓', desc: 'DOWNWARDS DOUBLE ARROW' },
|
430
|
+
{ 'char': '⇔', desc: 'LEFT RIGHT DOUBLE ARROW' },
|
431
|
+
{ 'char': '⇕', desc: 'UP DOWN DOUBLE ARROW' },
|
432
|
+
{ 'char': '⇖', desc: 'NORTH WEST DOUBLE ARROW' },
|
433
|
+
{ 'char': '⇗', desc: 'NORTH EAST DOUBLE ARROW' },
|
434
|
+
{ 'char': '⇘', desc: 'SOUTH EAST DOUBLE ARROW' },
|
435
|
+
{ 'char': '⇙', desc: 'SOUTH WEST DOUBLE ARROW' },
|
436
|
+
{ 'char': '⇚', desc: 'LEFTWARDS TRIPLE ARROW' },
|
437
|
+
{ 'char': '⇛', desc: 'RIGHTWARDS TRIPLE ARROW' },
|
438
|
+
{ 'char': '⇜', desc: 'LEFTWARDS SQUIGGLE ARROW' },
|
439
|
+
{ 'char': '⇝', desc: 'RIGHTWARDS SQUIGGLE ARROW' },
|
440
|
+
{ 'char': '⇞', desc: 'UPWARDS ARROW WITH DOUBLE STROKE' },
|
441
|
+
{ 'char': '⇟', desc: 'DOWNWARDS ARROW WITH DOUBLE STROKE' },
|
442
|
+
{ 'char': '⇠', desc: 'LEFTWARDS DASHED ARROW' },
|
443
|
+
{ 'char': '⇡', desc: 'UPWARDS DASHED ARROW' },
|
444
|
+
{ 'char': '⇢', desc: 'RIGHTWARDS DASHED ARROW' },
|
445
|
+
{ 'char': '⇣', desc: 'DOWNWARDS DASHED ARROW' },
|
446
|
+
{ 'char': '⇤', desc: 'LEFTWARDS ARROW TO BAR' },
|
447
|
+
{ 'char': '⇥', desc: 'RIGHTWARDS ARROW TO BAR' },
|
448
|
+
{ 'char': '⇦', desc: 'LEFTWARDS WHITE ARROW' },
|
449
|
+
{ 'char': '⇧', desc: 'UPWARDS WHITE ARROW' },
|
450
|
+
{ 'char': '⇨', desc: 'RIGHTWARDS WHITE ARROW' },
|
451
|
+
{ 'char': '⇩', desc: 'DOWNWARDS WHITE ARROW' },
|
452
|
+
{ 'char': '⇪', desc: 'UPWARDS WHITE ARROW FROM BAR' },
|
453
|
+
{ 'char': '⇫', desc: 'UPWARDS WHITE ARROW ON PEDESTAL' },
|
454
|
+
{ 'char': '⇬', desc: 'UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR' },
|
455
|
+
{ 'char': '⇭', desc: 'UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR' },
|
456
|
+
{ 'char': '⇮', desc: 'UPWARDS WHITE DOUBLE ARROW' },
|
457
|
+
{ 'char': '⇯', desc: 'UPWARDS WHITE DOUBLE ARROW ON PEDESTAL' },
|
458
|
+
{ 'char': '⇰', desc: 'RIGHTWARDS WHITE ARROW FROM WALL' },
|
459
|
+
{ 'char': '⇱', desc: 'NORTH WEST ARROW TO CORNER' },
|
460
|
+
{ 'char': '⇲', desc: 'SOUTH EAST ARROW TO CORNER' },
|
461
|
+
{ 'char': '⇳', desc: 'UP DOWN WHITE ARROW' },
|
462
|
+
{ 'char': '⇴', desc: 'RIGHT ARROW WITH SMALL CIRCLE' },
|
463
|
+
{ 'char': '⇵', desc: 'DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW' },
|
464
|
+
{ 'char': '⇶', desc: 'THREE RIGHTWARDS ARROWS' },
|
465
|
+
{ 'char': '⇷', desc: 'LEFTWARDS ARROW WITH VERTICAL STROKE' },
|
466
|
+
{ 'char': '⇸', desc: 'RIGHTWARDS ARROW WITH VERTICAL STROKE' },
|
467
|
+
{ 'char': '⇹', desc: 'LEFT RIGHT ARROW WITH VERTICAL STROKE' },
|
468
|
+
{ 'char': '⇺', desc: 'LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE' },
|
469
|
+
{ 'char': '⇻', desc: 'RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE' },
|
470
|
+
{ 'char': '⇼', desc: 'LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE' },
|
471
|
+
{ 'char': '⇽', desc: 'LEFTWARDS OPEN-HEADED ARROW' },
|
472
|
+
{ 'char': '⇾', desc: 'RIGHTWARDS OPEN-HEADED ARROW' },
|
473
|
+
{ 'char': '⇿', desc: 'LEFT RIGHT OPEN-HEADED ARROW' }
|
474
|
+
]
|
475
|
+
},
|
476
|
+
{
|
477
|
+
title: 'Math',
|
478
|
+
list: [
|
479
|
+
{ 'char': '∀', desc: 'FOR ALL' },
|
480
|
+
{ 'char': '∂', desc: 'PARTIAL DIFFERENTIAL' },
|
481
|
+
{ 'char': '∃', desc: 'THERE EXISTS' },
|
482
|
+
{ 'char': '∅', desc: 'EMPTY SET' },
|
483
|
+
{ 'char': '∇', desc: 'NABLA' },
|
484
|
+
{ 'char': '∈', desc: 'ELEMENT OF' },
|
485
|
+
{ 'char': '∉', desc: 'NOT AN ELEMENT OF' },
|
486
|
+
{ 'char': '∋', desc: 'CONTAINS AS MEMBER' },
|
487
|
+
{ 'char': '∏', desc: 'N-ARY PRODUCT' },
|
488
|
+
{ 'char': '∑', desc: 'N-ARY SUMMATION' },
|
489
|
+
{ 'char': '−', desc: 'MINUS SIGN' },
|
490
|
+
{ 'char': '∗', desc: 'ASTERISK OPERATOR' },
|
491
|
+
{ 'char': '√', desc: 'SQUARE ROOT' },
|
492
|
+
{ 'char': '∝', desc: 'PROPORTIONAL TO' },
|
493
|
+
{ 'char': '∞', desc: 'INFINITY' },
|
494
|
+
{ 'char': '∠', desc: 'ANGLE' },
|
495
|
+
{ 'char': '∧', desc: 'LOGICAL AND' },
|
496
|
+
{ 'char': '∨', desc: 'LOGICAL OR' },
|
497
|
+
{ 'char': '∩', desc: 'INTERSECTION' },
|
498
|
+
{ 'char': '∪', desc: 'UNION' },
|
499
|
+
{ 'char': '∫', desc: 'INTEGRAL' },
|
500
|
+
{ 'char': '∴', desc: 'THEREFORE' },
|
501
|
+
{ 'char': '∼', desc: 'TILDE OPERATOR' },
|
502
|
+
{ 'char': '≅', desc: 'APPROXIMATELY EQUAL TO' },
|
503
|
+
{ 'char': '≈', desc: 'ALMOST EQUAL TO' },
|
504
|
+
{ 'char': '≠', desc: 'NOT EQUAL TO' },
|
505
|
+
{ 'char': '≡', desc: 'IDENTICAL TO' },
|
506
|
+
{ 'char': '≤', desc: 'LESS-THAN OR EQUAL TO' },
|
507
|
+
{ 'char': '≥', desc: 'GREATER-THAN OR EQUAL TO' },
|
508
|
+
{ 'char': '⊂', desc: 'SUBSET OF' },
|
509
|
+
{ 'char': '⊃', desc: 'SUPERSET OF' },
|
510
|
+
{ 'char': '⊄', desc: 'NOT A SUBSET OF' },
|
511
|
+
{ 'char': '⊆', desc: 'SUBSET OF OR EQUAL TO' },
|
512
|
+
{ 'char': '⊇', desc: 'SUPERSET OF OR EQUAL TO' },
|
513
|
+
{ 'char': '⊕', desc: 'CIRCLED PLUS' },
|
514
|
+
{ 'char': '⊗', desc: 'CIRCLED TIMES' },
|
515
|
+
{ 'char': '⊥', desc: 'UP TACK' }
|
516
|
+
]
|
517
|
+
},
|
518
|
+
{
|
519
|
+
title: 'Misc',
|
520
|
+
list: [
|
521
|
+
{ 'char': '♠', desc: 'BLACK SPADE SUIT' },
|
522
|
+
{ 'char': '♣', desc: 'BLACK CLUB SUIT' },
|
523
|
+
{ 'char': '♥', desc: 'BLACK HEART SUIT' },
|
524
|
+
{ 'char': '♦', desc: 'BLACK DIAMOND SUIT' },
|
525
|
+
{ 'char': '♩', desc: 'QUARTER NOTE' },
|
526
|
+
{ 'char': '♪', desc: 'EIGHTH NOTE' },
|
527
|
+
{ 'char': '♫', desc: 'BEAMED EIGHTH NOTES' },
|
528
|
+
{ 'char': '♬', desc: 'BEAMED SIXTEENTH NOTES' },
|
529
|
+
{ 'char': '♭', desc: 'MUSIC FLAT SIGN' },
|
530
|
+
{ 'char': '♮', desc: 'MUSIC NATURAL SIGN' },
|
531
|
+
{ 'char': '☀', desc: 'BLACK SUN WITH RAYS' },
|
532
|
+
{ 'char': '☁', desc: 'CLOUD' },
|
533
|
+
{ 'char': '☂', desc: 'UMBRELLA' },
|
534
|
+
{ 'char': '☃', desc: 'SNOWMAN' },
|
535
|
+
{ 'char': '☕', desc: 'HOT BEVERAGE' },
|
536
|
+
{ 'char': '☘', desc: 'SHAMROCK' },
|
537
|
+
{ 'char': '☯', desc: 'YIN YANG' },
|
538
|
+
{ 'char': '✔', desc: 'HEAVY CHECK MARK' },
|
539
|
+
{ 'char': '✖', desc: 'HEAVY MULTIPLICATION X' },
|
540
|
+
{ 'char': '❄', desc: 'SNOWFLAKE' },
|
541
|
+
{ 'char': '❛', desc: 'HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT' },
|
542
|
+
{ 'char': '❜', desc: 'HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT' },
|
543
|
+
{ 'char': '❝', desc: 'HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT' },
|
544
|
+
{ 'char': '❞', desc: 'HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT' },
|
545
|
+
{ 'char': '❤', desc: 'HEAVY BLACK HEART' }
|
546
|
+
]
|
547
|
+
}
|
548
|
+
]
|
549
|
+
});
|
550
|
+
|
551
|
+
$.FE.PLUGINS.specialCharacters = function (editor) {
|
552
|
+
var $modal;
|
553
|
+
var modal_id = 'special_characters';
|
554
|
+
|
555
|
+
var $head;
|
556
|
+
var $body;
|
557
|
+
|
558
|
+
/*
|
559
|
+
* Init Special Characters.
|
560
|
+
*/
|
561
|
+
function _init () {
|
562
|
+
|
563
|
+
}
|
564
|
+
|
565
|
+
/*
|
566
|
+
* Build html body.
|
567
|
+
*/
|
568
|
+
function _buildBody () {
|
569
|
+
|
570
|
+
// Begin body.
|
571
|
+
var body = '<div class="fr-special-characters-modal">';
|
572
|
+
|
573
|
+
for (var k = 0; k < editor.opts.specialCharactersSets.length; k++) {
|
574
|
+
var set = editor.opts.specialCharactersSets[k];
|
575
|
+
var list = set.list;
|
576
|
+
|
577
|
+
// Add title.
|
578
|
+
var html_list = '<div class="fr-special-characters-list"><p class="fr-special-characters-title">' + editor.language.translate(set.title) + '</p>';
|
579
|
+
|
580
|
+
for (var i = 0; i < list.length; i++) {
|
581
|
+
var item = list[i];
|
582
|
+
html_list += '<span class="fr-command fr-special-character" tabIndex="-1" role="button" value="' + item['char'] + '" title="' + item.desc + '">' + item['char'] + '<span class="fr-sr-only">' + editor.language.translate(item.desc) + ' </span></span>';
|
583
|
+
|
584
|
+
}
|
585
|
+
|
586
|
+
// Add list to body.
|
587
|
+
body += html_list + '</div>';
|
588
|
+
}
|
589
|
+
|
590
|
+
// End body.
|
591
|
+
body += '</div>';
|
592
|
+
|
593
|
+
return body;
|
594
|
+
}
|
595
|
+
|
596
|
+
/*
|
597
|
+
* Focus a special character.
|
598
|
+
*/
|
599
|
+
function _focusChar ($char, e) {
|
600
|
+
|
601
|
+
editor.events.disableBlur();
|
602
|
+
$char.focus();
|
603
|
+
|
604
|
+
e.preventDefault();
|
605
|
+
e.stopPropagation();
|
606
|
+
}
|
607
|
+
|
608
|
+
function _addAccessibility () {
|
609
|
+
|
610
|
+
// Keydown handler.
|
611
|
+
editor.events.$on($body, 'keydown', function (e) {
|
612
|
+
var keycode = e.which;
|
613
|
+
var $focused_char = $body.find('span.fr-special-character:focus:first');
|
614
|
+
|
615
|
+
// Alt + F10.
|
616
|
+
if (!$focused_char.length && keycode == $.FE.KEYCODE.F10 && !editor.keys.ctrlKey(e) && !e.shiftKey && e.altKey) {
|
617
|
+
|
618
|
+
// Focus first character.
|
619
|
+
var $char = $body.find('span.fr-special-character:first');
|
620
|
+
_focusChar($char, e);
|
621
|
+
|
622
|
+
return false;
|
623
|
+
}
|
624
|
+
|
625
|
+
// Tab and arrows.
|
626
|
+
else if (keycode == $.FE.KEYCODE.TAB || keycode == $.FE.KEYCODE.ARROW_LEFT || keycode == $.FE.KEYCODE.ARROW_RIGHT) {
|
627
|
+
|
628
|
+
// The next char that will get focused.
|
629
|
+
var $next_char = null;
|
630
|
+
|
631
|
+
// Forward of backward.
|
632
|
+
var forward = null;
|
633
|
+
|
634
|
+
// Arrow or Tab.
|
635
|
+
var isArrow = false;
|
636
|
+
|
637
|
+
if (keycode == $.FE.KEYCODE.ARROW_LEFT || keycode == $.FE.KEYCODE.ARROW_RIGHT) {
|
638
|
+
forward = keycode == $.FE.KEYCODE.ARROW_RIGHT;
|
639
|
+
isArrow = true;
|
640
|
+
}
|
641
|
+
else {
|
642
|
+
forward = !e.shiftKey;
|
643
|
+
}
|
644
|
+
|
645
|
+
if ($focused_char.length) {
|
646
|
+
|
647
|
+
// Next or previous char from a category. Only if arrow are used.
|
648
|
+
if (isArrow) {
|
649
|
+
if (forward) {
|
650
|
+
$next_char = $focused_char.nextAll('span.fr-special-character:first');
|
651
|
+
}
|
652
|
+
else {
|
653
|
+
$next_char = $focused_char.prevAll('span.fr-special-character:first');
|
654
|
+
}
|
655
|
+
}
|
656
|
+
|
657
|
+
// First or last char reached within a category. Or Tab is used.
|
658
|
+
if (!$next_char || !$next_char.length) {
|
659
|
+
|
660
|
+
// First or last char from next or previous category.
|
661
|
+
if (forward) {
|
662
|
+
$next_char = $focused_char.parent().next().find('span.fr-special-character:first');
|
663
|
+
}
|
664
|
+
else {
|
665
|
+
$next_char = $focused_char.parent().prev().find('span.fr-special-character:' + (isArrow ? 'last' : 'first'));
|
666
|
+
}
|
667
|
+
|
668
|
+
// First or last category reached.
|
669
|
+
if (!$next_char.length) {
|
670
|
+
|
671
|
+
// First category and first char or last category and last char.
|
672
|
+
$next_char = $body.find('span.fr-special-character:' + (forward ? 'first' : 'last'));
|
673
|
+
}
|
674
|
+
}
|
675
|
+
}
|
676
|
+
|
677
|
+
// First category and first char or last category and last char.
|
678
|
+
else {
|
679
|
+
$next_char = $body.find('span.fr-special-character:' + (forward ? 'first' : 'last'));
|
680
|
+
}
|
681
|
+
_focusChar($next_char, e);
|
682
|
+
|
683
|
+
return false;
|
684
|
+
}
|
685
|
+
|
686
|
+
// Enter on a focused item.
|
687
|
+
else if (keycode == $.FE.KEYCODE.ENTER && $focused_char.length) {
|
688
|
+
var instance = $modal.data('instance') || editor;
|
689
|
+
|
690
|
+
instance.specialCharacters.insert($focused_char);
|
691
|
+
}
|
692
|
+
else {
|
693
|
+
|
694
|
+
return true;
|
695
|
+
}
|
696
|
+
}, true);
|
697
|
+
}
|
698
|
+
|
699
|
+
/*
|
700
|
+
* Show Special Characters.
|
701
|
+
*/
|
702
|
+
function show () {
|
703
|
+
if (!$modal) {
|
704
|
+
var head = '<h4>' + editor.language.translate('Special Characters') + '</h4>';
|
705
|
+
var body = _buildBody();
|
706
|
+
var modalHash = editor.modals.create(modal_id, head, body);
|
707
|
+
$modal = modalHash.$modal;
|
708
|
+
$head = modalHash.$head;
|
709
|
+
$body = modalHash.$body;
|
710
|
+
|
711
|
+
// Resize Special Characters modal on window resize.
|
712
|
+
editor.events.$on($(editor.o_win), 'resize', function () {
|
713
|
+
var instance = $modal.data('instance') || editor;
|
714
|
+
|
715
|
+
instance.modals.resize(modal_id);
|
716
|
+
});
|
717
|
+
|
718
|
+
// Insert image.
|
719
|
+
editor.events.bindClick($body, '.fr-special-character', function (e) {
|
720
|
+
var instance = $modal.data('instance') || editor;
|
721
|
+
var $target = $(e.currentTarget);
|
722
|
+
|
723
|
+
instance.specialCharacters.insert($target);
|
724
|
+
});
|
725
|
+
|
726
|
+
_addAccessibility();
|
727
|
+
}
|
728
|
+
|
729
|
+
|
730
|
+
// Show modal.
|
731
|
+
editor.modals.show(modal_id);
|
732
|
+
|
733
|
+
// Modal may not fit window size.
|
734
|
+
editor.modals.resize(modal_id);
|
735
|
+
}
|
736
|
+
|
737
|
+
/*
|
738
|
+
* Hide Special Characters.
|
739
|
+
*/
|
740
|
+
function hide () {
|
741
|
+
editor.modals.hide(modal_id);
|
742
|
+
}
|
743
|
+
|
744
|
+
/*
|
745
|
+
* Insert special character.
|
746
|
+
*/
|
747
|
+
function insert($target) {
|
748
|
+
|
749
|
+
// Hide modal.
|
750
|
+
editor.specialCharacters.hide();
|
751
|
+
|
752
|
+
// Insert character.
|
753
|
+
editor.undo.saveStep();
|
754
|
+
editor.html.insert($target.attr('value'), true);
|
755
|
+
editor.undo.saveStep();
|
756
|
+
}
|
757
|
+
|
758
|
+
return {
|
759
|
+
_init: _init,
|
760
|
+
show: show,
|
761
|
+
hide: hide,
|
762
|
+
insert: insert
|
763
|
+
};
|
764
|
+
};
|
765
|
+
|
766
|
+
$.FroalaEditor.DefineIcon('specialCharacters', { template: 'text', NAME: 'Ω' })
|
767
|
+
|
768
|
+
$.FE.RegisterCommand('specialCharacters', {
|
769
|
+
title: 'Special Characters',
|
770
|
+
icon: 'specialCharacters',
|
771
|
+
undo: false,
|
772
|
+
focus: false,
|
773
|
+
modal: true,
|
774
|
+
callback: function () {
|
775
|
+
this.specialCharacters.show();
|
776
|
+
},
|
777
|
+
plugin: 'specialCharacters',
|
778
|
+
showOnMobile: false
|
779
|
+
});
|
780
|
+
|
781
|
+
}));
|