Sha256: 638436cdd6b82db5a60981650ded1a3cea2fea05b1372a0b0e4c377e6f699c17
Contents?: true
Size: 1.97 KB
Versions: 5
Compression:
Stored size: 1.97 KB
Contents
description 'Enhance editor form with preview and diff' dependencies 'aspects' class ::Olelo::Application before :edit_buttons, 1000 do %{<button data-target="enhanced-edit" type="submit" name="action" value="preview" accesskey="p">#{:preview.t}</button> <button data-target="enhanced-edit" type="submit" name="action" value="changes" accesskey="c">#{:changes.t}</button>} end after :edit_buttons do %{<div id="enhanced-edit">#{flash[:preview] || flash[:changes]}</div>} end def post_preview raise 'No content' if !params[:content] params[:content].gsub!("\r\n", "\n") if page.new? || !params[:pos] # Whole page edited, assign new content before aspect search page.content = params[:content] aspect = Aspects::Aspect.find(page, layout: true) else # We assume that aspect stays the same if section is edited aspect = Aspects::Aspect.find(page, layout: true) page.content = params[:content] end context = Aspects::Context.new(page: page, request: request, private: {preview: true}) preview = aspect && aspect.call(context, page) flash.now[:preview] = preview ? %{<hr/>#{preview}} : nil halt render(request.xhr? ? flash.now[:preview] : :edit) end def post_changes raise 'No content' if !params[:content] params[:content].gsub!("\r\n", "\n") original = Tempfile.new('original') original.write(params[:pos] ? page.content[params[:pos].to_i, params[:len].to_i] : page.content) original.close new = Tempfile.new('new') new.write(params[:content].to_s) new.close # Read in binary mode and fix encoding afterwards patch = IO.popen("diff -u '#{original.path}' '#{new.path}'", 'rb') {|io| io.read } patch.force_encoding(Encoding.default_external) changes = PatchParser.parse(patch, PatchFormatter.new).html flash.now[:changes] = changes.blank? ? %{<div class="flash">#{:no_changes.t}</div>} : changes halt render(request.xhr? ? flash.now[:changes] : :edit) end end
Version data entries
5 entries across 5 versions & 1 rubygems