ObserveJS.bind 'Editor.Save', class
loaded: => @on 'click', @save @when 'keydown', @shouldSave @when 'Editor:loaded', @cache @when 'posts:update', @saved @when 'beforeunload', @confirm confirm: (e) => if @cache() != PostBody.instance.toString() e.returnValue = "You have unsaved changed." return e.returnValue cache: => cache = PostBody.instance.toString() @cache = (refresh) -> if refresh cache = PostBody.instance.toString() cache @cache() shouldSave: (e) => @cache() if e.metaKey isnt true || e.which isnt 83 return @save(e) save: (e) => e.preventDefault() e.stopPropagation() dialog = @template('#SavePost') if e.type == 'click' dialog.dataset.preview = true document.body.appendChild(dialog) saved: (e) => @cache(true)
ObserveJS.bind 'Editor.Save.Dialog', class
loaded: => @when 'posts:update', @saved xhr = new ObserveJS.XHR(@element()) xhr.data.set('post[content][raw]', PostBody.instance.history.current.toString()) xhr.data.set('post[content][html]', PostBody.instance.history.current.toHTMLString()) xhr.data.set('context', 'content') xhr.request.upload.addEventListener 'progress', @upload xhr.request.addEventListener 'progress', @download xhr.send() remove: => if @element().classList.contains 'fade' @element().remove() return @element().classList.add 'fade' @on 'webkitTransitionEnd', @remove @on 'transitionEnd', @remove saved: (e) => msg = @element().querySelector('.message') msg.innerHTML = e.MessageHTML if @element().dataset.preview == 'true' window.location = @element().getAttribute('href') else window.setTimeout @remove, 400 download: (e) => if e.lengthComputable @element().querySelector('.progress').style.width = "#{50 + e.total / e.loaded * 50}%" else @element().querySelector('.progress').style.width = "100%" upload: (e) => @element().querySelector('.progress').style.width = "#{e.total / e.loaded * 50}%"