liquid_feedback_frontend
annotate app/main/draft/diff.lua @ 124:f740026b1518
add initiator support in delegation
if a delegation is issued from the initiative view, the initiators
from that one are added to the delegation target list. this makes it easier to delegate to the author without the need to add him to the contact list.
if a delegation is issued from the initiative view, the initiators
from that one are added to the delegation target list. this makes it easier to delegate to the author without the need to add him to the contact list.
author | Daniel Poelzleithner <poelzi@poelzi.org> |
---|---|
date | Mon Sep 20 20:32:04 2010 +0200 (2010-09-20) |
parents | 6a12fb7e4963 |
children | 5d797c6706d5 |
rev | line source |
---|---|
bsw@2 | 1 slot.put_into("title", _"Diff") |
bsw@2 | 2 |
bsw@2 | 3 local old_draft_id = param.get("old_draft_id", atom.integer) |
bsw@2 | 4 local new_draft_id = param.get("new_draft_id", atom.integer) |
bsw@2 | 5 |
bsw@10 | 6 if not old_draft_id or not new_draft_id then |
bsw@10 | 7 slot.put( _"Please choose two versions of the draft to compare") |
bsw@10 | 8 return |
bsw@10 | 9 end |
bsw@10 | 10 |
bsw@10 | 11 if old_draft_id == new_draft_id then |
bsw@10 | 12 slot.put( _"Please choose two different versions of the draft to compare") |
bsw@10 | 13 return |
bsw@10 | 14 end |
bsw@10 | 15 |
bsw@2 | 16 if old_draft_id > new_draft_id then |
bsw@2 | 17 local tmp = old_draft_id |
bsw@2 | 18 old_draft_id = new_draft_id |
bsw@2 | 19 new_draft_id = tmp |
bsw@2 | 20 end |
bsw@2 | 21 |
bsw@2 | 22 local old_draft = Draft:by_id(old_draft_id) |
bsw@2 | 23 local new_draft = Draft:by_id(new_draft_id) |
bsw@2 | 24 |
bsw@95 | 25 local old_draft_content = string.gsub(string.gsub(old_draft.content, "\n", " ###ENTER###\n"), " ", "\n") |
bsw@95 | 26 local new_draft_content = string.gsub(string.gsub(new_draft.content, "\n", " ###ENTER###\n"), " ", "\n") |
bsw@95 | 27 |
bsw@2 | 28 local key = multirand.string(26, "123456789bcdfghjklmnpqrstvwxyz"); |
bsw@2 | 29 |
bsw@2 | 30 local old_draft_filename = encode.file_path(request.get_app_basepath(), 'tmp', "diff-" .. key .. "-old.tmp") |
bsw@2 | 31 local new_draft_filename = encode.file_path(request.get_app_basepath(), 'tmp', "diff-" .. key .. "-new.tmp") |
bsw@2 | 32 |
bsw@2 | 33 local old_draft_file = assert(io.open(old_draft_filename, "w")) |
bsw@95 | 34 old_draft_file:write(old_draft_content) |
bsw@2 | 35 old_draft_file:write("\n") |
bsw@2 | 36 old_draft_file:close() |
bsw@2 | 37 |
bsw@2 | 38 local new_draft_file = assert(io.open(new_draft_filename, "w")) |
bsw@95 | 39 new_draft_file:write(new_draft_content) |
bsw@2 | 40 new_draft_file:write("\n") |
bsw@2 | 41 new_draft_file:close() |
bsw@2 | 42 |
bsw@95 | 43 local output, err, status = os.pfilter(nil, "sh", "-c", "diff -U 1000000000 '" .. old_draft_filename .. "' '" .. new_draft_filename .. "' | grep -v ^--- | grep -v ^+++ | grep -v ^@") |
bsw@2 | 44 |
bsw@2 | 45 os.remove(old_draft_filename) |
bsw@2 | 46 os.remove(new_draft_filename) |
bsw@2 | 47 |
bsw@95 | 48 local last_state = "first_run" |
bsw@95 | 49 |
bsw@95 | 50 local function process_line(line) |
bsw@95 | 51 local state_char = string.sub(line, 1, 1) |
bsw@95 | 52 local state |
bsw@95 | 53 if state_char == "+" then |
bsw@95 | 54 state = "added" |
bsw@95 | 55 elseif state_char == "-" then |
bsw@95 | 56 state = "removed" |
bsw@95 | 57 elseif state_char == " " then |
bsw@95 | 58 state = "unchanged" |
bsw@95 | 59 end |
bsw@95 | 60 local state_changed = false |
bsw@95 | 61 if state ~= last_state then |
bsw@95 | 62 if last_state ~= "first_run" then |
bsw@95 | 63 slot.put("</span> ") |
bsw@95 | 64 end |
bsw@95 | 65 last_state = state |
bsw@95 | 66 state_changed = true |
bsw@95 | 67 slot.put("<span class=\"diff_" .. tostring(state) .. "\">") |
bsw@95 | 68 end |
bsw@95 | 69 |
bsw@95 | 70 line = string.sub(line, 2, #line) |
bsw@95 | 71 if line ~= "###ENTER###" then |
bsw@95 | 72 if not state_changed then |
bsw@95 | 73 slot.put(" ") |
bsw@95 | 74 end |
bsw@95 | 75 slot.put(line) |
bsw@95 | 76 else |
bsw@95 | 77 slot.put("<br />") |
bsw@95 | 78 end |
bsw@95 | 79 end |
bsw@95 | 80 |
bsw@2 | 81 if not status then |
bsw@2 | 82 ui.field.text{ value = _"The drafts do not differ" } |
bsw@2 | 83 else |
bsw@95 | 84 ui.container{ |
bsw@95 | 85 tag = "div", |
bsw@95 | 86 attr = { class = "diff" }, |
bsw@95 | 87 content = function() |
bsw@95 | 88 output = output:gsub("[^\n\r]+", function(line) |
bsw@95 | 89 process_line(line) |
bsw@95 | 90 end) |
bsw@2 | 91 end |
bsw@95 | 92 } |
bsw@2 | 93 end |
bsw@2 | 94 |