improve wisisyg lists

stable
Juanfran 2014-09-12 09:55:12 +02:00
parent 2a46431b3f
commit e817e94669
1 changed files with 63 additions and 7 deletions

View File

@ -65,28 +65,84 @@ tgMarkitupDirective = ($rootscope, $rs) ->
markdownDomNode.find(".preview").remove() markdownDomNode.find(".preview").remove()
markItUpDomNode.show() markItUpDomNode.show()
markdownCaretPositon = false
setCaretPosition = (elm, caretPos) ->
if elm.createTextRange
range = elm.createTextRange()
range.move('character', caretPos)
range.select()
else if elm.selectionStart
elm.focus()
elm.setSelectionRange(caretPos, caretPos)
removeEmptyLine = (textarea, line, currentCaretPosition) ->
lines = textarea.value.split("\n")
removedLineLength = lines[line].length
lines[line] = ""
textarea.value = lines.join("\n")
#return the new position
return currentCaretPosition - removedLineLength + 1
markdownSettings = markdownSettings =
nameSpace: 'markdown' nameSpace: 'markdown'
onShiftEnter: {keepDefault:false, openWith:'\n\n'} onShiftEnter: {keepDefault:false, openWith:'\n\n'}
onEnter: onEnter:
keepDefault: false keepDefault: false
replaceWith: (data) -> replaceWith: (data) =>
lastLine = data.textarea.value[0..(data.caretPosition - 1)].split("\n").pop() lines = data.textarea.value[0..(data.caretPosition - 1)].split("\n")
lastLine = lines[lines.length - 1]
# unordered list -
match = lastLine.match /^(\s*- ).*/ match = lastLine.match /^(\s*- ).*/
return "\n#{match[1]}" if match if match
emptyListItem = lastLine.match /^(\s*)\-\s$/
if emptyListItem
markdownCaretPositon = removeEmptyLine(data.textarea, lines.length - 1, data.caretPosition)
else
return "\n#{match[1]}" if match
# unordered list *
match = lastLine.match /^(\s*\* ).*/ match = lastLine.match /^(\s*\* ).*/
return "\n#{match[1]}" if match
match = lastLine.match /^(\d+)\./ if match
return "\n#{parseInt(match[1], 10) + 1}. " if match emptyListItem = lastLine.match /^(\s*\* )$/
if emptyListItem
markdownCaretPositon = removeEmptyLine(data.textarea, lines.length - 1, data.caretPosition)
else
return "\n#{match[1]}" if match
# ordered list
match = lastLine.match /^(\s*)(\d+)\.\s/
if match
emptyListItem = lastLine.match /^(\s*)(\d+)\.\s$/
if emptyListItem
markdownCaretPositon = removeEmptyLine(data.textarea, lines.length - 1, data.caretPosition)
else
return "\n#{match[1] + (parseInt(match[2], 10) + 1)}. "
return "\n" return "\n"
afterInsert: (data) -> afterInsert: (data) ->
# Calculate the scroll position # Calculate the scroll position
if markdownCaretPositon
setCaretPosition(data.textarea, markdownCaretPositon)
caretPosition = markdownCaretPositon
markdownCaretPositon = false
else
caretPosition = data.caretPosition
totalLines = data.textarea.value.split("\n").length totalLines = data.textarea.value.split("\n").length
line = data.textarea.value[0..(data.caretPosition - 1)].split("\n").length line = data.textarea.value[0..(caretPosition - 1)].split("\n").length
scrollRelation = line / totalLines scrollRelation = line / totalLines
$el.scrollTop((scrollRelation * $el[0].scrollHeight) - ($el.height() / 2)) $el.scrollTop((scrollRelation * $el[0].scrollHeight) - ($el.height() / 2))