mirror of
https://github.com/moodle/moodle.git
synced 2025-04-15 21:45:37 +02:00
MDL-80633 lib: Upgrade beautify to 1.15.1
This commit is contained in:
parent
aea57c9f1e
commit
e37bd90064
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -571,10 +571,10 @@ function Options(options, merge_child_field) {
|
||||
|
||||
this.indent_empty_lines = this._get_boolean('indent_empty_lines');
|
||||
|
||||
// valid templating languages ['django', 'erb', 'handlebars', 'php', 'smarty']
|
||||
// For now, 'auto' = all off for javascript, all on for html (and inline javascript).
|
||||
// valid templating languages ['django', 'erb', 'handlebars', 'php', 'smarty', 'angular']
|
||||
// For now, 'auto' = all off for javascript, all except angular on for html (and inline javascript/css).
|
||||
// other values ignored
|
||||
this.templating = this._get_selection_list('templating', ['auto', 'none', 'django', 'erb', 'handlebars', 'php', 'smarty'], ['auto']);
|
||||
this.templating = this._get_selection_list('templating', ['auto', 'none', 'angular', 'django', 'erb', 'handlebars', 'php', 'smarty'], ['auto']);
|
||||
}
|
||||
|
||||
Options.prototype._get_array = function(name, default_value) {
|
||||
@ -1281,13 +1281,11 @@ Beautifier.prototype.beautify = function() {
|
||||
|
||||
if (variable.match(/[ :]$/)) {
|
||||
// we have a variable or pseudo-class, add it and insert one space before continuing
|
||||
variable = this.eatString(": ").replace(/\s$/, '');
|
||||
variable = this.eatString(": ").replace(/\s+$/, '');
|
||||
this.print_string(variable);
|
||||
this._output.space_before_token = true;
|
||||
}
|
||||
|
||||
variable = variable.replace(/\s$/, '');
|
||||
|
||||
// might be sass variable
|
||||
if (parenLevel === 0 && variable.indexOf(':') !== -1) {
|
||||
insidePropertyValue = true;
|
||||
@ -1307,13 +1305,11 @@ Beautifier.prototype.beautify = function() {
|
||||
|
||||
if (variableOrRule.match(/[ :]$/)) {
|
||||
// we have a variable or pseudo-class, add it and insert one space before continuing
|
||||
variableOrRule = this.eatString(": ").replace(/\s$/, '');
|
||||
variableOrRule = this.eatString(": ").replace(/\s+$/, '');
|
||||
this.print_string(variableOrRule);
|
||||
this._output.space_before_token = true;
|
||||
}
|
||||
|
||||
variableOrRule = variableOrRule.replace(/\s$/, '');
|
||||
|
||||
// might be less variable
|
||||
if (parenLevel === 0 && variableOrRule.indexOf(':') !== -1) {
|
||||
insidePropertyValue = true;
|
||||
|
@ -640,10 +640,10 @@ function Options(options, merge_child_field) {
|
||||
|
||||
this.indent_empty_lines = this._get_boolean('indent_empty_lines');
|
||||
|
||||
// valid templating languages ['django', 'erb', 'handlebars', 'php', 'smarty']
|
||||
// For now, 'auto' = all off for javascript, all on for html (and inline javascript).
|
||||
// valid templating languages ['django', 'erb', 'handlebars', 'php', 'smarty', 'angular']
|
||||
// For now, 'auto' = all off for javascript, all except angular on for html (and inline javascript/css).
|
||||
// other values ignored
|
||||
this.templating = this._get_selection_list('templating', ['auto', 'none', 'django', 'erb', 'handlebars', 'php', 'smarty'], ['auto']);
|
||||
this.templating = this._get_selection_list('templating', ['auto', 'none', 'angular', 'django', 'erb', 'handlebars', 'php', 'smarty'], ['auto']);
|
||||
}
|
||||
|
||||
Options.prototype._get_array = function(name, default_value) {
|
||||
@ -1516,7 +1516,8 @@ var template_names = {
|
||||
erb: false,
|
||||
handlebars: false,
|
||||
php: false,
|
||||
smarty: false
|
||||
smarty: false,
|
||||
angular: false
|
||||
};
|
||||
|
||||
// This lets templates appear anywhere we would do a readUntil
|
||||
@ -1859,6 +1860,13 @@ Printer.prototype.indent = function() {
|
||||
this.indent_level++;
|
||||
};
|
||||
|
||||
Printer.prototype.deindent = function() {
|
||||
if (this.indent_level > 0) {
|
||||
this.indent_level--;
|
||||
this._output.set_indent(this.indent_level, this.alignment_size);
|
||||
}
|
||||
};
|
||||
|
||||
Printer.prototype.get_full_indent = function(level) {
|
||||
level = this.indent_level + (level || 0);
|
||||
if (level < 1) {
|
||||
@ -2053,6 +2061,10 @@ Beautifier.prototype.beautify = function() {
|
||||
parser_token = this._handle_tag_close(printer, raw_token, last_tag_token);
|
||||
} else if (raw_token.type === TOKEN.TEXT) {
|
||||
parser_token = this._handle_text(printer, raw_token, last_tag_token);
|
||||
} else if (raw_token.type === TOKEN.CONTROL_FLOW_OPEN) {
|
||||
parser_token = this._handle_control_flow_open(printer, raw_token);
|
||||
} else if (raw_token.type === TOKEN.CONTROL_FLOW_CLOSE) {
|
||||
parser_token = this._handle_control_flow_close(printer, raw_token);
|
||||
} else {
|
||||
// This should never happen, but if it does. Print the raw token
|
||||
printer.add_raw_token(raw_token);
|
||||
@ -2067,6 +2079,38 @@ Beautifier.prototype.beautify = function() {
|
||||
return sweet_code;
|
||||
};
|
||||
|
||||
Beautifier.prototype._handle_control_flow_open = function(printer, raw_token) {
|
||||
var parser_token = {
|
||||
text: raw_token.text,
|
||||
type: raw_token.type
|
||||
};
|
||||
printer.set_space_before_token(raw_token.newlines || raw_token.whitespace_before !== '', true);
|
||||
if (raw_token.newlines) {
|
||||
printer.print_preserved_newlines(raw_token);
|
||||
} else {
|
||||
printer.set_space_before_token(raw_token.newlines || raw_token.whitespace_before !== '', true);
|
||||
}
|
||||
printer.print_token(raw_token);
|
||||
printer.indent();
|
||||
return parser_token;
|
||||
};
|
||||
|
||||
Beautifier.prototype._handle_control_flow_close = function(printer, raw_token) {
|
||||
var parser_token = {
|
||||
text: raw_token.text,
|
||||
type: raw_token.type
|
||||
};
|
||||
|
||||
printer.deindent();
|
||||
if (raw_token.newlines) {
|
||||
printer.print_preserved_newlines(raw_token);
|
||||
} else {
|
||||
printer.set_space_before_token(raw_token.newlines || raw_token.whitespace_before !== '', true);
|
||||
}
|
||||
printer.print_token(raw_token);
|
||||
return parser_token;
|
||||
};
|
||||
|
||||
Beautifier.prototype._handle_tag_close = function(printer, raw_token, last_tag_token) {
|
||||
var parser_token = {
|
||||
text: raw_token.text,
|
||||
@ -2404,7 +2448,7 @@ Beautifier.prototype._get_tag_open_token = function(raw_token) { //function to g
|
||||
|
||||
parser_token.is_unformatted = !parser_token.tag_complete && in_array(parser_token.tag_check, this._options.unformatted);
|
||||
parser_token.is_content_unformatted = !parser_token.is_empty_element && in_array(parser_token.tag_check, this._options.content_unformatted);
|
||||
parser_token.is_inline_element = in_array(parser_token.tag_name, this._options.inline) || parser_token.tag_name.includes("-") || parser_token.tag_start_char === '{';
|
||||
parser_token.is_inline_element = in_array(parser_token.tag_name, this._options.inline) || (this._options.inline_custom_elements && parser_token.tag_name.includes("-")) || parser_token.tag_start_char === '{';
|
||||
|
||||
return parser_token;
|
||||
};
|
||||
@ -2691,6 +2735,7 @@ function Options(options) {
|
||||
// obsolete inline tags
|
||||
'acronym', 'big', 'strike', 'tt'
|
||||
]);
|
||||
this.inline_custom_elements = this._get_boolean('inline_custom_elements', true);
|
||||
this.void_elements = this._get_array('void_elements', [
|
||||
// HTLM void elements - aka self-closing tags - aka singletons
|
||||
// https://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements
|
||||
@ -2765,6 +2810,8 @@ var Pattern = (__webpack_require__(12).Pattern);
|
||||
var TOKEN = {
|
||||
TAG_OPEN: 'TK_TAG_OPEN',
|
||||
TAG_CLOSE: 'TK_TAG_CLOSE',
|
||||
CONTROL_FLOW_OPEN: 'TK_CONTROL_FLOW_OPEN',
|
||||
CONTROL_FLOW_CLOSE: 'TK_CONTROL_FLOW_CLOSE',
|
||||
ATTRIBUTE: 'TK_ATTRIBUTE',
|
||||
EQUALS: 'TK_EQUALS',
|
||||
VALUE: 'TK_VALUE',
|
||||
@ -2789,11 +2836,13 @@ var Tokenizer = function(input_string, options) {
|
||||
|
||||
this.__patterns = {
|
||||
word: templatable_reader.until(/[\n\r\t <]/),
|
||||
word_control_flow_close_excluded: templatable_reader.until(/[\n\r\t <}]/),
|
||||
single_quote: templatable_reader.until_after(/'/),
|
||||
double_quote: templatable_reader.until_after(/"/),
|
||||
attribute: templatable_reader.until(/[\n\r\t =>]|\/>/),
|
||||
element_name: templatable_reader.until(/[\n\r\t >\/]/),
|
||||
|
||||
angular_control_flow_start: pattern_reader.matching(/\@[a-zA-Z]+[^({]*[({]/),
|
||||
handlebars_comment: pattern_reader.starting_with(/{{!--/).until_after(/--}}/),
|
||||
handlebars: pattern_reader.starting_with(/{{/).until_after(/}}/),
|
||||
handlebars_open: pattern_reader.until(/[\n\r\t }]/),
|
||||
@ -2807,6 +2856,7 @@ var Tokenizer = function(input_string, options) {
|
||||
|
||||
if (this._options.indent_handlebars) {
|
||||
this.__patterns.word = this.__patterns.word.exclude('handlebars');
|
||||
this.__patterns.word_control_flow_close_excluded = this.__patterns.word_control_flow_close_excluded.exclude('handlebars');
|
||||
}
|
||||
|
||||
this._unformatted_content_delimiter = null;
|
||||
@ -2825,14 +2875,16 @@ Tokenizer.prototype._is_comment = function(current_token) { // jshint unused:fal
|
||||
};
|
||||
|
||||
Tokenizer.prototype._is_opening = function(current_token) {
|
||||
return current_token.type === TOKEN.TAG_OPEN;
|
||||
return current_token.type === TOKEN.TAG_OPEN || current_token.type === TOKEN.CONTROL_FLOW_OPEN;
|
||||
};
|
||||
|
||||
Tokenizer.prototype._is_closing = function(current_token, open_token) {
|
||||
return current_token.type === TOKEN.TAG_CLOSE &&
|
||||
return (current_token.type === TOKEN.TAG_CLOSE &&
|
||||
(open_token && (
|
||||
((current_token.text === '>' || current_token.text === '/>') && open_token.text[0] === '<') ||
|
||||
(current_token.text === '}}' && open_token.text[0] === '{' && open_token.text[1] === '{')));
|
||||
(current_token.text === '}}' && open_token.text[0] === '{' && open_token.text[1] === '{')))
|
||||
) || (current_token.type === TOKEN.CONTROL_FLOW_CLOSE &&
|
||||
(current_token.text === '}' && open_token.text.endsWith('{')));
|
||||
};
|
||||
|
||||
Tokenizer.prototype._reset = function() {
|
||||
@ -2851,8 +2903,9 @@ Tokenizer.prototype._get_next_token = function(previous_token, open_token) { //
|
||||
token = token || this._read_open_handlebars(c, open_token);
|
||||
token = token || this._read_attribute(c, previous_token, open_token);
|
||||
token = token || this._read_close(c, open_token);
|
||||
token = token || this._read_control_flows(c, open_token);
|
||||
token = token || this._read_raw_content(c, previous_token, open_token);
|
||||
token = token || this._read_content_word(c);
|
||||
token = token || this._read_content_word(c, open_token);
|
||||
token = token || this._read_comment_or_cdata(c);
|
||||
token = token || this._read_processing(c);
|
||||
token = token || this._read_open(c, open_token);
|
||||
@ -2917,7 +2970,7 @@ Tokenizer.prototype._read_processing = function(c) { // jshint unused:false
|
||||
Tokenizer.prototype._read_open = function(c, open_token) {
|
||||
var resulting_string = null;
|
||||
var token = null;
|
||||
if (!open_token) {
|
||||
if (!open_token || open_token.type === TOKEN.CONTROL_FLOW_OPEN) {
|
||||
if (c === '<') {
|
||||
|
||||
resulting_string = this._input.next();
|
||||
@ -2934,7 +2987,7 @@ Tokenizer.prototype._read_open = function(c, open_token) {
|
||||
Tokenizer.prototype._read_open_handlebars = function(c, open_token) {
|
||||
var resulting_string = null;
|
||||
var token = null;
|
||||
if (!open_token) {
|
||||
if (!open_token || open_token.type === TOKEN.CONTROL_FLOW_OPEN) {
|
||||
if (this._options.indent_handlebars && c === '{' && this._input.peek(1) === '{') {
|
||||
if (this._input.peek(2) === '!') {
|
||||
resulting_string = this.__patterns.handlebars_comment.read();
|
||||
@ -2949,11 +3002,48 @@ Tokenizer.prototype._read_open_handlebars = function(c, open_token) {
|
||||
return token;
|
||||
};
|
||||
|
||||
Tokenizer.prototype._read_control_flows = function(c, open_token) {
|
||||
var resulting_string = '';
|
||||
var token = null;
|
||||
// Only check for control flows if angular templating is set AND indenting is set
|
||||
if (!this._options.templating.includes('angular') || !this._options.indent_handlebars) {
|
||||
return token;
|
||||
}
|
||||
|
||||
if (c === '@') {
|
||||
resulting_string = this.__patterns.angular_control_flow_start.read();
|
||||
if (resulting_string === '') {
|
||||
return token;
|
||||
}
|
||||
|
||||
var opening_parentheses_count = resulting_string.endsWith('(') ? 1 : 0;
|
||||
var closing_parentheses_count = 0;
|
||||
// The opening brace of the control flow is where the number of opening and closing parentheses equal
|
||||
// e.g. @if({value: true} !== null) {
|
||||
while (!(resulting_string.endsWith('{') && opening_parentheses_count === closing_parentheses_count)) {
|
||||
var next_char = this._input.next();
|
||||
if (next_char === null) {
|
||||
break;
|
||||
} else if (next_char === '(') {
|
||||
opening_parentheses_count++;
|
||||
} else if (next_char === ')') {
|
||||
closing_parentheses_count++;
|
||||
}
|
||||
resulting_string += next_char;
|
||||
}
|
||||
token = this._create_token(TOKEN.CONTROL_FLOW_OPEN, resulting_string);
|
||||
} else if (c === '}' && open_token && open_token.type === TOKEN.CONTROL_FLOW_OPEN) {
|
||||
resulting_string = this._input.next();
|
||||
token = this._create_token(TOKEN.CONTROL_FLOW_CLOSE, resulting_string);
|
||||
}
|
||||
return token;
|
||||
};
|
||||
|
||||
|
||||
Tokenizer.prototype._read_close = function(c, open_token) {
|
||||
var resulting_string = null;
|
||||
var token = null;
|
||||
if (open_token) {
|
||||
if (open_token && open_token.type === TOKEN.TAG_OPEN) {
|
||||
if (open_token.text[0] === '<' && (c === '>' || (c === '/' && this._input.peek(1) === '>'))) {
|
||||
resulting_string = this._input.next();
|
||||
if (c === '/') { // for close tag "/>"
|
||||
@ -3040,7 +3130,7 @@ Tokenizer.prototype._read_raw_content = function(c, previous_token, open_token)
|
||||
return null;
|
||||
};
|
||||
|
||||
Tokenizer.prototype._read_content_word = function(c) {
|
||||
Tokenizer.prototype._read_content_word = function(c, open_token) {
|
||||
var resulting_string = '';
|
||||
if (this._options.unformatted_content_delimiter) {
|
||||
if (c === this._options.unformatted_content_delimiter[0]) {
|
||||
@ -3049,7 +3139,7 @@ Tokenizer.prototype._read_content_word = function(c) {
|
||||
}
|
||||
|
||||
if (!resulting_string) {
|
||||
resulting_string = this.__patterns.word.read();
|
||||
resulting_string = (open_token && open_token.type === TOKEN.CONTROL_FLOW_OPEN) ? this.__patterns.word_control_flow_close_excluded.read() : this.__patterns.word.read();
|
||||
}
|
||||
if (resulting_string) {
|
||||
return this._create_token(TOKEN.TEXT, resulting_string);
|
||||
|
@ -1036,7 +1036,9 @@ Beautifier.prototype.handle_word = function(current_token) {
|
||||
}
|
||||
|
||||
if (this._flags.last_token.type === TOKEN.COMMA || this._flags.last_token.type === TOKEN.START_EXPR || this._flags.last_token.type === TOKEN.EQUALS || this._flags.last_token.type === TOKEN.OPERATOR) {
|
||||
if (!this.start_of_object_property()) {
|
||||
if (!this.start_of_object_property() && !(
|
||||
// start of object property is different for numeric values with +/- prefix operators
|
||||
in_array(this._flags.last_token.text, ['+', '-']) && this._last_last_text === ':' && this._flags.parent.mode === MODE.ObjectLiteral)) {
|
||||
this.allow_wrap_or_preserved_newline(current_token);
|
||||
}
|
||||
}
|
||||
@ -1317,6 +1319,12 @@ Beautifier.prototype.handle_operator = function(current_token) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (in_array(current_token.text, ['-', '+']) && this.start_of_object_property()) {
|
||||
// numeric value with +/- symbol in front as a property
|
||||
this.print_token(current_token);
|
||||
return;
|
||||
}
|
||||
|
||||
// Allow line wrapping between operators when operator_position is
|
||||
// set to before or preserve
|
||||
if (this._flags.last_token.type === TOKEN.OPERATOR && in_array(this._options.operator_position, OPERATOR_POSITION_BEFORE_OR_PRESERVE)) {
|
||||
@ -2143,12 +2151,13 @@ var nonASCIIidentifierChars = "\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u0
|
||||
//var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
|
||||
//var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
|
||||
|
||||
var identifierStart = "(?:\\\\u[0-9a-fA-F]{4}|[" + baseASCIIidentifierStartChars + nonASCIIidentifierStartChars + "])";
|
||||
var identifierChars = "(?:\\\\u[0-9a-fA-F]{4}|[" + baseASCIIidentifierChars + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "])*";
|
||||
var unicodeEscapeOrCodePoint = "\\\\u[0-9a-fA-F]{4}|\\\\u\\{[0-9a-fA-F]+\\}";
|
||||
var identifierStart = "(?:" + unicodeEscapeOrCodePoint + "|[" + baseASCIIidentifierStartChars + nonASCIIidentifierStartChars + "])";
|
||||
var identifierChars = "(?:" + unicodeEscapeOrCodePoint + "|[" + baseASCIIidentifierChars + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "])*";
|
||||
|
||||
exports.identifier = new RegExp(identifierStart + identifierChars, 'g');
|
||||
exports.identifierStart = new RegExp(identifierStart);
|
||||
exports.identifierMatch = new RegExp("(?:\\\\u[0-9a-fA-F]{4}|[" + baseASCIIidentifierChars + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "])+");
|
||||
exports.identifierMatch = new RegExp("(?:" + unicodeEscapeOrCodePoint + "|[" + baseASCIIidentifierChars + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "])+");
|
||||
|
||||
var nonASCIIwhitespace = /[\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/; // jshint ignore:line
|
||||
|
||||
@ -2337,10 +2346,10 @@ function Options(options, merge_child_field) {
|
||||
|
||||
this.indent_empty_lines = this._get_boolean('indent_empty_lines');
|
||||
|
||||
// valid templating languages ['django', 'erb', 'handlebars', 'php', 'smarty']
|
||||
// For now, 'auto' = all off for javascript, all on for html (and inline javascript).
|
||||
// valid templating languages ['django', 'erb', 'handlebars', 'php', 'smarty', 'angular']
|
||||
// For now, 'auto' = all off for javascript, all except angular on for html (and inline javascript/css).
|
||||
// other values ignored
|
||||
this.templating = this._get_selection_list('templating', ['auto', 'none', 'django', 'erb', 'handlebars', 'php', 'smarty'], ['auto']);
|
||||
this.templating = this._get_selection_list('templating', ['auto', 'none', 'angular', 'django', 'erb', 'handlebars', 'php', 'smarty'], ['auto']);
|
||||
}
|
||||
|
||||
Options.prototype._get_array = function(name, default_value) {
|
||||
@ -2953,6 +2962,9 @@ function unescape_string(s) {
|
||||
matched = input_scan.match(/x([0-9A-Fa-f]{2})/g);
|
||||
} else if (input_scan.peek() === 'u') {
|
||||
matched = input_scan.match(/u([0-9A-Fa-f]{4})/g);
|
||||
if (!matched) {
|
||||
matched = input_scan.match(/u\{([0-9A-Fa-f]+)\}/g);
|
||||
}
|
||||
} else {
|
||||
out += '\\';
|
||||
if (input_scan.hasNext()) {
|
||||
@ -2976,7 +2988,9 @@ function unescape_string(s) {
|
||||
} else if (escaped >= 0x00 && escaped < 0x20) {
|
||||
// leave 0x00...0x1f escaped
|
||||
out += '\\' + matched[0];
|
||||
continue;
|
||||
} else if (escaped > 0x10FFFF) {
|
||||
// If the escape sequence is out of bounds, keep the original sequence and continue conversion
|
||||
out += '\\' + matched[0];
|
||||
} else if (escaped === 0x22 || escaped === 0x27 || escaped === 0x5c) {
|
||||
// single-quote, apostrophe, backslash - escape these
|
||||
out += '\\' + String.fromCharCode(escaped);
|
||||
@ -3799,7 +3813,8 @@ var template_names = {
|
||||
erb: false,
|
||||
handlebars: false,
|
||||
php: false,
|
||||
smarty: false
|
||||
smarty: false,
|
||||
angular: false
|
||||
};
|
||||
|
||||
// This lets templates appear anywhere we would do a readUntil
|
||||
|
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user