diff --git a/app/app/components/document/edit-tools.js b/app/app/components/document/edit-tools.js index e9b785a2..8d6059c9 100644 --- a/app/app/components/document/edit-tools.js +++ b/app/app/components/document/edit-tools.js @@ -31,6 +31,10 @@ export default Ember.Component.extend(TooltipMixin, { { label: 'Attachment', selected: false }, { label: 'Search', selected: false } ], + buttonId: Ember.computed('page', function () { + let page = this.get('page'); + return `content-linker-button-${page.id}`; + }), showSections: Ember.computed('tabs.@each.selected', function () { return this.get('tabs').findBy('label', 'Section').selected; diff --git a/app/app/components/section/base-editor-inline.js b/app/app/components/section/base-editor-inline.js index 2ce3a97a..1535dd95 100644 --- a/app/app/components/section/base-editor-inline.js +++ b/app/app/components/section/base-editor-inline.js @@ -56,6 +56,9 @@ export default Ember.Component.extend({ if (is.not.null(drop)) { drop.destroy(); } + + Mousetrap.unbind('esc'); + Mousetrap.unbind(['ctrl+s', 'command+s']); }, actions: { @@ -70,7 +73,7 @@ export default Ember.Component.extend({ position: "bottom right", openOn: "always", constrainToWindow: true, - constrainToScrollParent: false, + constrainToScrollParent: false, tetherOptions: { offset: "5px 0", targetOffset: "10px 0" @@ -91,6 +94,10 @@ export default Ember.Component.extend({ return; } + if (this.get('isDestroyed') || this.get('isDestroying')) { + return; + } + this.attrs.onAction(this.get('page.title')); }, diff --git a/app/app/components/section/code/type-editor.js b/app/app/components/section/code/type-editor.js index 2bf87e5a..6890963c 100644 --- a/app/app/components/section/code/type-editor.js +++ b/app/app/components/section/code/type-editor.js @@ -83,6 +83,10 @@ export default Ember.Component.extend(TooltipMixin, { dragDrop: false }); + CodeMirror.commands.save = function(/*instance*/){ + Mousetrap.trigger('ctrl+s'); + }; + this.set('codeEditor', editor); let syntax = this.get("codeSyntax"); diff --git a/app/app/components/section/markdown/type-editor.js b/app/app/components/section/markdown/type-editor.js index f532be08..8dac5289 100644 --- a/app/app/components/section/markdown/type-editor.js +++ b/app/app/components/section/markdown/type-editor.js @@ -111,6 +111,10 @@ export default Ember.Component.extend(TooltipMixin, { dragDrop: false, extraKeys: {"Enter": "newlineAndIndentContinueMarkdownList"} }); + + CodeMirror.commands.save = function(/*instance*/){ + Mousetrap.trigger('ctrl+s'); + }; this.set('codeEditor', editor); diff --git a/app/app/components/section/wysiwyg/type-editor.js b/app/app/components/section/wysiwyg/type-editor.js index 571ce005..1551ccc0 100644 --- a/app/app/components/section/wysiwyg/type-editor.js +++ b/app/app/components/section/wysiwyg/type-editor.js @@ -19,6 +19,10 @@ export default Ember.Component.extend({ appMeta: service(), link: service(), pageBody: "", + editorId: Ember.computed('page', function () { + let page = this.get('page'); + return `wysiwyg-editor-${page.id}`; + }), didReceiveAttrs() { this.set('pageBody', this.get('meta.rawBody')); @@ -26,13 +30,13 @@ export default Ember.Component.extend({ didInsertElement() { let options = { - selector: "#rich-text-editor-" + this.get('page.id'), + selector: "#" + this.get('editorId'), relative_urls: false, cache_suffix: "?v=443", browser_spellcheck: false, gecko_spellcheck: false, theme: "modern", - skin: 'charcoal', + skin: 'documize', statusbar: false, inline: true, entity_encoding: "raw", @@ -49,6 +53,17 @@ export default Ember.Component.extend({ inline: 'i' } }, + codesample_languages: [ + {text: 'HTML/XML', value: 'markup'}, + {text: 'JavaScript', value: 'javascript'}, + {text: 'CSS', value: 'css'}, + {text: 'PHP', value: 'php'}, + {text: 'Ruby', value: 'ruby'}, + {text: 'Python', value: 'python'}, + {text: 'Java', value: 'java'}, + {text: 'C', value: 'c'}, + {text: 'C#', value: 'csharp'}, + {text: 'C++', value: 'cpp'}], extended_valid_elements: "b,i,b/strong,i/em", plugins: [ 'advlist autolink lists link image charmap print preview hr anchor pagebreak', @@ -78,25 +93,27 @@ export default Ember.Component.extend({ }, willDestroyElement() { - tinymce.remove(); + tinymce.EditorManager.execCommand('mceRemoveEditor', true, this.get('editorId')); }, actions: { onInsertLink(link) { - let userSelection = tinymce.activeEditor.selection.getContent(); + let editor = tinymce.EditorManager.get(this.get('editorId')); + let userSelection = editor.selection.getContent(); if (is.not.empty(userSelection)) { Ember.set(link, 'title', userSelection); } let linkHTML = this.get('link').buildLink(link); - tinymce.activeEditor.insertContent(linkHTML); + editor.insertContent(linkHTML); return true; }, isDirty() { - return is.not.undefined(tinymce) && is.not.undefined(tinymce.activeEditor) && tinymce.activeEditor.isDirty(); + let editor = tinymce.EditorManager.get(this.get('editorId')); + return is.not.undefined(tinymce) && is.not.undefined(editor) && editor.isDirty(); }, onCancel() { @@ -106,9 +123,10 @@ export default Ember.Component.extend({ onAction(title) { let page = this.get('page'); let meta = this.get('meta'); + let editor = tinymce.EditorManager.get(this.get('editorId')); page.set('title', title); - meta.set('rawBody', tinymce.activeEditor.getContent()); + meta.set('rawBody', editor.getContent()); this.attrs.onAction(page, meta); } diff --git a/app/app/templates/components/document/document-heading.hbs b/app/app/templates/components/document/document-heading.hbs index 6daf8bc3..fe0e3805 100644 --- a/app/app/templates/components/document/document-heading.hbs +++ b/app/app/templates/components/document/document-heading.hbs @@ -6,16 +6,18 @@ {{else}}