liquid_feedback_frontend
annotate app/main/draft/diff.lua @ 127:4fb486bce608
add pageinator to issue view.
this "paginator" shows links to the prev/area/next issues that have the same
state then the current one. This helps a lot when inspecting new issues or voting.
The voting filter works a little bit different, as he also activtes the not_voted subfilter
because it is most likely only not voted issues are interessting to the user
this "paginator" shows links to the prev/area/next issues that have the same
state then the current one. This helps a lot when inspecting new issues or voting.
The voting filter works a little bit different, as he also activtes the not_voted subfilter
because it is most likely only not voted issues are interessting to the user
author | Daniel Poelzleithner <poelzi@poelzi.org> |
---|---|
date | Tue Oct 05 04:44:06 2010 +0200 (2010-10-05) |
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 |