fix endsWith problem

This commit is contained in:
kmdjs 2017-02-28 08:47:29 +08:00
parent 22c25cc47f
commit 23b656ccc7
3 changed files with 20 additions and 3 deletions

View File

@ -135,7 +135,7 @@
}, {
key: 'render',
value: function render() {
return '\n <div>\n {{{img}}}\n <h1 onclick={function(e){\n console.log(this)\n console.log(e)\n console.log(\'test \\\' test "double quote"\')\n console.log("test \\"")\n }}>Hello, {{name}}!</h1>\n </div>\n \t\t';
return '\n <div>\n {{{img}}}\n <h1 onclick={function(e){\n console.log(this)\n console.log(e)\n console.log(\'test \\\' test "double quote"\')\n console.log("test \\"")\n alert(e.type)\n }}>Hello, {{name}}!</h1>\n </div>\n \t\t';
}
}]);
@ -1746,6 +1746,14 @@
return unsafe.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
}
function endsWith(str, end) {
if (String.prototype.endsWith) {
return String.prototype.endsWith.call(str, end);
} else {
return str.substr(str.length - 1, 1) === end;
}
}
function scopedEvent(tpl, id) {
return tpl.replace(/<[\s\S]*?[^=]>/g, function (item) {
return item.replace(/on(abort|blur|cancel|canplay|canplaythrough|change|click|close|contextmenu|cuechange|dblclick|drag|dragend|dragenter|dragleave|dragover|dragstart|drop|durationchange|emptied|ended|error|focus|input|invalid|keydown|keypress|keyup|load|loadeddata|loadedmetadata|loadstart|mousedown|mouseenter|mouseleave|mousemove|mouseout|mouseover|mouseup|mousewheel|pause|play|playing|progress|ratechange|reset|resize|scroll|seeked|seeking|select|show|stalled|submit|suspend|timeupdate|toggle|volumechange|waiting|autocomplete|autocompleteerror|beforecopy|beforecut|beforepaste|copy|cut|paste|search|selectstart|wheel|webkitfullscreenchange|webkitfullscreenerror|touchstart|touchmove|touchend|touchcancel|pointerdown|pointerup|pointercancel|pointermove|pointerover|pointerout|pointerenter|pointerleave|Abort|Blur|Cancel|CanPlay|CanPlayThrough|Change|Click|Close|ContextMenu|CueChange|DblClick|Drag|DragEnd|DragEnter|DragLeave|DragOver|DragStart|Drop|DurationChange|Emptied|Ended|Error|Focus|Input|Invalid|KeyDown|KeyPress|KeyUp|Load|LoadedData|LoadedMetadata|LoadStart|MouseDown|MouseEnter|MouseLeave|MouseMove|MouseOut|MouseOver|MouseUp|MouseWheel|Pause|Play|Playing|Progress|RateChange|Reset|Resize|Scroll|Seeked|Seeking|Select|Show|Stalled|Submit|Suspend|TimeUpdate|Toggle|VolumeChange|Waiting|AutoComplete|AutoCompleteError|BeforeCopy|BeforeCut|BeforePaste|Copy|Cut|Paste|Search|SelectStart|Wheel|WebkitFullScreenChange|WebkitFullScreenError|TouchStart|TouchMove|TouchEnd|TouchCancel|PointerDown|PointerUp|PointerCancel|PointerMove|PointerOver|PointerOut|PointerEnter|PointerLeave)=('|"|{)([\s\S]*)('|"|})/g, function (eventStr, eventName, open, str, close) {
@ -1757,7 +1765,7 @@
var funcBody = '(' + str + ').bind(Omi.instances[' + id + '])(event)';
var result = 'on' + eventName + '="new Function(\'event\', \'' + escapeHtml(safeSingleQuote(funcBody)) + '\')(event)"';
return result.split('\n').map(function (line) {
return line.endsWith(';') ? line : line + ';';
return endsWith(line, ';') ? line : line + ';';
}).join('');
} else {
if (!str.match(/.*?\(.*?\)/)) {

View File

@ -24,6 +24,7 @@ class Hello extends Omi.Component {
console.log(e)
console.log('test \\' test "double quote"')
console.log("test \\"")
alert(e.type)
}}>Hello, {{name}}!</h1>
</div>
`;

View File

@ -20,6 +20,14 @@ function escapeHtml(unsafe) {
.replace(/'/g, "&#039;");
}
function endsWith(str,end) {
if (String.prototype.endsWith) {
return String.prototype.endsWith.call(str, end);
} else {
return str.substr(str.length-1,1) === end;
}
}
function scopedEvent(tpl,id) {
return tpl.replace(/<[\s\S]*?[^=]>/g, function (item) {
return item.replace(/on(abort|blur|cancel|canplay|canplaythrough|change|click|close|contextmenu|cuechange|dblclick|drag|dragend|dragenter|dragleave|dragover|dragstart|drop|durationchange|emptied|ended|error|focus|input|invalid|keydown|keypress|keyup|load|loadeddata|loadedmetadata|loadstart|mousedown|mouseenter|mouseleave|mousemove|mouseout|mouseover|mouseup|mousewheel|pause|play|playing|progress|ratechange|reset|resize|scroll|seeked|seeking|select|show|stalled|submit|suspend|timeupdate|toggle|volumechange|waiting|autocomplete|autocompleteerror|beforecopy|beforecut|beforepaste|copy|cut|paste|search|selectstart|wheel|webkitfullscreenchange|webkitfullscreenerror|touchstart|touchmove|touchend|touchcancel|pointerdown|pointerup|pointercancel|pointermove|pointerover|pointerout|pointerenter|pointerleave|Abort|Blur|Cancel|CanPlay|CanPlayThrough|Change|Click|Close|ContextMenu|CueChange|DblClick|Drag|DragEnd|DragEnter|DragLeave|DragOver|DragStart|Drop|DurationChange|Emptied|Ended|Error|Focus|Input|Invalid|KeyDown|KeyPress|KeyUp|Load|LoadedData|LoadedMetadata|LoadStart|MouseDown|MouseEnter|MouseLeave|MouseMove|MouseOut|MouseOver|MouseUp|MouseWheel|Pause|Play|Playing|Progress|RateChange|Reset|Resize|Scroll|Seeked|Seeking|Select|Show|Stalled|Submit|Suspend|TimeUpdate|Toggle|VolumeChange|Waiting|AutoComplete|AutoCompleteError|BeforeCopy|BeforeCut|BeforePaste|Copy|Cut|Paste|Search|SelectStart|Wheel|WebkitFullScreenChange|WebkitFullScreenError|TouchStart|TouchMove|TouchEnd|TouchCancel|PointerDown|PointerUp|PointerCancel|PointerMove|PointerOver|PointerOut|PointerEnter|PointerLeave)=('|"|{)([\s\S]*)('|"|})/g, function (eventStr, eventName, open, str, close) {
@ -31,7 +39,7 @@ function scopedEvent(tpl,id) {
const funcBody = `(${str}).bind(Omi.instances[${id}])(event)`;
const result = `on${eventName}="new Function('event', '${escapeHtml(safeSingleQuote(funcBody))}')(event)"`;
return result.split('\n').map(function(line) {
return line.endsWith(';') ? line : line + ';';
return endsWith(line, ';') ? line : line + ';';
}).join('');
} else {
if (!str.match(/.*?\(.*?\)/)) {