| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | 
							- const htmlparser = require('htmlparser2');
 
- const {escapeFormatting} = require('./functions.js');
 
- /**
 
-  * Change edit diffs to markdown text.
 
-  * @param {String} html - The edit diff in HTML.
 
-  * @param {String} more - The localized string for more content.
 
-  * @param {String} whitespace - The localized string for only whitespace.
 
-  * @returns {String[]}
 
-  */
 
- function diffParser(html, more, whitespace) {
 
- 	var current_tag = '';
 
- 	var last_ins = null;
 
- 	var last_del = null;
 
- 	var empty = false;
 
- 	var small_prev_ins = '';
 
- 	var small_prev_del = '';
 
- 	var ins_length = more.length;
 
- 	var del_length = more.length;
 
- 	var parser = new htmlparser.Parser( {
 
- 		onopentag: (tagname, attribs) => {
 
- 			if ( tagname === 'ins' || tagname == 'del' ) current_tag = tagname;
 
- 			if ( tagname === 'td' && attribs.class === 'diff-addedline' && ins_length <= 1000 ) {
 
- 				current_tag = 'tda';
 
- 				last_ins = '';
 
- 			}
 
- 			if ( tagname === 'td' && attribs.class === 'diff-deletedline' && del_length <= 1000 ) {
 
- 				current_tag = 'tdd';
 
- 				last_del = '';
 
- 			}
 
- 			if ( tagname === 'td' && attribs.class === 'diff-empty' ) empty = true;
 
- 		},
 
- 		ontext: (htmltext) => {
 
- 			if ( current_tag === 'ins' && ins_length <= 1000 ) {
 
- 				ins_length += ( '**' + escapeFormatting(htmltext) + '**' ).length;
 
- 				if ( ins_length <= 1000 ) last_ins += '**' + escapeFormatting(htmltext) + '**';
 
- 			}
 
- 			if ( current_tag === 'del' && del_length <= 1000 ) {
 
- 				del_length += ( '~~' + escapeFormatting(htmltext) + '~~' ).length;
 
- 				if ( del_length <= 1000 ) last_del += '~~' + escapeFormatting(htmltext) + '~~';
 
- 			}
 
- 			if ( current_tag === 'tda' && ins_length <= 1000 ) {
 
- 				ins_length += escapeFormatting(htmltext).length;
 
- 				if ( ins_length <= 1000 ) last_ins += escapeFormatting(htmltext);
 
- 			}
 
- 			if ( current_tag === 'tdd' && del_length <= 1000 ) {
 
- 				del_length += escapeFormatting(htmltext).length;
 
- 				if ( del_length <= 1000 ) last_del += escapeFormatting(htmltext);
 
- 			}
 
- 		},
 
- 		onclosetag: (tagname) => {
 
- 			current_tag = '';
 
- 			if ( tagname === 'ins' ) current_tag = 'tda';
 
- 			if ( tagname === 'del' ) current_tag = 'tdd';
 
- 			if ( tagname === 'tr' ) {
 
- 				if ( last_ins !== null ) {
 
- 					ins_length++;
 
- 					if ( empty && last_ins.trim().length && !last_ins.includes( '**' ) ) {
 
- 						ins_length += 4;
 
- 						last_ins = '**' + last_ins + '**';
 
- 					}
 
- 					small_prev_ins += '\n' + last_ins;
 
- 					if ( ins_length > 1000 ) small_prev_ins += more;
 
- 					last_ins = null;
 
- 				}
 
- 				if ( last_del !== null ) {
 
- 					del_length++;
 
- 					if ( empty && last_del.trim().length && !last_del.includes( '~~' ) ) {
 
- 						del_length += 4;
 
- 						last_del = '~~' + last_del + '~~';
 
- 					}
 
- 					small_prev_del += '\n' + last_del;
 
- 					if ( del_length > 1000 ) small_prev_del += more;
 
- 					last_del = null;
 
- 				}
 
- 				empty = false;
 
- 			}
 
- 		}
 
- 	} );
 
- 	parser.write( html );
 
- 	parser.end();
 
- 	var compare = ['', ''];
 
- 	if ( small_prev_del.length ) {
 
- 		if ( small_prev_del.replace( /\~\~/g, '' ).trim().length ) {
 
- 			compare[0] = small_prev_del.replace( /\~\~\~\~/g, '' );
 
- 		} else compare[0] = whitespace;
 
- 	}
 
- 	if ( small_prev_ins.length ) {
 
- 		if ( small_prev_ins.replace( /\*\*/g, '' ).trim().length ) {
 
- 			compare[1] = small_prev_ins.replace( /\*\*\*\*/g, '' );
 
- 		} else compare[1] = whitespace;
 
- 	}
 
- 	return compare;
 
- }
 
- module.exports = diffParser;
 
 
  |