summernote-rails 0.6.16.0 → 0.7.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -8
- data/lib/summernote-rails/version.rb +1 -1
- data/vendor/assets/javascripts/summernote/locales/ar-AR.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/ca-ES.js +59 -7
- data/vendor/assets/javascripts/summernote/locales/cs-CZ.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/da-DK.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/de-DE.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/es-ES.js +53 -4
- data/vendor/assets/javascripts/summernote/locales/es-EU.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/fa-IR.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/fi-FI.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/fr-FR.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/he-IL.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/hu-HU.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/id-ID.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/it-IT.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/ja-JP.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/ko-KR.js +14 -2
- data/vendor/assets/javascripts/summernote/locales/nb-NO.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/nl-NL.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/pl-PL.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/pt-BR.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/ro-RO.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/ru-RU.js +12 -0
- data/vendor/assets/javascripts/summernote/locales/sk-SK.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/sl-SI.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/sr-RS-Latin.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/sr-RS.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/sv-SE.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/th-TH.js +11 -4
- data/vendor/assets/javascripts/summernote/locales/tr-TR.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/uk-UA.js +12 -0
- data/vendor/assets/javascripts/summernote/locales/vi-VN.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/zh-CN.js +7 -0
- data/vendor/assets/javascripts/summernote/locales/zh-TW.js +7 -0
- data/vendor/assets/javascripts/summernote/plugin/hello/summernote-ext-hello.js +82 -0
- data/vendor/assets/javascripts/summernote/plugin/specialchars/summernote-ext-specialchars.js +316 -0
- data/vendor/assets/javascripts/summernote/summernote.js +3354 -3813
- data/vendor/assets/stylesheets/summernote.css +1 -1
- metadata +4 -5
- data/vendor/assets/javascripts/summernote/plugin/summernote-ext-hello.js +0 -89
- data/vendor/assets/javascripts/summernote/plugin/summernote-ext-hint.js +0 -270
- data/vendor/assets/javascripts/summernote/plugin/summernote-ext-video.js +0 -573
@@ -1 +1 @@
|
|
1
|
-
.note-editor{position:relative;overflow:hidden;border:1px solid #a9a9a9}.note-editor .note-dropzone{position:absolute;z-index:100;display:none;color:#87cefa;background-color:white;opacity:.95;pointer-event:none}.note-editor .note-dropzone .note-dropzone-message{display:table-cell;font-size:28px;font-weight:bold;text-align:center;vertical-align:middle}.note-editor .note-dropzone.hover{color:#098ddf}.note-editor.dragover .note-dropzone{display:table}.note-editor.codeview .note-editing-area .note-editable{display:none}.note-editor.codeview .note-editing-area .note-codable{display:block}.note-editor.fullscreen{position:fixed;top:0;left:0;z-index:1050;width:100%}.note-editor.fullscreen .note-editable{background-color:white}.note-editor.fullscreen .note-resizebar{display:none}.note-editor .note-editing-area{position:relative;overflow:hidden}.note-editor .note-editing-area .note-editable{padding:10px;overflow:auto;color:#000;background-color:#fff;outline:0}.note-editor .note-editing-area .note-editable[contenteditable=true]:empty:not(:focus):before{content:attr(data-placeholder)}.note-editor .note-editing-area .note-editable[contenteditable="false"]{background-color:#e5e5e5}.note-editor .note-editing-area .note-codable{display:none;width:100%;padding:10px;margin-bottom:0;font-family:Menlo,Monaco,monospace,sans-serif;font-size:14px;color:#ccc;background-color:#222;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;resize:none}.note-editor .note-statusbar{background-color:#f5f5f5}.note-editor .note-statusbar .note-resizebar{width:100%;height:8px;padding-top:1px;cursor:ns-resize}.note-editor .note-statusbar .note-resizebar .note-icon-bar{width:20px;margin:1px auto;border-top:1px solid #a9a9a9}.note-air-editor{outline:0}.note-popover .popover{max-width:none}.note-popover .popover .popover-content a{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.note-popover .popover .arrow{left:20px}.note-popover .popover .popover-content,.panel-heading.note-toolbar{padding:0 0 5px 5px;margin:0}.note-popover .popover .popover-content>.btn-group,.panel-heading.note-toolbar>.btn-group{margin-top:5px;margin-right:5px;margin-left:0}.note-popover .popover .popover-content .btn-group .note-table,.panel-heading.note-toolbar .btn-group .note-table{min-width:0;padding:5px}.note-popover .popover .popover-content .btn-group .note-table .note-dimension-picker,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker{font-size:18px}.note-popover .popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher{position:absolute!important;z-index:3;width:10em;height:10em;cursor:pointer}.note-popover .popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted{position:relative!important;z-index:1;width:5em;height:5em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted{position:absolute!important;z-index:2;width:1em;height:1em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover .popover-content .note-style h1,.panel-heading.note-toolbar .note-style h1,.note-popover .popover .popover-content .note-style h2,.panel-heading.note-toolbar .note-style h2,.note-popover .popover .popover-content .note-style h3,.panel-heading.note-toolbar .note-style h3,.note-popover .popover .popover-content .note-style h4,.panel-heading.note-toolbar .note-style h4,.note-popover .popover .popover-content .note-style h5,.panel-heading.note-toolbar .note-style h5,.note-popover .popover .popover-content .note-style h6,.panel-heading.note-toolbar .note-style h6,.note-popover .popover .popover-content .note-style blockquote,.panel-heading.note-toolbar .note-style blockquote{margin:0}.note-popover .popover .popover-content .note-color .dropdown-toggle,.panel-heading.note-toolbar .note-color .dropdown-toggle{width:20px;padding-left:5px}.note-popover .popover .popover-content .note-color .dropdown-menu,.panel-heading.note-toolbar .note-color .dropdown-menu{min-width:340px}.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group{margin:0}.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group:first-child,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group:first-child{margin:0 5px}.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group .note-palette-title,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-palette-title{margin:2px 7px;font-size:12px;text-align:center;border-bottom:1px solid #eee}.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group .note-color-reset,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset{padding:0 3px;margin:3px;font-size:11px;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group .note-color-row,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-color-row{height:20px}.note-popover .popover .popover-content .note-color .dropdown-menu .btn-group .note-color-reset:hover,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset:hover{background:#eee}.note-popover .popover .popover-content .note-para .dropdown-menu,.panel-heading.note-toolbar .note-para .dropdown-menu{min-width:216px;padding:5px}.note-popover .popover .popover-content .note-para .dropdown-menu>div:first-child,.panel-heading.note-toolbar .note-para .dropdown-menu>div:first-child{margin-right:5px}.note-popover .popover .popover-content .dropdown-menu,.panel-heading.note-toolbar .dropdown-menu{min-width:90px}.note-popover .popover .popover-content .dropdown-menu.right,.panel-heading.note-toolbar .dropdown-menu.right{right:0;left:auto}.note-popover .popover .popover-content .dropdown-menu.right::before,.panel-heading.note-toolbar .dropdown-menu.right::before{right:9px;left:auto!important}.note-popover .popover .popover-content .dropdown-menu.right::after,.panel-heading.note-toolbar .dropdown-menu.right::after{right:10px;left:auto!important}.note-popover .popover .popover-content .dropdown-menu.note-check li a i,.panel-heading.note-toolbar .dropdown-menu.note-check li a i{color:deepskyblue;visibility:hidden}.note-popover .popover .popover-content .dropdown-menu.note-check li a.checked i,.panel-heading.note-toolbar .dropdown-menu.note-check li a.checked i{visibility:visible}.note-popover .popover .popover-content .note-fontsize-10,.panel-heading.note-toolbar .note-fontsize-10{font-size:10px}.note-popover .popover .popover-content .note-color-palette,.panel-heading.note-toolbar .note-color-palette{line-height:1}.note-popover .popover .popover-content .note-color-palette div .note-color-btn,.panel-heading.note-toolbar .note-color-palette div .note-color-btn{width:20px;height:20px;padding:0;margin:0;border:1px solid #fff}.note-popover .popover .popover-content .note-color-palette div .note-color-btn:hover,.panel-heading.note-toolbar .note-color-palette div .note-color-btn:hover{border:1px solid #000}.note-dialog>div{display:none}.note-dialog .form-group{margin-right:0;margin-left:0}.note-dialog .note-modal-form{margin:0}.note-dialog .note-image-dialog .note-dropzone{min-height:100px;margin-bottom:10px;font-size:30px;line-height:4;color:lightgray;text-align:center;border:4px dashed lightgray}.note-dialog .note-help-dialog{font-size:12px;color:#ccc;background:transparent;background-color:#222!important;border:0;-webkit-opacity:.9;-khtml-opacity:.9;-moz-opacity:.9;opacity:.9;-ms-filter:alpha(opacity=90);filter:alpha(opacity=90)}.note-dialog .note-help-dialog .modal-content{background:transparent;border:1px solid white;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.note-dialog .note-help-dialog a{font-size:12px;color:white}.note-dialog .note-help-dialog .title{padding-bottom:5px;margin-bottom:10px;font-size:14px;font-weight:bold;color:white;border-bottom:white 1px solid}.note-dialog .note-help-dialog .modal-close{font-size:14px;color:#dd0;cursor:pointer}.note-dialog .note-help-dialog .text-center{margin:10px 0 0}.note-dialog .note-help-dialog .note-shortcut{padding-top:8px;padding-bottom:8px}.note-dialog .note-help-dialog .note-shortcut-row{margin-right:-5px;margin-left:-5px}.note-dialog .note-help-dialog .note-shortcut-col{padding-right:5px;padding-left:5px}.note-dialog .note-help-dialog .note-shortcut-title{font-size:13px;font-weight:bold;color:#dd0}.note-dialog .note-help-dialog .note-shortcut-key{font-family:"Courier New";color:#dd0;text-align:right}.note-handle .note-control-selection{position:absolute;display:none;border:1px solid black}.note-handle .note-control-selection>div{position:absolute}.note-handle .note-control-selection .note-control-selection-bg{width:100%;height:100%;background-color:black;-webkit-opacity:.3;-khtml-opacity:.3;-moz-opacity:.3;opacity:.3;-ms-filter:alpha(opacity=30);filter:alpha(opacity=30)}.note-handle .note-control-selection .note-control-handle{width:7px;height:7px;border:1px solid black}.note-handle .note-control-selection .note-control-holder{width:7px;height:7px;border:1px solid black}.note-handle .note-control-selection .note-control-sizing{width:7px;height:7px;background-color:white;border:1px solid black}.note-handle .note-control-selection .note-control-nw{top:-5px;left:-5px;border-right:0;border-bottom:0}.note-handle .note-control-selection .note-control-ne{top:-5px;right:-5px;border-bottom:0;border-left:none}.note-handle .note-control-selection .note-control-sw{bottom:-5px;left:-5px;border-top:0;border-right:0}.note-handle .note-control-selection .note-control-se{right:-5px;bottom:-5px;cursor:se-resize}.note-handle .note-control-selection .note-control-se.note-control-holder{cursor:default;border-top:0;border-left:none}.note-handle .note-control-selection .note-control-selection-info{right:0;bottom:0;padding:5px;margin:5px;font-size:12px;color:white;background-color:black;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-opacity:.7;-khtml-opacity:.7;-moz-opacity:.7;opacity:.7;-ms-filter:alpha(opacity=70);filter:alpha(opacity=70)}
|
1
|
+
.note-editor{position:relative}.note-editor .note-dropzone{position:absolute;z-index:100;display:none;color:#87cefa;background-color:white;opacity:.95;pointer-event:none}.note-editor .note-dropzone .note-dropzone-message{display:table-cell;font-size:28px;font-weight:bold;text-align:center;vertical-align:middle}.note-editor .note-dropzone.hover{color:#098ddf}.note-editor.dragover .note-dropzone{display:table}.note-editor .note-editing-area{position:relative}.note-editor .note-editing-area .note-editable{outline:0}.note-editor.note-frame{border:1px solid #a9a9a9}.note-editor.note-frame.codeview .note-editing-area .note-editable{display:none}.note-editor.note-frame.codeview .note-editing-area .note-codable{display:block}.note-editor.note-frame .note-editing-area{overflow:hidden}.note-editor.note-frame .note-editing-area .note-editable{padding:10px;overflow:auto;color:#000;background-color:#fff}.note-editor.note-frame .note-editing-area .note-editable[contenteditable="false"]{background-color:#e5e5e5}.note-editor.note-frame .note-editing-area .note-codable{display:none;width:100%;padding:10px;margin-bottom:0;font-family:Menlo,Monaco,monospace,sans-serif;font-size:14px;color:#ccc;background-color:#222;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;resize:none}.note-editor.note-frame.fullscreen{position:fixed;top:0;left:0;z-index:1050;width:100%}.note-editor.note-frame.fullscreen .note-editable{background-color:white}.note-editor.note-frame.fullscreen .note-resizebar{display:none}.note-editor.note-frame .note-statusbar{background-color:#f5f5f5;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.note-editor.note-frame .note-statusbar .note-resizebar{width:100%;height:8px;padding-top:1px;cursor:ns-resize}.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar{width:20px;margin:1px auto;border-top:1px solid #a9a9a9}.note-editor.note-frame .note-placeholder{padding:10px}.note-popover.popover{max-width:none}.note-popover.popover .popover-content a{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.note-popover.popover .arrow{left:20px!important}.note-popover .popover-content,.panel-heading.note-toolbar{padding:0 0 5px 5px;margin:0}.note-popover .popover-content>.btn-group,.panel-heading.note-toolbar>.btn-group{margin-top:5px;margin-right:5px;margin-left:0}.note-popover .popover-content .btn-group .note-table,.panel-heading.note-toolbar .btn-group .note-table{min-width:0;padding:5px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker{font-size:18px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher{position:absolute!important;z-index:3;width:10em;height:10em;cursor:pointer}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted{position:relative!important;z-index:1;width:5em;height:5em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted{position:absolute!important;z-index:2;width:1em;height:1em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover-content .note-style h1,.panel-heading.note-toolbar .note-style h1,.note-popover .popover-content .note-style h2,.panel-heading.note-toolbar .note-style h2,.note-popover .popover-content .note-style h3,.panel-heading.note-toolbar .note-style h3,.note-popover .popover-content .note-style h4,.panel-heading.note-toolbar .note-style h4,.note-popover .popover-content .note-style h5,.panel-heading.note-toolbar .note-style h5,.note-popover .popover-content .note-style h6,.panel-heading.note-toolbar .note-style h6,.note-popover .popover-content .note-style blockquote,.panel-heading.note-toolbar .note-style blockquote{margin:0}.note-popover .popover-content .note-color .dropdown-toggle,.panel-heading.note-toolbar .note-color .dropdown-toggle{width:20px;padding-left:5px}.note-popover .popover-content .note-color .dropdown-menu,.panel-heading.note-toolbar .note-color .dropdown-menu{min-width:340px}.note-popover .popover-content .note-color .dropdown-menu .btn-group,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group{margin:0}.note-popover .popover-content .note-color .dropdown-menu .btn-group:first-child,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group:first-child{margin:0 5px}.note-popover .popover-content .note-color .dropdown-menu .btn-group .note-palette-title,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-palette-title{margin:2px 7px;font-size:12px;text-align:center;border-bottom:1px solid #eee}.note-popover .popover-content .note-color .dropdown-menu .btn-group .note-color-reset,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset{width:100%;padding:0 3px;margin:3px;font-size:11px;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.note-popover .popover-content .note-color .dropdown-menu .btn-group .note-color-row,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-color-row{height:20px}.note-popover .popover-content .note-color .dropdown-menu .btn-group .note-color-reset:hover,.panel-heading.note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset:hover{background:#eee}.note-popover .popover-content .note-para .dropdown-menu,.panel-heading.note-toolbar .note-para .dropdown-menu{min-width:216px;padding:5px}.note-popover .popover-content .note-para .dropdown-menu>div:first-child,.panel-heading.note-toolbar .note-para .dropdown-menu>div:first-child{margin-right:5px}.note-popover .popover-content .dropdown-menu,.panel-heading.note-toolbar .dropdown-menu{min-width:90px}.note-popover .popover-content .dropdown-menu.right,.panel-heading.note-toolbar .dropdown-menu.right{right:0;left:auto}.note-popover .popover-content .dropdown-menu.right::before,.panel-heading.note-toolbar .dropdown-menu.right::before{right:9px;left:auto!important}.note-popover .popover-content .dropdown-menu.right::after,.panel-heading.note-toolbar .dropdown-menu.right::after{right:10px;left:auto!important}.note-popover .popover-content .dropdown-menu.note-check li a i,.panel-heading.note-toolbar .dropdown-menu.note-check li a i{color:deepskyblue;visibility:hidden}.note-popover .popover-content .dropdown-menu.note-check li a.checked i,.panel-heading.note-toolbar .dropdown-menu.note-check li a.checked i{visibility:visible}.note-popover .popover-content .note-fontsize-10,.panel-heading.note-toolbar .note-fontsize-10{font-size:10px}.note-popover .popover-content .note-color-palette,.panel-heading.note-toolbar .note-color-palette{line-height:1}.note-popover .popover-content .note-color-palette div .note-color-btn,.panel-heading.note-toolbar .note-color-palette div .note-color-btn{width:20px;height:20px;padding:0;margin:0;border:1px solid #fff}.note-popover .popover-content .note-color-palette div .note-color-btn:hover,.panel-heading.note-toolbar .note-color-palette div .note-color-btn:hover{border:1px solid #000}.note-dialog>div{display:none}.note-dialog .form-group{margin-right:0;margin-left:0}.note-dialog .note-modal-form{margin:0}.note-dialog .note-image-dialog .note-dropzone{min-height:100px;margin-bottom:10px;font-size:30px;line-height:4;color:lightgray;text-align:center;border:4px dashed lightgray}.note-placeholder{position:absolute;display:none;color:gray}.note-handle .note-control-selection{position:absolute;display:none;border:1px solid black}.note-handle .note-control-selection>div{position:absolute}.note-handle .note-control-selection .note-control-selection-bg{width:100%;height:100%;background-color:black;-webkit-opacity:.3;-khtml-opacity:.3;-moz-opacity:.3;opacity:.3;-ms-filter:alpha(opacity=30);filter:alpha(opacity=30)}.note-handle .note-control-selection .note-control-handle{width:7px;height:7px;border:1px solid black}.note-handle .note-control-selection .note-control-holder{width:7px;height:7px;border:1px solid black}.note-handle .note-control-selection .note-control-sizing{width:7px;height:7px;background-color:white;border:1px solid black}.note-handle .note-control-selection .note-control-nw{top:-5px;left:-5px;border-right:0;border-bottom:0}.note-handle .note-control-selection .note-control-ne{top:-5px;right:-5px;border-bottom:0;border-left:none}.note-handle .note-control-selection .note-control-sw{bottom:-5px;left:-5px;border-top:0;border-right:0}.note-handle .note-control-selection .note-control-se{right:-5px;bottom:-5px;cursor:se-resize}.note-handle .note-control-selection .note-control-se.note-control-holder{cursor:default;border-top:0;border-left:none}.note-handle .note-control-selection .note-control-selection-info{right:0;bottom:0;padding:5px;margin:5px;font-size:12px;color:white;background-color:black;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-opacity:.7;-khtml-opacity:.7;-moz-opacity:.7;opacity:.7;-ms-filter:alpha(opacity=70);filter:alpha(opacity=70)}.note-hint-popover{min-width:100px;padding:2px}.note-hint-popover .popover-content{max-height:150px;padding:3px;overflow:auto}.note-hint-popover .popover-content .note-hint-group .note-hint-item{display:block!important;padding:3px}.note-hint-popover .popover-content .note-hint-group .note-hint-item.active,.note-hint-popover .popover-content .note-hint-group .note-hint-item:hover{display:block;clear:both;font-weight:400;line-height:1.4;color:white;text-decoration:none;white-space:nowrap;cursor:pointer;background-color:#428bca;outline:0}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: summernote-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hyo Seong Choi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -104,9 +104,8 @@ files:
|
|
104
104
|
- vendor/assets/javascripts/summernote/locales/vi-VN.js
|
105
105
|
- vendor/assets/javascripts/summernote/locales/zh-CN.js
|
106
106
|
- vendor/assets/javascripts/summernote/locales/zh-TW.js
|
107
|
-
- vendor/assets/javascripts/summernote/plugin/summernote-ext-hello.js
|
108
|
-
- vendor/assets/javascripts/summernote/plugin/summernote-ext-
|
109
|
-
- vendor/assets/javascripts/summernote/plugin/summernote-ext-video.js
|
107
|
+
- vendor/assets/javascripts/summernote/plugin/hello/summernote-ext-hello.js
|
108
|
+
- vendor/assets/javascripts/summernote/plugin/specialchars/summernote-ext-specialchars.js
|
110
109
|
- vendor/assets/javascripts/summernote/summernote.js
|
111
110
|
- vendor/assets/stylesheets/summernote.css
|
112
111
|
homepage: https://github.com/summernote/summernote-rails
|
@@ -1,89 +0,0 @@
|
|
1
|
-
(function (factory) {
|
2
|
-
/* global define */
|
3
|
-
if (typeof define === 'function' && define.amd) {
|
4
|
-
// AMD. Register as an anonymous module.
|
5
|
-
define(['jquery'], factory);
|
6
|
-
} else {
|
7
|
-
// Browser globals: jQuery
|
8
|
-
factory(window.jQuery);
|
9
|
-
}
|
10
|
-
}(function ($) {
|
11
|
-
// template
|
12
|
-
var tmpl = $.summernote.renderer.getTemplate();
|
13
|
-
|
14
|
-
/**
|
15
|
-
* @class plugin.hello
|
16
|
-
*
|
17
|
-
* Hello Plugin
|
18
|
-
*/
|
19
|
-
$.summernote.addPlugin({
|
20
|
-
/** @property {String} name name of plugin */
|
21
|
-
name: 'hello',
|
22
|
-
/**
|
23
|
-
* @property {Object} buttons
|
24
|
-
* @property {Function} buttons.hello function to make button
|
25
|
-
* @property {Function} buttons.helloDropdown function to make button
|
26
|
-
* @property {Function} buttons.helloImage function to make button
|
27
|
-
*/
|
28
|
-
buttons: { // buttons
|
29
|
-
hello: function (lang, options) {
|
30
|
-
|
31
|
-
return tmpl.iconButton(options.iconPrefix + 'header', {
|
32
|
-
event : 'hello',
|
33
|
-
title: 'hello',
|
34
|
-
hide: true
|
35
|
-
});
|
36
|
-
},
|
37
|
-
helloDropdown: function (lang, options) {
|
38
|
-
|
39
|
-
|
40
|
-
var list = '<li><a data-event="helloDropdown" href="#" data-value="summernote">summernote</a></li>';
|
41
|
-
list += '<li><a data-event="helloDropdown" href="#" data-value="codemirror">Code Mirror</a></li>';
|
42
|
-
var dropdown = '<ul class="dropdown-menu">' + list + '</ul>';
|
43
|
-
|
44
|
-
return tmpl.iconButton(options.iconPrefix + 'header', {
|
45
|
-
title: 'hello',
|
46
|
-
hide: true,
|
47
|
-
dropdown : dropdown
|
48
|
-
});
|
49
|
-
},
|
50
|
-
helloImage : function (lang, options) {
|
51
|
-
return tmpl.iconButton(options.iconPrefix + 'file-image-o', {
|
52
|
-
event : 'helloImage',
|
53
|
-
title: 'helloImage',
|
54
|
-
hide: true
|
55
|
-
});
|
56
|
-
}
|
57
|
-
|
58
|
-
},
|
59
|
-
|
60
|
-
/**
|
61
|
-
* @property {Object} events
|
62
|
-
* @property {Function} events.hello run function when button that has a 'hello' event name fires click
|
63
|
-
* @property {Function} events.helloDropdown run function when button that has a 'helloDropdown' event name fires click
|
64
|
-
* @property {Function} events.helloImage run function when button that has a 'helloImage' event name fires click
|
65
|
-
*/
|
66
|
-
events: { // events
|
67
|
-
hello: function (event, editor, layoutInfo) {
|
68
|
-
// Get current editable node
|
69
|
-
var $editable = layoutInfo.editable();
|
70
|
-
|
71
|
-
// Call insertText with 'hello'
|
72
|
-
editor.insertText($editable, 'hello ');
|
73
|
-
},
|
74
|
-
helloDropdown: function (event, editor, layoutInfo, value) {
|
75
|
-
// Get current editable node
|
76
|
-
var $editable = layoutInfo.editable();
|
77
|
-
|
78
|
-
// Call insertText with 'hello'
|
79
|
-
editor.insertText($editable, 'hello ' + value + '!!!!');
|
80
|
-
},
|
81
|
-
helloImage : function (event, editor, layoutInfo) {
|
82
|
-
var $editable = layoutInfo.editable();
|
83
|
-
|
84
|
-
var img = $('<img src="http://upload.wikimedia.org/wikipedia/commons/b/b0/NewTux.svg" />');
|
85
|
-
editor.insertNode($editable, img[0]);
|
86
|
-
}
|
87
|
-
}
|
88
|
-
});
|
89
|
-
}));
|
@@ -1,270 +0,0 @@
|
|
1
|
-
(function (factory) {
|
2
|
-
/* global define */
|
3
|
-
if (typeof define === 'function' && define.amd) {
|
4
|
-
// AMD. Register as an anonymous module.
|
5
|
-
define(['jquery'], factory);
|
6
|
-
} else {
|
7
|
-
// Browser globals: jQuery
|
8
|
-
factory(window.jQuery);
|
9
|
-
}
|
10
|
-
}(function ($) {
|
11
|
-
// import core class
|
12
|
-
var range = $.summernote.core.range;
|
13
|
-
|
14
|
-
var KEY = {
|
15
|
-
UP: 38,
|
16
|
-
DOWN: 40,
|
17
|
-
ENTER: 13
|
18
|
-
};
|
19
|
-
|
20
|
-
var DROPDOWN_KEYCODES = [KEY.UP, KEY.DOWN, KEY.ENTER];
|
21
|
-
|
22
|
-
/**
|
23
|
-
* @class plugin.hint
|
24
|
-
*
|
25
|
-
* Hint Plugin
|
26
|
-
*/
|
27
|
-
$.summernote.addPlugin({
|
28
|
-
/**
|
29
|
-
* name name of plugin
|
30
|
-
* @property {String}
|
31
|
-
**/
|
32
|
-
name: 'hint',
|
33
|
-
|
34
|
-
/**
|
35
|
-
* @property {Regex}
|
36
|
-
* @interface
|
37
|
-
*/
|
38
|
-
match: /[a-z]+/g,
|
39
|
-
|
40
|
-
/**
|
41
|
-
* create list item template
|
42
|
-
*
|
43
|
-
* @interface
|
44
|
-
* @param {Object} search
|
45
|
-
* @returns {Array} created item list
|
46
|
-
*/
|
47
|
-
template: null,
|
48
|
-
|
49
|
-
/**
|
50
|
-
* create inserted content to add in summernote
|
51
|
-
*
|
52
|
-
* @interface
|
53
|
-
* @param {String} html
|
54
|
-
* @param {String} keyword
|
55
|
-
* @return {HTMLEleemnt|String}
|
56
|
-
*/
|
57
|
-
content: null,
|
58
|
-
|
59
|
-
/**
|
60
|
-
* load search list
|
61
|
-
*
|
62
|
-
* @interface
|
63
|
-
*/
|
64
|
-
load: null,
|
65
|
-
|
66
|
-
/**
|
67
|
-
* @param {jQuery} $node
|
68
|
-
*/
|
69
|
-
scrollTo: function ($node) {
|
70
|
-
var $parent = $node.parent();
|
71
|
-
$parent[0].scrollTop = $node[0].offsetTop - ($parent.innerHeight() / 2);
|
72
|
-
},
|
73
|
-
|
74
|
-
/**
|
75
|
-
* @param {jQuery} $popover
|
76
|
-
*/
|
77
|
-
moveDown: function ($popover) {
|
78
|
-
var index = $popover.find('.active').index();
|
79
|
-
this.activate($popover, (index === -1) ? 0 : (index + 1) % $popover.children().length);
|
80
|
-
},
|
81
|
-
|
82
|
-
/**
|
83
|
-
* @param {jQuery} $popover
|
84
|
-
*/
|
85
|
-
moveUp: function ($popover) {
|
86
|
-
var index = $popover.find('.active').index();
|
87
|
-
this.activate($popover, (index === -1) ? 0 : (index - 1) % $popover.children().length);
|
88
|
-
},
|
89
|
-
|
90
|
-
/**
|
91
|
-
* @param {jQuery} $popover
|
92
|
-
* @param {Number} i
|
93
|
-
*/
|
94
|
-
activate: function ($popover, idx) {
|
95
|
-
idx = idx || 0;
|
96
|
-
|
97
|
-
if (idx < 0) {
|
98
|
-
idx = $popover.children().length - 1;
|
99
|
-
}
|
100
|
-
|
101
|
-
$popover.children().removeClass('active');
|
102
|
-
var $activeItem = $popover.children().eq(idx);
|
103
|
-
$activeItem.addClass('active');
|
104
|
-
|
105
|
-
this.scrollTo($activeItem);
|
106
|
-
},
|
107
|
-
|
108
|
-
/**
|
109
|
-
* @param {jQuery} $popover
|
110
|
-
*/
|
111
|
-
replace: function ($popover) {
|
112
|
-
var wordRange = $popover.data('wordRange');
|
113
|
-
var $activeItem = $popover.find('.active');
|
114
|
-
var content = this.content($activeItem.data('item'));
|
115
|
-
|
116
|
-
if (typeof content === 'string') {
|
117
|
-
content = document.createTextNode(content);
|
118
|
-
}
|
119
|
-
|
120
|
-
$popover.removeData('wordRange');
|
121
|
-
|
122
|
-
wordRange.insertNode(content);
|
123
|
-
range.createFromNode(content).collapse().select();
|
124
|
-
},
|
125
|
-
|
126
|
-
/**
|
127
|
-
* @param {String} keyword
|
128
|
-
* @return {Object|null}
|
129
|
-
*/
|
130
|
-
searchKeyword: function (keyword, callback) {
|
131
|
-
if (this.match.test(keyword)) {
|
132
|
-
var matches = this.match.exec(keyword);
|
133
|
-
this.search(matches[1], callback);
|
134
|
-
} else {
|
135
|
-
callback();
|
136
|
-
}
|
137
|
-
},
|
138
|
-
|
139
|
-
|
140
|
-
createTemplate: function (list) {
|
141
|
-
var items = [];
|
142
|
-
list = list || [];
|
143
|
-
|
144
|
-
for (var i = 0, len = list.length; i < len; i++) {
|
145
|
-
var $item = $('<a class="list-group-item"></a>');
|
146
|
-
$item.append(this.template(list[i]));
|
147
|
-
$item.data('item', list[i]);
|
148
|
-
items.push($item);
|
149
|
-
}
|
150
|
-
|
151
|
-
if (items.length) {
|
152
|
-
items[0].addClass('active');
|
153
|
-
}
|
154
|
-
|
155
|
-
return items;
|
156
|
-
},
|
157
|
-
|
158
|
-
search: function (keyword, callback) {
|
159
|
-
keyword = keyword || '';
|
160
|
-
callback();
|
161
|
-
},
|
162
|
-
|
163
|
-
init : function (layoutInfo) {
|
164
|
-
var self = this;
|
165
|
-
|
166
|
-
var $note = layoutInfo.holder();
|
167
|
-
var $popover = $('<div />').addClass('hint-group').css({
|
168
|
-
'position': 'absolute',
|
169
|
-
'max-height': 150,
|
170
|
-
'z-index' : 999,
|
171
|
-
'overflow' : 'hidden',
|
172
|
-
'display' : 'none',
|
173
|
-
'border' : '1px solid gray',
|
174
|
-
'border-radius' : '5px'
|
175
|
-
});
|
176
|
-
|
177
|
-
$popover.on('click', '.list-group-item', function HintItemClick() {
|
178
|
-
self.replace($popover);
|
179
|
-
|
180
|
-
$popover.hide();
|
181
|
-
$note.summernote('focus');
|
182
|
-
});
|
183
|
-
|
184
|
-
$(document).on('click', function HintClick() {
|
185
|
-
$popover.hide();
|
186
|
-
});
|
187
|
-
|
188
|
-
$note.on('summernote.keydown', function HintKeyDown(customEvent, nativeEvent) {
|
189
|
-
if ($popover.css('display') !== 'block') {
|
190
|
-
return true;
|
191
|
-
}
|
192
|
-
|
193
|
-
if (nativeEvent.keyCode === KEY.DOWN) {
|
194
|
-
nativeEvent.preventDefault();
|
195
|
-
self.moveDown($popover);
|
196
|
-
} else if (nativeEvent.keyCode === KEY.UP) {
|
197
|
-
nativeEvent.preventDefault();
|
198
|
-
self.moveUp($popover);
|
199
|
-
} else if (nativeEvent.keyCode === KEY.ENTER) {
|
200
|
-
nativeEvent.preventDefault();
|
201
|
-
self.replace($popover);
|
202
|
-
|
203
|
-
$popover.hide();
|
204
|
-
$note.summernote('focus');
|
205
|
-
}
|
206
|
-
});
|
207
|
-
|
208
|
-
var timer = null;
|
209
|
-
$note.on('summernote.keyup', function HintKeyUp(customEvent, nativeEvent) {
|
210
|
-
if (DROPDOWN_KEYCODES.indexOf(nativeEvent.keyCode) > -1) {
|
211
|
-
if (nativeEvent.keyCode === KEY.ENTER) {
|
212
|
-
if ($popover.css('display') === 'block') {
|
213
|
-
return false;
|
214
|
-
}
|
215
|
-
}
|
216
|
-
|
217
|
-
} else {
|
218
|
-
|
219
|
-
clearTimeout(timer);
|
220
|
-
timer = setTimeout(function () {
|
221
|
-
var range = $note.summernote('createRange');
|
222
|
-
var word = range.getWordRange();
|
223
|
-
|
224
|
-
self.searchKeyword(word.toString(), function (searchList) {
|
225
|
-
if (!searchList) {
|
226
|
-
$popover.hide();
|
227
|
-
return;
|
228
|
-
}
|
229
|
-
|
230
|
-
if (searchList && !searchList.length) {
|
231
|
-
$popover.hide();
|
232
|
-
return;
|
233
|
-
}
|
234
|
-
|
235
|
-
layoutInfo.popover().append($popover);
|
236
|
-
|
237
|
-
// popover below placeholder.
|
238
|
-
var rects = word.getClientRects();
|
239
|
-
var rect = rects[rects.length - 1];
|
240
|
-
$popover.html(self.createTemplate(searchList)).css({
|
241
|
-
left: rect.left,
|
242
|
-
top: rect.top + rect.height
|
243
|
-
}).data('wordRange', word).show();
|
244
|
-
});
|
245
|
-
}, self.throttle);
|
246
|
-
|
247
|
-
}
|
248
|
-
});
|
249
|
-
|
250
|
-
this.load($popover);
|
251
|
-
},
|
252
|
-
|
253
|
-
throttle : 50,
|
254
|
-
|
255
|
-
// FIXME Summernote doesn't support event pipeline yet.
|
256
|
-
// - Plugin -> Base Code
|
257
|
-
events: {
|
258
|
-
ENTER: function (e, editor, layoutInfo) {
|
259
|
-
|
260
|
-
if (layoutInfo.popover().find('.hint-group').css('display') !== 'block') {
|
261
|
-
// apply default enter key
|
262
|
-
layoutInfo.holder().summernote('insertParagraph');
|
263
|
-
}
|
264
|
-
|
265
|
-
// prevent ENTER key
|
266
|
-
return true;
|
267
|
-
}
|
268
|
-
}
|
269
|
-
});
|
270
|
-
}));
|
@@ -1,573 +0,0 @@
|
|
1
|
-
(function (factory) {
|
2
|
-
/* global define */
|
3
|
-
if (typeof define === 'function' && define.amd) {
|
4
|
-
// AMD. Register as an anonymous module.
|
5
|
-
define(['jquery'], factory);
|
6
|
-
} else {
|
7
|
-
// Browser globals: jQuery
|
8
|
-
factory(window.jQuery);
|
9
|
-
}
|
10
|
-
}(function ($) {
|
11
|
-
// template
|
12
|
-
var tmpl = $.summernote.renderer.getTemplate();
|
13
|
-
|
14
|
-
// core functions: range, dom
|
15
|
-
var range = $.summernote.core.range;
|
16
|
-
var dom = $.summernote.core.dom;
|
17
|
-
|
18
|
-
/**
|
19
|
-
* createVideoNode
|
20
|
-
*
|
21
|
-
* @member plugin.video
|
22
|
-
* @private
|
23
|
-
* @param {String} url
|
24
|
-
* @return {Node}
|
25
|
-
*/
|
26
|
-
var createVideoNode = function (url) {
|
27
|
-
// video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm)
|
28
|
-
var ytRegExp = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/;
|
29
|
-
var ytMatch = url.match(ytRegExp);
|
30
|
-
|
31
|
-
var igRegExp = /\/\/instagram.com\/p\/(.[a-zA-Z0-9]*)/;
|
32
|
-
var igMatch = url.match(igRegExp);
|
33
|
-
|
34
|
-
var vRegExp = /\/\/vine.co\/v\/(.[a-zA-Z0-9]*)/;
|
35
|
-
var vMatch = url.match(vRegExp);
|
36
|
-
|
37
|
-
var vimRegExp = /\/\/(player.)?vimeo.com\/([a-z]*\/)*([0-9]{6,11})[?]?.*/;
|
38
|
-
var vimMatch = url.match(vimRegExp);
|
39
|
-
|
40
|
-
var dmRegExp = /.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/;
|
41
|
-
var dmMatch = url.match(dmRegExp);
|
42
|
-
|
43
|
-
var youkuRegExp = /\/\/v\.youku\.com\/v_show\/id_(\w+)=*\.html/;
|
44
|
-
var youkuMatch = url.match(youkuRegExp);
|
45
|
-
|
46
|
-
var mp4RegExp = /^.+.(mp4|m4v)$/;
|
47
|
-
var mp4Match = url.match(mp4RegExp);
|
48
|
-
|
49
|
-
var oggRegExp = /^.+.(ogg|ogv)$/;
|
50
|
-
var oggMatch = url.match(oggRegExp);
|
51
|
-
|
52
|
-
var webmRegExp = /^.+.(webm)$/;
|
53
|
-
var webmMatch = url.match(webmRegExp);
|
54
|
-
|
55
|
-
var $video;
|
56
|
-
if (ytMatch && ytMatch[1].length === 11) {
|
57
|
-
var youtubeId = ytMatch[1];
|
58
|
-
$video = $('<iframe>')
|
59
|
-
.attr('frameborder', 0)
|
60
|
-
.attr('src', '//www.youtube.com/embed/' + youtubeId)
|
61
|
-
.attr('width', '640').attr('height', '360');
|
62
|
-
} else if (igMatch && igMatch[0].length) {
|
63
|
-
$video = $('<iframe>')
|
64
|
-
.attr('frameborder', 0)
|
65
|
-
.attr('src', igMatch[0] + '/embed/')
|
66
|
-
.attr('width', '612').attr('height', '710')
|
67
|
-
.attr('scrolling', 'no')
|
68
|
-
.attr('allowtransparency', 'true');
|
69
|
-
} else if (vMatch && vMatch[0].length) {
|
70
|
-
$video = $('<iframe>')
|
71
|
-
.attr('frameborder', 0)
|
72
|
-
.attr('src', vMatch[0] + '/embed/simple')
|
73
|
-
.attr('width', '600').attr('height', '600')
|
74
|
-
.attr('class', 'vine-embed');
|
75
|
-
} else if (vimMatch && vimMatch[3].length) {
|
76
|
-
$video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')
|
77
|
-
.attr('frameborder', 0)
|
78
|
-
.attr('src', '//player.vimeo.com/video/' + vimMatch[3])
|
79
|
-
.attr('width', '640').attr('height', '360');
|
80
|
-
} else if (dmMatch && dmMatch[2].length) {
|
81
|
-
$video = $('<iframe>')
|
82
|
-
.attr('frameborder', 0)
|
83
|
-
.attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2])
|
84
|
-
.attr('width', '640').attr('height', '360');
|
85
|
-
} else if (youkuMatch && youkuMatch[1].length) {
|
86
|
-
$video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')
|
87
|
-
.attr('frameborder', 0)
|
88
|
-
.attr('height', '498')
|
89
|
-
.attr('width', '510')
|
90
|
-
.attr('src', '//player.youku.com/embed/' + youkuMatch[1]);
|
91
|
-
} else if (mp4Match || oggMatch || webmMatch) {
|
92
|
-
$video = $('<video controls>')
|
93
|
-
.attr('src', url)
|
94
|
-
.attr('width', '640').attr('height', '360');
|
95
|
-
} else {
|
96
|
-
// this is not a known video link. Now what, Cat? Now what?
|
97
|
-
return false;
|
98
|
-
}
|
99
|
-
|
100
|
-
return $video[0];
|
101
|
-
};
|
102
|
-
|
103
|
-
/**
|
104
|
-
* @member plugin.video
|
105
|
-
* @private
|
106
|
-
* @param {jQuery} $editable
|
107
|
-
* @return {String}
|
108
|
-
*/
|
109
|
-
var getTextOnRange = function ($editable) {
|
110
|
-
$editable.focus();
|
111
|
-
|
112
|
-
var rng = range.create();
|
113
|
-
|
114
|
-
// if range on anchor, expand range with anchor
|
115
|
-
if (rng.isOnAnchor()) {
|
116
|
-
var anchor = dom.ancestor(rng.sc, dom.isAnchor);
|
117
|
-
rng = range.createFromNode(anchor);
|
118
|
-
}
|
119
|
-
|
120
|
-
return rng.toString();
|
121
|
-
};
|
122
|
-
|
123
|
-
/**
|
124
|
-
* toggle button status
|
125
|
-
*
|
126
|
-
* @member plugin.video
|
127
|
-
* @private
|
128
|
-
* @param {jQuery} $btn
|
129
|
-
* @param {Boolean} isEnable
|
130
|
-
*/
|
131
|
-
var toggleBtn = function ($btn, isEnable) {
|
132
|
-
$btn.toggleClass('disabled', !isEnable);
|
133
|
-
$btn.attr('disabled', !isEnable);
|
134
|
-
};
|
135
|
-
|
136
|
-
/**
|
137
|
-
* Show video dialog and set event handlers on dialog controls.
|
138
|
-
*
|
139
|
-
* @member plugin.video
|
140
|
-
* @private
|
141
|
-
* @param {jQuery} $dialog
|
142
|
-
* @param {jQuery} $dialog
|
143
|
-
* @param {Object} text
|
144
|
-
* @return {Promise}
|
145
|
-
*/
|
146
|
-
var showVideoDialog = function ($editable, $dialog, text) {
|
147
|
-
return $.Deferred(function (deferred) {
|
148
|
-
var $videoDialog = $dialog.find('.note-video-dialog');
|
149
|
-
|
150
|
-
var $videoUrl = $videoDialog.find('.note-video-url'),
|
151
|
-
$videoBtn = $videoDialog.find('.note-video-btn');
|
152
|
-
|
153
|
-
$videoDialog.one('shown.bs.modal', function () {
|
154
|
-
$videoUrl.val(text).on('input', function () {
|
155
|
-
toggleBtn($videoBtn, $videoUrl.val());
|
156
|
-
}).trigger('focus');
|
157
|
-
|
158
|
-
$videoBtn.click(function (event) {
|
159
|
-
event.preventDefault();
|
160
|
-
|
161
|
-
deferred.resolve($videoUrl.val());
|
162
|
-
$videoDialog.modal('hide');
|
163
|
-
});
|
164
|
-
}).one('hidden.bs.modal', function () {
|
165
|
-
$videoUrl.off('input');
|
166
|
-
$videoBtn.off('click');
|
167
|
-
|
168
|
-
if (deferred.state() === 'pending') {
|
169
|
-
deferred.reject();
|
170
|
-
}
|
171
|
-
}).modal('show');
|
172
|
-
});
|
173
|
-
};
|
174
|
-
|
175
|
-
/**
|
176
|
-
* @class plugin.video
|
177
|
-
*
|
178
|
-
* Video Plugin
|
179
|
-
*
|
180
|
-
* video plugin is to make embeded video tag.
|
181
|
-
*
|
182
|
-
* ### load script
|
183
|
-
*
|
184
|
-
* ```
|
185
|
-
* < script src="plugin/summernote-ext-video.js"></script >
|
186
|
-
* ```
|
187
|
-
*
|
188
|
-
* ### use a plugin in toolbar
|
189
|
-
* ```
|
190
|
-
* $("#editor").summernote({
|
191
|
-
* ...
|
192
|
-
* toolbar : [
|
193
|
-
* ['group', [ 'video' ]]
|
194
|
-
* ]
|
195
|
-
* ...
|
196
|
-
* });
|
197
|
-
* ```
|
198
|
-
*/
|
199
|
-
$.summernote.addPlugin({
|
200
|
-
/** @property {String} name name of plugin */
|
201
|
-
name: 'video',
|
202
|
-
/**
|
203
|
-
* @property {Object} buttons
|
204
|
-
* @property {function(object): string} buttons.video
|
205
|
-
*/
|
206
|
-
buttons: {
|
207
|
-
video: function (lang, options) {
|
208
|
-
return tmpl.iconButton(options.iconPrefix + 'youtube-play', {
|
209
|
-
event: 'showVideoDialog',
|
210
|
-
title: lang.video.video,
|
211
|
-
hide: true
|
212
|
-
});
|
213
|
-
}
|
214
|
-
},
|
215
|
-
|
216
|
-
/**
|
217
|
-
* @property {Object} dialogs
|
218
|
-
* @property {function(object, object): string} dialogs.video
|
219
|
-
*/
|
220
|
-
dialogs: {
|
221
|
-
video: function (lang) {
|
222
|
-
var body = '<div class="form-group row-fluid">' +
|
223
|
-
'<label>' + lang.video.url + ' <small class="text-muted">' + lang.video.providers + '</small></label>' +
|
224
|
-
'<input class="note-video-url form-control span12" type="text" />' +
|
225
|
-
'</div>';
|
226
|
-
var footer = '<button href="#" class="btn btn-primary note-video-btn disabled" disabled>' + lang.video.insert + '</button>';
|
227
|
-
return tmpl.dialog('note-video-dialog', lang.video.insert, body, footer);
|
228
|
-
}
|
229
|
-
},
|
230
|
-
/**
|
231
|
-
* @property {Object} events
|
232
|
-
* @property {Function} events.showVideoDialog
|
233
|
-
*/
|
234
|
-
events: {
|
235
|
-
showVideoDialog: function (event, editor, layoutInfo) {
|
236
|
-
var $dialog = layoutInfo.dialog(),
|
237
|
-
$editable = layoutInfo.editable(),
|
238
|
-
text = getTextOnRange($editable);
|
239
|
-
|
240
|
-
// save current range
|
241
|
-
editor.saveRange($editable);
|
242
|
-
|
243
|
-
showVideoDialog($editable, $dialog, text).then(function (url) {
|
244
|
-
// when ok button clicked
|
245
|
-
|
246
|
-
// restore range
|
247
|
-
editor.restoreRange($editable);
|
248
|
-
|
249
|
-
// build node
|
250
|
-
var $node = createVideoNode(url);
|
251
|
-
|
252
|
-
if ($node) {
|
253
|
-
// insert video node
|
254
|
-
editor.insertNode($editable, $node);
|
255
|
-
}
|
256
|
-
}).fail(function () {
|
257
|
-
// when cancel button clicked
|
258
|
-
editor.restoreRange($editable);
|
259
|
-
});
|
260
|
-
}
|
261
|
-
},
|
262
|
-
|
263
|
-
// define language
|
264
|
-
langs: {
|
265
|
-
'en-US': {
|
266
|
-
video: {
|
267
|
-
video: 'Video',
|
268
|
-
videoLink: 'Video Link',
|
269
|
-
insert: 'Insert Video',
|
270
|
-
url: 'Video URL?',
|
271
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'
|
272
|
-
}
|
273
|
-
},
|
274
|
-
'ar-AR': {
|
275
|
-
video: {
|
276
|
-
video: 'فيديو',
|
277
|
-
videoLink: 'رابط الفيديو',
|
278
|
-
insert: 'إدراج الفيديو',
|
279
|
-
url: 'رابط الفيديو',
|
280
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)'
|
281
|
-
}
|
282
|
-
},
|
283
|
-
'ca-ES': {
|
284
|
-
video: {
|
285
|
-
video: 'Video',
|
286
|
-
videoLink: 'Enllaç del video',
|
287
|
-
insert: 'Inserir video',
|
288
|
-
url: 'URL del video?',
|
289
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, o Youku)'
|
290
|
-
}
|
291
|
-
},
|
292
|
-
'cs-CZ': {
|
293
|
-
video: {
|
294
|
-
video: 'Video',
|
295
|
-
videoLink: 'Odkaz videa',
|
296
|
-
insert: 'Vložit video',
|
297
|
-
url: 'URL videa?',
|
298
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion nebo Youku)'
|
299
|
-
}
|
300
|
-
},
|
301
|
-
'da-DK': {
|
302
|
-
video: {
|
303
|
-
video: 'Video',
|
304
|
-
videoLink: 'Video Link',
|
305
|
-
insert: 'Indsæt Video',
|
306
|
-
url: 'Video URL?',
|
307
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)'
|
308
|
-
}
|
309
|
-
},
|
310
|
-
'de-DE': {
|
311
|
-
video: {
|
312
|
-
video: 'Video',
|
313
|
-
videoLink: 'Video Link',
|
314
|
-
insert: 'Video einfügen',
|
315
|
-
url: 'Video URL?',
|
316
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, oder Youku)'
|
317
|
-
}
|
318
|
-
},
|
319
|
-
'es-ES': {
|
320
|
-
video: {
|
321
|
-
video: 'Video',
|
322
|
-
videoLink: 'Link del video',
|
323
|
-
insert: 'Insertar video',
|
324
|
-
url: '¿URL del video?',
|
325
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, o Youku)'
|
326
|
-
}
|
327
|
-
},
|
328
|
-
'es-EU': {
|
329
|
-
video: {
|
330
|
-
video: 'Bideoa',
|
331
|
-
videoLink: 'Bideorako esteka',
|
332
|
-
insert: 'Bideo berri bat txertatu',
|
333
|
-
url: 'Bideoaren URL helbidea',
|
334
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, edo DailyMotion)'
|
335
|
-
}
|
336
|
-
},
|
337
|
-
'fa-IR': {
|
338
|
-
video: {
|
339
|
-
video: 'ویدیو',
|
340
|
-
videoLink: 'لینک ویدیو',
|
341
|
-
insert: 'افزودن ویدیو',
|
342
|
-
url: 'آدرس ویدیو ؟',
|
343
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, یا Youku)'
|
344
|
-
}
|
345
|
-
},
|
346
|
-
'fi-FI': {
|
347
|
-
video: {
|
348
|
-
video: 'Video',
|
349
|
-
videoLink: 'Linkki videoon',
|
350
|
-
insert: 'Lisää video',
|
351
|
-
url: 'Videon URL-osoite?',
|
352
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion tai Youku)'
|
353
|
-
}
|
354
|
-
},
|
355
|
-
'fr-FR': {
|
356
|
-
video: {
|
357
|
-
video: 'Vidéo',
|
358
|
-
videoLink: 'Lien vidéo',
|
359
|
-
insert: 'Insérer une vidéo',
|
360
|
-
url: 'URL de la vidéo',
|
361
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)'
|
362
|
-
}
|
363
|
-
},
|
364
|
-
'he-IL': {
|
365
|
-
video: {
|
366
|
-
video: 'סרטון',
|
367
|
-
videoLink: 'קישור לסרטון',
|
368
|
-
insert: 'הוסף סרטון',
|
369
|
-
url: 'קישור לסרטון',
|
370
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion או Youku)'
|
371
|
-
}
|
372
|
-
},
|
373
|
-
'hu-HU': {
|
374
|
-
video: {
|
375
|
-
video: 'Videó',
|
376
|
-
videoLink: 'Videó hivatkozás',
|
377
|
-
insert: 'Videó beszúrása',
|
378
|
-
url: 'Videó URL címe',
|
379
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, vagy Youku)'
|
380
|
-
}
|
381
|
-
},
|
382
|
-
'id-ID': {
|
383
|
-
video: {
|
384
|
-
video: 'Video',
|
385
|
-
videoLink: 'Link video',
|
386
|
-
insert: 'Sisipkan video',
|
387
|
-
url: 'Tautan video',
|
388
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, atau Youku)'
|
389
|
-
}
|
390
|
-
},
|
391
|
-
'it-IT': {
|
392
|
-
video: {
|
393
|
-
video: 'Video',
|
394
|
-
videoLink: 'Collegamento ad un Video',
|
395
|
-
insert: 'Inserisci Video',
|
396
|
-
url: 'URL del Video',
|
397
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)'
|
398
|
-
}
|
399
|
-
},
|
400
|
-
'ja-JP': {
|
401
|
-
video: {
|
402
|
-
video: '動画',
|
403
|
-
videoLink: '動画リンク',
|
404
|
-
insert: '動画挿入',
|
405
|
-
url: '動画のURL',
|
406
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku)'
|
407
|
-
}
|
408
|
-
},
|
409
|
-
'ko-KR': {
|
410
|
-
video: {
|
411
|
-
video: '동영상',
|
412
|
-
videoLink: '동영상 링크',
|
413
|
-
insert: '동영상 추가',
|
414
|
-
url: '동영상 URL',
|
415
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku 사용 가능)'
|
416
|
-
}
|
417
|
-
},
|
418
|
-
'nb-NO': {
|
419
|
-
video: {
|
420
|
-
video: 'Video',
|
421
|
-
videoLink: 'Videolenke',
|
422
|
-
insert: 'Sett inn video',
|
423
|
-
url: 'Video-URL',
|
424
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)'
|
425
|
-
}
|
426
|
-
},
|
427
|
-
'nl-NL': {
|
428
|
-
video: {
|
429
|
-
video: 'Video',
|
430
|
-
videoLink: 'Video link',
|
431
|
-
insert: 'Video invoegen',
|
432
|
-
url: 'URL van de video',
|
433
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion of Youku)'
|
434
|
-
}
|
435
|
-
},
|
436
|
-
'pl-PL': {
|
437
|
-
video: {
|
438
|
-
video: 'Wideo',
|
439
|
-
videoLink: 'Adres wideo',
|
440
|
-
insert: 'Wstaw wideo',
|
441
|
-
url: 'Adres wideo',
|
442
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, lub Youku)'
|
443
|
-
}
|
444
|
-
},
|
445
|
-
'pt-BR': {
|
446
|
-
video: {
|
447
|
-
video: 'Vídeo',
|
448
|
-
videoLink: 'Link para vídeo',
|
449
|
-
insert: 'Inserir vídeo',
|
450
|
-
url: 'URL do vídeo?',
|
451
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, ou Youku)'
|
452
|
-
}
|
453
|
-
},
|
454
|
-
'ro-RO': {
|
455
|
-
video: {
|
456
|
-
video: 'Video',
|
457
|
-
videoLink: 'Link video',
|
458
|
-
insert: 'Inserează video',
|
459
|
-
url: 'URL video?',
|
460
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, sau Youku)'
|
461
|
-
}
|
462
|
-
},
|
463
|
-
'ru-RU': {
|
464
|
-
video: {
|
465
|
-
video: 'Видео',
|
466
|
-
videoLink: 'Ссылка на видео',
|
467
|
-
insert: 'Вставить видео',
|
468
|
-
url: 'URL видео',
|
469
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)'
|
470
|
-
}
|
471
|
-
},
|
472
|
-
'sk-SK': {
|
473
|
-
video: {
|
474
|
-
video: 'Video',
|
475
|
-
videoLink: 'Odkaz videa',
|
476
|
-
insert: 'Vložiť video',
|
477
|
-
url: 'URL videa?',
|
478
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion nebo Youku)'
|
479
|
-
}
|
480
|
-
},
|
481
|
-
'sl-SI': {
|
482
|
-
video: {
|
483
|
-
video: 'Video',
|
484
|
-
videoLink: 'Video povezava',
|
485
|
-
insert: 'Vstavi video',
|
486
|
-
url: 'Povezava do videa',
|
487
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ali Youku)'
|
488
|
-
}
|
489
|
-
},
|
490
|
-
'sr-RS': {
|
491
|
-
video: {
|
492
|
-
video: 'Видео',
|
493
|
-
videoLink: 'Веза ка видеу',
|
494
|
-
insert: 'Уметни видео',
|
495
|
-
url: 'URL видео',
|
496
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)'
|
497
|
-
}
|
498
|
-
},
|
499
|
-
'sr-RS-Latin': {
|
500
|
-
video: {
|
501
|
-
video: 'Video',
|
502
|
-
videoLink: 'Veza ka videu',
|
503
|
-
insert: 'Umetni video',
|
504
|
-
url: 'URL video',
|
505
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ili Youku)'
|
506
|
-
}
|
507
|
-
},
|
508
|
-
'sv-SE': {
|
509
|
-
video: {
|
510
|
-
video: 'Filmklipp',
|
511
|
-
videoLink: 'Länk till filmklipp',
|
512
|
-
insert: 'Infoga filmklipp',
|
513
|
-
url: 'Länk till filmklipp',
|
514
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)'
|
515
|
-
}
|
516
|
-
},
|
517
|
-
'th-TH': {
|
518
|
-
video: {
|
519
|
-
video: 'วีดีโอ',
|
520
|
-
videoLink: 'ลิงก์ของวีดีโอ',
|
521
|
-
insert: 'แทรกวีดีโอ',
|
522
|
-
url: 'ที่อยู่ URL ของวีดีโอ?',
|
523
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion หรือ Youku)'
|
524
|
-
}
|
525
|
-
},
|
526
|
-
'tr-TR': {
|
527
|
-
video: {
|
528
|
-
video: 'Video',
|
529
|
-
videoLink: 'Video bağlantısı',
|
530
|
-
insert: 'Video ekle',
|
531
|
-
url: 'Video bağlantısı?',
|
532
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion veya Youku)'
|
533
|
-
}
|
534
|
-
},
|
535
|
-
'uk-UA': {
|
536
|
-
video: {
|
537
|
-
video: 'Відео',
|
538
|
-
videoLink: 'Посилання на відео',
|
539
|
-
insert: 'Вставити відео',
|
540
|
-
url: 'URL відео',
|
541
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion чи Youku)'
|
542
|
-
}
|
543
|
-
},
|
544
|
-
'vi-VN': {
|
545
|
-
video: {
|
546
|
-
video: 'Video',
|
547
|
-
videoLink: 'Đường Dẫn đến Video',
|
548
|
-
insert: 'Chèn Video',
|
549
|
-
url: 'URL',
|
550
|
-
providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion và Youku)'
|
551
|
-
}
|
552
|
-
},
|
553
|
-
'zh-CN': {
|
554
|
-
video: {
|
555
|
-
video: '视频',
|
556
|
-
videoLink: '视频链接',
|
557
|
-
insert: '插入视频',
|
558
|
-
url: '视频地址',
|
559
|
-
providers: '(优酷, Instagram, DailyMotion, Youtube等)'
|
560
|
-
}
|
561
|
-
},
|
562
|
-
'zh-TW': {
|
563
|
-
video: {
|
564
|
-
video: '影片',
|
565
|
-
videoLink: '影片連結',
|
566
|
-
insert: '插入影片',
|
567
|
-
url: '影片網址',
|
568
|
-
providers: '(優酷, Instagram, DailyMotion, Youtube等)'
|
569
|
-
}
|
570
|
-
}
|
571
|
-
}
|
572
|
-
});
|
573
|
-
}));
|