polyblock 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/polyblock/polyblock.js.coffee +141 -139
- data/lib/polyblock/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 5c6367b67597e23403b1b324302ac4b9294ad8ad
         | 
| 4 | 
            +
              data.tar.gz: 8d8f624ef68c9637668d988d5475b33d7dc1b22b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 7ea9a74bae0f7979416fe296b244815beec2619b0d094815365bcb8223b1b30312b4ea80902b0b3419bf3dcf781b67a66db91fd077879825d497ee6aba8d2afb
         | 
| 7 | 
            +
              data.tar.gz: 58c958b3cf5e13cdf6a70899baf94518af428f4bee92734f942c821daae0ca769a91835bce9b9416abf5fb414fbb60297b73c2e1163685247016e7df6999dc48
         | 
| @@ -11,150 +11,152 @@ $ -> | |
| 11 11 | 
             
                # Find switches
         | 
| 12 12 | 
             
                pb_switch = $('.polyblock-switch')
         | 
| 13 13 | 
             
                has_switch = pb_switch.is('*')
         | 
| 14 | 
            -
                switch_list = []
         | 
| 15 14 |  | 
| 16 | 
            -
                 | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
                   | 
| 20 | 
            -
                     | 
| 21 | 
            -
                       | 
| 22 | 
            -
                         | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
                   | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
                     | 
| 30 | 
            -
                    else instanciateCKEditor(id)
         | 
| 15 | 
            +
                initialize = ->
         | 
| 16 | 
            +
                  # Clone each block and instanciate CKeditor on the original
         | 
| 17 | 
            +
                  blockclones = {}
         | 
| 18 | 
            +
                  instanciateCKEditor = (id)->
         | 
| 19 | 
            +
                    CKEDITOR.inline id,
         | 
| 20 | 
            +
                      on:
         | 
| 21 | 
            +
                        focus:(e)->
         | 
| 22 | 
            +
                          editorModeOn()
         | 
| 23 | 
            +
                          startListening(id)
         | 
| 24 | 
            +
                        blur:(e)-> stopListening()
         | 
| 25 | 
            +
                  blocks.each ->
         | 
| 26 | 
            +
                    id = $(@).attr('id')
         | 
| 27 | 
            +
                    blockclones[id] = $(@).clone()
         | 
| 28 | 
            +
                    instanciateCKEditor(id) unless _.contains(_.keys(CKEDITOR.instances),id)
         | 
| 31 29 |  | 
| 32 | 
            -
             | 
| 33 | 
            -
                   | 
| 34 | 
            -
                    e.preventDefault()
         | 
| 35 | 
            -
                    if $(@).hasClass("active") then window.location.reload()
         | 
| 36 | 
            -
                    else
         | 
| 37 | 
            -
                      instanciateCKEditor(id) for id in switch_list
         | 
| 38 | 
            -
                      $(@).addClass("active")
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                # Wait for changes
         | 
| 41 | 
            -
                verbose = false
         | 
| 42 | 
            -
                changeChecker = null
         | 
| 43 | 
            -
                indicator = $('.pb-change-indicator')
         | 
| 44 | 
            -
                changeText = $('.pb-change-text')
         | 
| 45 | 
            -
                startListening = (which)->
         | 
| 46 | 
            -
                  stopListening()
         | 
| 47 | 
            -
                  console.log("I'm listening...") if verbose
         | 
| 48 | 
            -
                  buffer = CKEDITOR.instances[which].getData()
         | 
| 49 | 
            -
                  changeChecker = setInterval ->
         | 
| 50 | 
            -
                    console.log("Checking for changes...") if verbose
         | 
| 51 | 
            -
                    reading = CKEDITOR.instances[which].getData()
         | 
| 52 | 
            -
                    if reading!=buffer and !unsavedChanges then showUnsavedChanges()
         | 
| 53 | 
            -
                    else if reading==buffer and unsavedChanges then showSavedChanges()
         | 
| 54 | 
            -
                    #buffer = reading
         | 
| 55 | 
            -
                  , 1000
         | 
| 56 | 
            -
                stopListening = ->
         | 
| 57 | 
            -
                  return unless changeChecker?
         | 
| 58 | 
            -
                  console.log("I'm no longer listening.") if verbose
         | 
| 59 | 
            -
                  clearInterval(changeChecker)
         | 
| 30 | 
            +
                  # Wait for changes
         | 
| 31 | 
            +
                  verbose = false
         | 
| 60 32 | 
             
                  changeChecker = null
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                   | 
| 63 | 
            -
                   | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
                     | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
                     | 
| 79 | 
            -
             | 
| 33 | 
            +
                  indicator = $('.pb-change-indicator')
         | 
| 34 | 
            +
                  changeText = $('.pb-change-text')
         | 
| 35 | 
            +
                  startListening = (which)->
         | 
| 36 | 
            +
                    stopListening()
         | 
| 37 | 
            +
                    console.log("I'm listening...") if verbose
         | 
| 38 | 
            +
                    buffer = CKEDITOR.instances[which].getData()
         | 
| 39 | 
            +
                    changeChecker = setInterval ->
         | 
| 40 | 
            +
                      console.log("Checking for changes...") if verbose
         | 
| 41 | 
            +
                      reading = CKEDITOR.instances[which].getData()
         | 
| 42 | 
            +
                      if reading!=buffer and !unsavedChanges then showUnsavedChanges()
         | 
| 43 | 
            +
                      else if reading==buffer and unsavedChanges then showSavedChanges()
         | 
| 44 | 
            +
                      #buffer = reading
         | 
| 45 | 
            +
                    , 1000
         | 
| 46 | 
            +
                  stopListening = ->
         | 
| 47 | 
            +
                    return unless changeChecker?
         | 
| 48 | 
            +
                    console.log("I'm no longer listening.") if verbose
         | 
| 49 | 
            +
                    clearInterval(changeChecker)
         | 
| 50 | 
            +
                    changeChecker = null
         | 
| 51 | 
            +
                  showUnsavedChanges = ->
         | 
| 52 | 
            +
                    indicator.transition({rotate:"-30deg",color:"red"})
         | 
| 53 | 
            +
                    changeText.html("You have unsaved changes.").transition({color:"red"})
         | 
| 54 | 
            +
                    unsavedChanges = true
         | 
| 55 | 
            +
                  showSavedChanges = ->
         | 
| 56 | 
            +
                    indicator.transition({rotate:"0deg",color:"green"})
         | 
| 57 | 
            +
                    changeText.html("All changes saved.").transition({color:"green"})
         | 
| 58 | 
            +
                    unsavedChanges = false
         | 
| 80 59 |  | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
                   | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
                   | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 60 | 
            +
                  # Editor functionality toggles
         | 
| 61 | 
            +
                  initialBodyPadding = $('body').css("padding-bottom")
         | 
| 62 | 
            +
                  editorModeOn = (pb)->
         | 
| 63 | 
            +
                    $('#pb_bar').show "slide", {direction:"down"}, 250, ->
         | 
| 64 | 
            +
                      $('body').css("padding-bottom",$("#pb_bar").height() + 20)
         | 
| 65 | 
            +
                      pb?()
         | 
| 66 | 
            +
                  editorModeOff = (pb)->
         | 
| 67 | 
            +
                    $('#pb_bar').hide "slide", {direction:"down"}, 250, ->
         | 
| 68 | 
            +
                      $('body').css("padding-bottom",initialBodyPadding)
         | 
| 69 | 
            +
                      pb?()
         | 
| 91 70 |  | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
                   | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
                  .css("font-family": 'Monaco, Menlo, Consolas, "Courier New", monospace')
         | 
| 103 | 
            -
                  .on "keydown", (e)->
         | 
| 104 | 
            -
                      keycode = e.keyCode or e.which
         | 
| 105 | 
            -
                      return unless keycode == 9 or keycode == 8 or keycode == 46
         | 
| 106 | 
            -
                      start = $(@).get(0).selectionStart
         | 
| 107 | 
            -
                      end = $(@).get(0).selectionEnd
         | 
| 108 | 
            -
                      if keycode == 9
         | 
| 109 | 
            -
                        e.preventDefault()
         | 
| 110 | 
            -
                        $(@).val("#{$(@).val().substring(0,start)}#{tab}#{$(@).val().substring(end)}")
         | 
| 111 | 
            -
                        $(@).get(0).selectionStart = $(@).get(0).selectionEnd = start + tabchars
         | 
| 112 | 
            -
                      else if keycode == 8
         | 
| 113 | 
            -
                        return unless currentMode=="HAML" and $(@).val().substring(start-tabchars,start) == tab
         | 
| 114 | 
            -
                        e.preventDefault()
         | 
| 115 | 
            -
                        $(@).val("#{$(@).val().substring(0,start-tabchars)}#{$(@).val().substring(end)}")
         | 
| 116 | 
            -
                        $(@).get(0).selectionStart = $(@).get(0).selectionEnd = start-tabchars
         | 
| 117 | 
            -
                      else if keycode == 46
         | 
| 118 | 
            -
                        return unless currentMode=="HAML" and $(@).val().substring(start,start+tabchars) == tab
         | 
| 119 | 
            -
                        e.preventDefault()
         | 
| 120 | 
            -
                        $(@).val("#{$(@).val().substring(0,start)}#{$(@).val().substring(end+tabchars)}")
         | 
| 121 | 
            -
                        $(@).get(0).selectionStart = $(@).get(0).selectionEnd = start
         | 
| 122 | 
            -
                  replaceIt = (html)=>
         | 
| 123 | 
            -
                    if !previous_textarea.is("*") then block.replaceWith(textarea)
         | 
| 124 | 
            -
                    else previous_textarea.replaceWith(textarea)
         | 
| 125 | 
            -
                    textarea.autosize().focus()
         | 
| 126 | 
            -
                  if previousMode != "HAML" then replaceIt(content)
         | 
| 127 | 
            -
                  else $.post "/convert_haml_to_html", {haml: content}, (data)=> replaceIt(data)
         | 
| 128 | 
            -
                convertFromTextarea = (block)->
         | 
| 129 | 
            -
                  textarea = $("textarea[data-pbid=#{block.attr("data-pbid")}]")
         | 
| 130 | 
            -
                  replaceIt = (html)=>
         | 
| 131 | 
            -
                    console.log "Replacing with html: #{html}"
         | 
| 132 | 
            -
                    textarea.replaceWith(block)
         | 
| 133 | 
            -
                    block.html(html)
         | 
| 134 | 
            -
                  if previousMode != "HAML" then replaceIt(textarea.text())
         | 
| 135 | 
            -
                  else $.post "/convert_haml_to_html", {haml: textarea.val()}, (data)=> replaceIt(data)
         | 
| 71 | 
            +
                  # Change storage
         | 
| 72 | 
            +
                  saveChanges = ->
         | 
| 73 | 
            +
                    showSavedChanges()
         | 
| 74 | 
            +
                    pbs = _.object(_.map(blocks,(b)-> $(b).data("pbid")), _.map(blocks,(b)-> $(b).html()))
         | 
| 75 | 
            +
                    $.post "/polyblock/update", {pbs:pbs}, (data)-> editorModeOff -> alertify.success("Your changes have been saved.")
         | 
| 76 | 
            +
                  revertChanges = (pb)->
         | 
| 77 | 
            +
                    return unless confirm("Are you sure you want to discard your changes?")
         | 
| 78 | 
            +
                    editorModeOff ->
         | 
| 79 | 
            +
                      blocks.each -> $(@).replaceWith(blockclones[$(@).attr("id")])
         | 
| 80 | 
            +
                      alertify.success("Your changes have been discarded.")
         | 
| 136 81 |  | 
| 137 | 
            -
             | 
| 138 | 
            -
                   | 
| 139 | 
            -
                   | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 82 | 
            +
                  # Modes
         | 
| 83 | 
            +
                  currentMode = previousMode = "WYSIWYG"
         | 
| 84 | 
            +
                  convertToTextarea = (block,content=null,tab="\t")->
         | 
| 85 | 
            +
                    tabchars = tab.replace(/\\/,"").length
         | 
| 86 | 
            +
                    previous_textarea = $("textarea[data-pbid=#{block.attr("data-pbid")}]")
         | 
| 87 | 
            +
                    content ?= if previous_textarea.is("*") then previous_textarea.val() else block.html()
         | 
| 88 | 
            +
                    textarea = $('<textarea />')
         | 
| 89 | 
            +
                    .addClass("form-control")
         | 
| 90 | 
            +
                    .attr("data-pbid",block.attr("data-pbid"))
         | 
| 91 | 
            +
                    .val(content)
         | 
| 92 | 
            +
                    .css("font-family": 'Monaco, Menlo, Consolas, "Courier New", monospace')
         | 
| 93 | 
            +
                    .on "keydown", (e)->
         | 
| 94 | 
            +
                        keycode = e.keyCode or e.which
         | 
| 95 | 
            +
                        return unless keycode == 9 or keycode == 8 or keycode == 46
         | 
| 96 | 
            +
                        start = $(@).get(0).selectionStart
         | 
| 97 | 
            +
                        end = $(@).get(0).selectionEnd
         | 
| 98 | 
            +
                        if keycode == 9
         | 
| 99 | 
            +
                          e.preventDefault()
         | 
| 100 | 
            +
                          $(@).val("#{$(@).val().substring(0,start)}#{tab}#{$(@).val().substring(end)}")
         | 
| 101 | 
            +
                          $(@).get(0).selectionStart = $(@).get(0).selectionEnd = start + tabchars
         | 
| 102 | 
            +
                        else if keycode == 8
         | 
| 103 | 
            +
                          return unless currentMode=="HAML" and $(@).val().substring(start-tabchars,start) == tab
         | 
| 104 | 
            +
                          e.preventDefault()
         | 
| 105 | 
            +
                          $(@).val("#{$(@).val().substring(0,start-tabchars)}#{$(@).val().substring(end)}")
         | 
| 106 | 
            +
                          $(@).get(0).selectionStart = $(@).get(0).selectionEnd = start-tabchars
         | 
| 107 | 
            +
                        else if keycode == 46
         | 
| 108 | 
            +
                          return unless currentMode=="HAML" and $(@).val().substring(start,start+tabchars) == tab
         | 
| 109 | 
            +
                          e.preventDefault()
         | 
| 110 | 
            +
                          $(@).val("#{$(@).val().substring(0,start)}#{$(@).val().substring(end+tabchars)}")
         | 
| 111 | 
            +
                          $(@).get(0).selectionStart = $(@).get(0).selectionEnd = start
         | 
| 112 | 
            +
                    replaceIt = (html)=>
         | 
| 113 | 
            +
                      if !previous_textarea.is("*") then block.replaceWith(textarea)
         | 
| 114 | 
            +
                      else previous_textarea.replaceWith(textarea)
         | 
| 115 | 
            +
                      textarea.autosize().focus()
         | 
| 116 | 
            +
                    if previousMode != "HAML" then replaceIt(content)
         | 
| 117 | 
            +
                    else $.post "/convert_haml_to_html", {haml: content}, (data)=> replaceIt(data)
         | 
| 118 | 
            +
                  convertFromTextarea = (block)->
         | 
| 143 119 | 
             
                    textarea = $("textarea[data-pbid=#{block.attr("data-pbid")}]")
         | 
| 144 | 
            -
                     | 
| 145 | 
            -
             | 
| 146 | 
            -
                       | 
| 147 | 
            -
                       | 
| 148 | 
            -
             | 
| 149 | 
            -
             | 
| 150 | 
            -
             | 
| 151 | 
            -
                   | 
| 152 | 
            -
             | 
| 120 | 
            +
                    replaceIt = (html)=>
         | 
| 121 | 
            +
                      console.log "Replacing with html: #{html}"
         | 
| 122 | 
            +
                      textarea.replaceWith(block)
         | 
| 123 | 
            +
                      block.html(html)
         | 
| 124 | 
            +
                    if previousMode != "HAML" then replaceIt(textarea.text())
         | 
| 125 | 
            +
                    else $.post "/convert_haml_to_html", {haml: textarea.val()}, (data)=> replaceIt(data)
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                  $('#pb_bar_format_buttons button').click (e)->
         | 
| 128 | 
            +
                    e.preventDefault()
         | 
| 129 | 
            +
                    return if $(@).hasClass("active")
         | 
| 130 | 
            +
                    previousMode = currentMode
         | 
| 131 | 
            +
                    currentMode = $(@).html()
         | 
| 132 | 
            +
                    changeModes = (block)=>
         | 
| 133 | 
            +
                      textarea = $("textarea[data-pbid=#{block.attr("data-pbid")}]")
         | 
| 134 | 
            +
                      content = if textarea.is("*") then textarea.val() else block.html()
         | 
| 135 | 
            +
                      switch currentMode
         | 
| 136 | 
            +
                        when "WYSIWYG" then convertFromTextarea block
         | 
| 137 | 
            +
                        when "HTML" then convertToTextarea block, html_beautify(content)
         | 
| 138 | 
            +
                        when "HAML" then $.post "/convert_html_to_haml", {html: content}, (data)=> convertToTextarea(block,data,"  ")
         | 
| 139 | 
            +
                        when "Markdown" then convertToTextarea block, html_beautify(content)
         | 
| 140 | 
            +
                    blocks = $(".polyblock[contenteditable='true']") if previousMode == "WYSIWYG"
         | 
| 141 | 
            +
                    blocks.each -> changeModes $(@)
         | 
| 142 | 
            +
                    $(@).siblings().removeClass("active").end().addClass("active")
         | 
| 153 143 |  | 
| 154 | 
            -
             | 
| 155 | 
            -
             | 
| 156 | 
            -
             | 
| 157 | 
            -
             | 
| 158 | 
            -
             | 
| 159 | 
            -
             | 
| 160 | 
            -
             | 
| 144 | 
            +
                  # Button handlers
         | 
| 145 | 
            +
                  $('#pb_bar_revert').click (e)->
         | 
| 146 | 
            +
                    e.preventDefault()
         | 
| 147 | 
            +
                    revertChanges()
         | 
| 148 | 
            +
                  $('#pb_bar_save').click (e)->
         | 
| 149 | 
            +
                    e.preventDefault()
         | 
| 150 | 
            +
                    saveChanges()
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                if has_switch
         | 
| 153 | 
            +
                  pb_switch.click (e)->
         | 
| 154 | 
            +
                    e.preventDefault()
         | 
| 155 | 
            +
                    if $(@).hasClass("active")
         | 
| 156 | 
            +
                      $(@).removeClass("active")
         | 
| 157 | 
            +
                      window.location.reload()
         | 
| 158 | 
            +
                    else
         | 
| 159 | 
            +
                      $(@).addClass("active")
         | 
| 160 | 
            +
                      initialize()
         | 
| 161 | 
            +
                else
         | 
| 162 | 
            +
                  initialize()
         | 
    
        data/lib/polyblock/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: polyblock
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - MacKinley Smith
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014-01- | 
| 11 | 
            +
            date: 2014-01-08 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rails
         |