2
0

view_diff.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from .tool.func import *
  2. def view_diff(name = 'Test', num_a = 1, num_b = 1):
  3. with get_db_connect() as conn:
  4. curs = conn.cursor()
  5. first = str(num_a)
  6. second = str(num_b)
  7. if acl_check(name, 'render') == 1:
  8. return re_error('/ban')
  9. curs.execute(db_change("select title from history where title = ? and (id = ? or id = ?) and hide = 'O'"), [name, first, second])
  10. if curs.fetchall() and admin_check(6) != 1:
  11. return re_error('/error/3')
  12. curs.execute(db_change("select data from history where id = ? and title = ?"), [first, name])
  13. first_raw_data = curs.fetchall()
  14. curs.execute(db_change("select data from history where id = ? and title = ?"), [second, name])
  15. second_raw_data = curs.fetchall()
  16. if first_raw_data and second_raw_data:
  17. first_raw_data = first_raw_data[0][0].replace('\r', '')
  18. second_raw_data = second_raw_data[0][0].replace('\r', '')
  19. if first_raw_data == second_raw_data:
  20. result = ''
  21. else:
  22. i = 1
  23. change_count = 0
  24. diff_data = diff_match_patch().diff_prettyHtml(
  25. diff_match_patch().diff_main(first_raw_data, second_raw_data)
  26. )
  27. end_data = ''
  28. diff_data = diff_data.replace('&para;<br>', '\n')
  29. diff_data = diff_data.replace('<span>', '')
  30. diff_data = diff_data.replace('</span>', '')
  31. re_data = re.findall(r'(?:(?:(?:(?!\n).)*)(?:\n)|(?:(?:(?!\n).)+)$)', diff_data)
  32. for re_in_data in re_data:
  33. change_find_start = len(re.findall(r'<(?:del|ins) ', re_in_data))
  34. change_find_end = len(re.findall(r'<\/(?:del|ins)>', re_in_data))
  35. change_count += (change_find_start - change_find_end)
  36. if change_count != 0 or change_find_start != 0 or change_find_end != 0:
  37. end_data += str(i) + ' : ' + re_in_data
  38. i += 1
  39. result = '<pre>' + end_data + '</pre>'
  40. return easy_minify(flask.render_template(skin_check(),
  41. imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('compare') + ') (r' + first + ') (r' + second + ')', 0])],
  42. data = result,
  43. menu = [['history/' + url_pas(name), load_lang('return')]]
  44. ))
  45. else:
  46. return redirect('/history/' + url_pas(name))