diff --git a/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee b/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee
index 06c35b5a..bdb123a7 100644
--- a/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee
+++ b/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee
@@ -47,6 +47,7 @@ class WysiwygCodeHightlighterService
code.classList.add('has-code-lan-selector') # prevent multi instanciate
currentLan = @.getLanguageInClassList(code.classList)
+ code.parentNode.classList.add('language-' + currentLan)
id = new Date().getTime()
@@ -63,8 +64,9 @@ class WysiwygCodeHightlighterService
languageClass = _.find code.classList, (className) ->
return className && className.indexOf('language-') != -1
- code.classList.remove(languageClass.replace('language-', ''))
- code.classList.remove(languageClass)
+ if languageClass
+ code.classList.remove(languageClass.replace('language-', ''))
+ code.classList.remove(languageClass)
code.classList.add('language-' + lan)
code.classList.add(lan)
@@ -73,7 +75,6 @@ class WysiwygCodeHightlighterService
code.dataset.tab = tab
-
if !code.dataset.tabId
code.dataset.tabId = id
code.classList.add(id)
diff --git a/app/modules/components/wysiwyg/wysiwyg.directive.coffee b/app/modules/components/wysiwyg/wysiwyg.directive.coffee
index 738cb508..2d8cfbae 100644
--- a/app/modules/components/wysiwyg/wysiwyg.directive.coffee
+++ b/app/modules/components/wysiwyg/wysiwyg.directive.coffee
@@ -72,7 +72,11 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad
getButton: () ->
return this.button
handleClick: (event) ->
- document.execCommand('justifyRight', false)
+ range = MediumEditor.selection.getSelectionRange(document)
+ if range.commonAncestorContainer.parentNode.style.textAlign == 'right'
+ document.execCommand('justifyLeft', false)
+ else
+ document.execCommand('justifyRight', false)
})
@@ -108,6 +112,13 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad
addCodeBlockAndHightlight(range, this.base)
})
+ CustomPasteHandler = MediumEditor.extensions.paste.extend({
+ doPaste: (pastedHTML, pastedPlain, editable) ->
+ html = MediumEditor.util.htmlEntities(pastedPlain);
+
+ MediumEditor.util.insertHTMLCommand(this.document, html);
+ })
+
# bug
#
the enter key press doesn't work
oldIsBlockContainer = MediumEditor.util.isBlockContainer
@@ -369,6 +380,7 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad
]
},
extensions: {
+ paste: new CustomPasteHandler(),
code: new CodeButton(),
autolist: new AutoList(),
alignright: new AlignRightButton(),
@@ -398,6 +410,24 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad
mediumInstance.subscribe 'editableDrop', (event) ->
$scope.onUploadFile({files: event.dataTransfer.files, cb: uploadEnd})
+ editorMedium.on 'keydown', (e) ->
+ code = if e.keyCode then e.keyCode else e.which
+ range = MediumEditor.selection.getSelectionRange(document)
+ codeBlock = isCodeBlockSelected(range, document)
+ selection = window.getSelection()
+
+ if code == 13 && !e.shiftKey && selection.focusOffset == _.trimEnd(selection.focusNode.textContent).length
+ e.preventDefault()
+ document.execCommand('insertHTML', false, '
')
+
+ lastP = $('#last-p').attr('id', '')
+
+ range = document.createRange()
+ range.selectNodeContents(lastP[0])
+ range.collapse(true);
+
+ MediumEditor.selection.selectRange(document, range)
+
mediumInstance.subscribe 'editableKeydown', (e) ->
code = if e.keyCode then e.keyCode else e.which
diff --git a/app/modules/components/wysiwyg/wysiwyg.scss b/app/modules/components/wysiwyg/wysiwyg.scss
index fa4a822a..4bfce409 100644
--- a/app/modules/components/wysiwyg/wysiwyg.scss
+++ b/app/modules/components/wysiwyg/wysiwyg.scss
@@ -88,22 +88,18 @@
margin: 0;
}
}
- pre,
- code {
+ pre:not([class*="language-"]) {
@include font-size(small);
background: lighten($grayer, 10%);
color: $whitish;
direction: ltr;
font-family: 'courier new', 'monospace';
+ line-height: 1.4rem;
margin-bottom: 1rem;
overflow: auto;
+ padding: 1rem;
unicode-bidi: embed;
white-space: pre-wrap;
-
- }
- pre {
- line-height: 1.4rem;
- padding: 1rem;
}
table {
border: $gray-light 1px solid;
diff --git a/app/modules/components/wysiwyg/wysiwyg.service.coffee b/app/modules/components/wysiwyg/wysiwyg.service.coffee
index 1786417c..c4ee7eba 100644
--- a/app/modules/components/wysiwyg/wysiwyg.service.coffee
+++ b/app/modules/components/wysiwyg/wysiwyg.service.coffee
@@ -98,6 +98,7 @@ class WysiwygService
converters: [cleanIssueConverter, codeLanguageConverter]
})
+
return markdown
getHTML: (text) ->
diff --git a/app/partials/issue/issues-detail.jade b/app/partials/issue/issues-detail.jade
index 91a01ef1..2b554160 100644
--- a/app/partials/issue/issues-detail.jade
+++ b/app/partials/issue/issues-detail.jade
@@ -33,7 +33,7 @@ div.wrapper(
permissions="modify_issue"
)
tg-created-by-display.ticket-created-by(ng-model="issue")
-
+
section.duty-content
tg-item-wysiwyg(
type="issue",
diff --git a/app/styles/vendor/codehilite.github.css b/app/styles/vendor/codehilite.github.css
deleted file mode 100644
index 6121071b..00000000
--- a/app/styles/vendor/codehilite.github.css
+++ /dev/null
@@ -1,64 +0,0 @@
-.codehilite .hll { background-color: #49483e }
-.codehilite .c { color: #75715e } /* Comment */
-.codehilite .err { color: #960050; background-color: #1e0010 } /* Error */
-.codehilite .k { color: #66d9ef } /* Keyword */
-.codehilite .l { color: #ae81ff } /* Literal */
-.codehilite .n { color: #f8f8f2 } /* Name */
-.codehilite .o { color: #f92672 } /* Operator */
-.codehilite .p { color: #f8f8f2 } /* Punctuation */
-.codehilite .cm { color: #75715e } /* Comment.Multiline */
-.codehilite .cp { color: #75715e } /* Comment.Preproc */
-.codehilite .c1 { color: #75715e } /* Comment.Single */
-.codehilite .cs { color: #75715e } /* Comment.Special */
-.codehilite .ge { font-style: italic } /* Generic.Emph */
-.codehilite .gs { font-weight: bold } /* Generic.Strong */
-.codehilite .kc { color: #66d9ef } /* Keyword.Constant */
-.codehilite .kd { color: #66d9ef } /* Keyword.Declaration */
-.codehilite .kn { color: #f92672 } /* Keyword.Namespace */
-.codehilite .kp { color: #66d9ef } /* Keyword.Pseudo */
-.codehilite .kr { color: #66d9ef } /* Keyword.Reserved */
-.codehilite .kt { color: #66d9ef } /* Keyword.Type */
-.codehilite .ld { color: #e6db74 } /* Literal.Date */
-.codehilite .m { color: #ae81ff } /* Literal.Number */
-.codehilite .s { color: #e6db74 } /* Literal.String */
-.codehilite .na { color: #a6e22e } /* Name.Attribute */
-.codehilite .nb { color: #f8f8f2 } /* Name.Builtin */
-.codehilite .nc { color: #a6e22e } /* Name.Class */
-.codehilite .no { color: #66d9ef } /* Name.Constant */
-.codehilite .nd { color: #a6e22e } /* Name.Decorator */
-.codehilite .ni { color: #f8f8f2 } /* Name.Entity */
-.codehilite .ne { color: #a6e22e } /* Name.Exception */
-.codehilite .nf { color: #a6e22e } /* Name.Function */
-.codehilite .nl { color: #f8f8f2 } /* Name.Label */
-.codehilite .nn { color: #f8f8f2 } /* Name.Namespace */
-.codehilite .nx { color: #a6e22e } /* Name.Other */
-.codehilite .py { color: #f8f8f2 } /* Name.Property */
-.codehilite .nt { color: #f92672 } /* Name.Tag */
-.codehilite .nv { color: #f8f8f2 } /* Name.Variable */
-.codehilite .ow { color: #f92672 } /* Operator.Word */
-.codehilite .w { color: #f8f8f2 } /* Text.Whitespace */
-.codehilite .mf { color: #ae81ff } /* Literal.Number.Float */
-.codehilite .mh { color: #ae81ff } /* Literal.Number.Hex */
-.codehilite .mi { color: #ae81ff } /* Literal.Number.Integer */
-.codehilite .mo { color: #ae81ff } /* Literal.Number.Oct */
-.codehilite .sb { color: #e6db74 } /* Literal.String.Backtick */
-.codehilite .sc { color: #e6db74 } /* Literal.String.Char */
-.codehilite .sd { color: #e6db74 } /* Literal.String.Doc */
-.codehilite .s2 { color: #e6db74 } /* Literal.String.Double */
-.codehilite .se { color: #ae81ff } /* Literal.String.Escape */
-.codehilite .sh { color: #e6db74 } /* Literal.String.Heredoc */
-.codehilite .si { color: #e6db74 } /* Literal.String.Interpol */
-.codehilite .sx { color: #e6db74 } /* Literal.String.Other */
-.codehilite .sr { color: #e6db74 } /* Literal.String.Regex */
-.codehilite .s1 { color: #e6db74 } /* Literal.String.Single */
-.codehilite .ss { color: #e6db74 } /* Literal.String.Symbol */
-.codehilite .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
-.codehilite .vc { color: #f8f8f2 } /* Name.Variable.Class */
-.codehilite .vg { color: #f8f8f2 } /* Name.Variable.Global */
-.codehilite .vi { color: #f8f8f2 } /* Name.Variable.Instance */
-.codehilite .il { color: #ae81ff } /* Literal.Number.Integer.Long */
-
-.codehilite .gh { } /* Generic Heading & Diff Header */
-.codehilite .gu { color: #75715e; } /* Generic.Subheading & Diff Unified/Comment? */
-.codehilite .gd { color: #f92672; } /* Generic.Deleted & Diff Deleted */
-.codehilite .gi { color: #a6e22e; } /* Generic.Inserted & Diff Inserted */
diff --git a/package.json b/package.json
index a54865f1..4d158b25 100644
--- a/package.json
+++ b/package.json
@@ -125,14 +125,14 @@
"lodash": "^4.16.4",
"markdown-it": "^8.0.1",
"markdown-it-task-lists": "^1.4.1",
- "medium-editor": "^5.21.1",
+ "medium-editor": "^5.22.2",
"medium-editor-autolist": "git+https://github.com/gruberro/medium-editor-autolist.git#add-package-json",
"medium-editor-tc-mention": "^2.2.4",
"messageformat": "^1.0.2",
"moment": "^2.15.1",
"ng-infinite-scroll": "^1.3.0",
"pikaday": "^1.4.0",
- "prismjs": "^1.5.1",
+ "prismjs": "^1.6.0",
"raven-js": "^3.7.0",
"showdown": "^1.4.3",
"to-markdown": "^3.0.1"