changeset 442:1fc5ddcde386

Some refactors
author nanaya <me@myconan.net>
date Thu, 10 Nov 2016 21:58:25 +0900
parents 69fe27a8b147
children be849fa80505
files app/assets/javascripts/application.coffee app/views/pastes/show.html.erb
diffstat 2 files changed, 37 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/app/assets/javascripts/application.coffee	Thu Nov 10 21:50:27 2016 +0900
+++ b/app/assets/javascripts/application.coffee	Thu Nov 10 21:58:25 2016 +0900
@@ -13,14 +13,12 @@
     .focus()
 
 
-pasteText = ->
-  $(".js-paste-paste").val() || $(".js-paste-pl").text()
-
+loadLanguageItems = ->
+  $languageSelectBox = $("#paste_language")
+  return unless $languageSelectBox.length
 
-setHash = (newLocation = window.location.pathname) ->
-  return unless history.replaceState
-
-  history.replaceState null, "", newLocation
+  for language in hljs.listLanguages().sort()
+    $languageSelectBox.append $("<option />", value: language, text: language)
 
 
 markdownfy = (plaintext) ->
@@ -29,50 +27,58 @@
   writer.render reader.parse(plaintext)
 
 
-$(document).on "click", ".js-show-tab-pl", ->
-  setHash()
+pasteText = ->
+  $(".js-paste-paste").val() || $(".js-paste-pl").text()
 
 
-$(document).on "click", ".js-show-tab-hl", ->
-  setHash "#hl"
+highlightText = ->
   $hlBox = $(".js-paste-hl")
-  return if $hlBox.data("processed")
+  return if $hlBox.attr("data-processed") == "1"
 
   $hlBox.text pasteText()
 
   highlight = -> hljs.highlightBlock($hlBox[0])
   setTimeout highlight, 0
 
-  $hlBox.data "processed", true
+  $hlBox.attr "data-processed", "1"
 
 
-$(document).on "click", ".js-show-tab-md", ->
-  setHash "#md"
+markdownText = ->
   $mdBox = $(".js-paste-md")
-  return if $mdBox.data("processed")
+  return if $mdBox.attr("data-processed") == "1"
 
   $mdBox.html markdownfy(pasteText())
   $mdBox.find("a").attr("rel", "nofollow")
-  $mdBox.data "processed", true
+  $mdBox.attr "data-processed", "1"
 
 
-$(document).on "click", ".js-paste-preview-md", (e) ->
+setHash = (e) ->
+  return unless history.replaceState
+
+  newLocation = "##{e.currentTarget.getAttribute("data-mode")}"
+  if newLocation == "#pl"
+    newLocation = window.location.pathname
+
+  history.replaceState null, "", newLocation
+
+
+showPreview = (e) ->
   e.preventDefault()
   return if pasteText() == ""
   $(".js-paste-preview-md-box").html markdownfy(pasteText())
   $(".js-paste-preview-md-modal").modal "show"
 
 
-$(document).on "ready", ->
+switchToCurrentHash = ->
   return unless $(".js-showing-paste").length
 
   format = window.location.hash.slice(1)
-  $(".js-show-tab-#{format}").click()
+  $(".js-show-tab[data-mode=#{format}]").click()
 
 
-$(document).on "ready", ->
-  $languageSelectBox = $("#paste_language")
-  return unless $languageSelectBox.length
-
-  for language in hljs.listLanguages().sort()
-    $languageSelectBox.append $("<option />", value: language, text: language)
+$ loadLanguageItems
+$ switchToCurrentHash
+$(document).on "click", ".js-paste-preview-md", showPreview
+$(document).on "click", ".js-show-tab[data-mode=hl]", highlightText
+$(document).on "click", ".js-show-tab[data-mode=md]", markdownText
+$(document).on "click", ".js-show-tab", setHash
--- a/app/views/pastes/show.html.erb	Thu Nov 10 21:50:27 2016 +0900
+++ b/app/views/pastes/show.html.erb	Thu Nov 10 21:58:25 2016 +0900
@@ -9,10 +9,13 @@
     ].each do |el| %>
       <li role="presentation" class="<%= "active" if el[:active] %>">
         <%= link_to el[:title], "##{el[:target]}",
-            :data => { :toggle => "tab" },
+            :data => {
+              :mode => el[:target],
+              :toggle => "tab"
+            },
             :aria => { :controls => el[:target] },
             :role => "tab",
-            :class => "js-show-tab-#{el[:target]}"
+            :class => "js-show-tab"
         %>
       </li>
     <% end %>