comparison app/javascript/src/main.coffee @ 468:802dcd44188e

Now with webpacker
author nanaya <me@nanaya.pro>
date Sun, 23 Feb 2020 20:23:09 +0900
parents
children 68231013b01b
comparison
equal deleted inserted replaced
467:fd3078b4d355 468:802dcd44188e
1 import 'bootstrap/js/transition'
2 import 'bootstrap/js/collapse'
3 import 'bootstrap/js/modal'
4 import 'bootstrap/js/tab'
5 import hljs from 'highlight.js'
6 import * as commonmark from 'commonmark'
7
8 #= require jquery
9 #= require bootstrap/transition
10 #= require bootstrap/collapse
11 #= require bootstrap/modal
12 #= require bootstrap/tab
13 #= require highlightjs
14 #= require commonmark
15
16 $(document).on "click", ".js-paste-clear", (e) ->
17 e.preventDefault()
18 $(".js-paste-paste")
19 .val("")
20 .focus()
21
22
23 loadLanguageItems = ->
24 $languageSelectBox = $("#paste_language")
25 return unless $languageSelectBox.length
26
27 for language in hljs.listLanguages().sort()
28 $languageSelectBox.append $("<option />", value: language, text: language)
29
30
31 markdownfy = (plaintext) ->
32 reader = new commonmark.Parser
33 writer = new commonmark.HtmlRenderer(safe: true)
34 writer.render reader.parse(plaintext)
35
36
37 pasteText = ->
38 $(".js-paste-paste").val() || $(".js-paste-pl").text()
39
40
41 highlightText = ->
42 $hlBox = $(".js-paste-hl")
43 return if $hlBox.attr("data-processed") == "1"
44
45 $hlBox.text pasteText()
46
47 highlight = -> hljs.highlightBlock($hlBox[0])
48 setTimeout highlight, 0
49
50 $hlBox.attr "data-processed", "1"
51
52
53 markdownText = ->
54 $mdBox = $(".js-paste-md")
55 return if $mdBox.attr("data-processed") == "1"
56
57 $mdBox.html markdownfy(pasteText())
58 $mdBox.find("a").attr("rel", "nofollow")
59 $mdBox.attr "data-processed", "1"
60
61
62 setHash = (e) ->
63 return unless history.replaceState
64
65 newLocation = "##{e.currentTarget.getAttribute("data-mode")}"
66 if newLocation == "#pl"
67 newLocation = window.location.pathname
68
69 history.replaceState null, "", newLocation
70
71
72 showPreview = (e) ->
73 e.preventDefault()
74 return if pasteText() == ""
75 $(".js-paste-preview-md-box").html markdownfy(pasteText())
76 $(".js-paste-preview-md-modal").modal "show"
77
78
79 switchToCurrentHash = ->
80 return unless $(".js-showing-paste").length
81
82 format = window.location.hash.slice(1)
83 $(".js-show-tab[data-mode=#{format}]").click()
84
85
86 $ loadLanguageItems
87 $ switchToCurrentHash
88 $(document).on "click", ".js-paste-preview-md", showPreview
89 $(document).on "click", ".js-show-tab[data-mode=hl]", highlightText
90 $(document).on "click", ".js-show-tab[data-mode=md]", markdownText
91 $(document).on "click", ".js-show-tab", setHash