From 2d43510f265edbe81fe75bee2a529ba49bbcbf33 Mon Sep 17 00:00:00 2001 From: Guangcong Luo Date: Sat, 11 May 2013 23:09:38 -0700 Subject: [PATCH] Refactor: rename messageSanitize to Tools.parseMessage --- js/battle.js | 8 +-- js/battledata.js | 126 +++++++++++++++++++++--------------------- js/client-chat.js | 10 ++-- js/client-mainmenu.js | 2 +- js/client.js | 2 +- 5 files changed, 74 insertions(+), 74 deletions(-) diff --git a/js/battle.js b/js/battle.js index 5c4391479..98ea1c893 100644 --- a/js/battle.js +++ b/js/battle.js @@ -4631,9 +4631,9 @@ function Battle(frame, logFrame, noPreload) { args.shift(); var message = args.join('|'); if (message.substr(0,2) === '//') { - self.log('
' + Tools.escapeHTML(name) + ': ' + messageSanitize(message.substr(1)) + '
', preempt); + self.log('
' + Tools.escapeHTML(name) + ': ' + Tools.parseMessage(message.substr(1)) + '
', preempt); } else if (message.substr(0,4).toLowerCase() === '/me ') { - self.log('
' + Tools.escapeHTML(name) + ' ' + messageSanitize(message.substr(4)) + '
', preempt); + self.log('
' + Tools.escapeHTML(name) + ' ' + Tools.parseMessage(message.substr(4)) + '
', preempt); } else if (message.substr(0,14).toLowerCase() === '/data-pokemon ') { self.log('
', preempt); } else if (message.substr(0,11).toLowerCase() === '/data-item ') { @@ -4643,7 +4643,7 @@ function Battle(frame, logFrame, noPreload) { } else if (message.substr(0,11).toLowerCase() === '/data-move ') { self.log('
', preempt); } else { - self.log('
' + Tools.escapeHTML(name) + ': ' + messageSanitize(message) + '
', preempt); + self.log('
' + Tools.escapeHTML(name) + ': ' + Tools.parseMessage(message) + '
', preempt); } break; case 'chatmsg': @@ -4658,7 +4658,7 @@ function Battle(frame, logFrame, noPreload) { self.log('
' + Tools.sanitizeHTML(list) + '
', preempt); break; case 'pm': - self.log('
' + Tools.escapeHTML(args[1]) + ': (Private to ' + Tools.escapeHTML(args[3]) + ') ' + messageSanitize(args[4]) + ''); + self.log('
' + Tools.escapeHTML(args[1]) + ': (Private to ' + Tools.escapeHTML(args[3]) + ') ' + Tools.parseMessage(args[4]) + ''); break; case 'askreg': self.log('
Register an account to protect your ladder rating!
'); diff --git a/js/battledata.js b/js/battledata.js index 9a3377445..29cabe898 100644 --- a/js/battledata.js +++ b/js/battledata.js @@ -101,69 +101,6 @@ function hashColor(name) { return colorCache[name]; } -function messageSanitize(str) { - str = Tools.escapeHTML(str); - // Don't format console commands (>>). - if (str.substr(0, 8) === '>>') return str; - // Don't format console results (<<). - if (str.substr(0, 8) === '<<') return str; - return str. - // ``code`` - replace(/\`\`([^< ]([^<`]*?[^< ])?)\`\`/g, '$1'). - // ~~strikethrough~~ - replace(/\~\~([^< ]([^<]*?[^< ])?)\~\~/g, '$1'). - // linking of URIs - replace(/(https?\:\/\/[a-z0-9-.]+(\/([^\s]*[^\s?.,])?)?|[a-z0-9]([a-z0-9-\.]*[a-z0-9])?\.(com|org|net|edu|us)((\/([^\s]*[^\s?.,])?)?|\b))/ig, function(uri) { - // Insert http:// before URIs without a URI scheme specified. - var fulluri = uri.replace(/^([a-z]*[^a-z:])/g, 'http://$1'); - var event; - if (Tools.interstice.isWhitelisted(fulluri)) { - event = 'External link'; - } else { - event = 'Interstice link'; - fulluri = Tools.escapeHTML(Tools.interstice.getURI(Tools.unescapeHTML(fulluri))); - } - return '' + uri + ''; - }). - // google [blah] - // google[blah] - // Google search for 'blah' - replace(/(\bgoogle ?\[([^\]<]+)\])/ig, function(p0, p1, p2) { - p2 = Tools.escapeHTML(encodeURIComponent(Tools.unescapeHTML(p2))); - return '' + p1 + ''; - }). - // gl [blah] - // gl[blah - // Google search for 'blah' and visit the first result ("I'm feeling lucky") - replace(/(\bgl ?\[([^\]<]+)\])/ig, function(p0, p1, p2) { - p2 = Tools.escapeHTML(encodeURIComponent(Tools.unescapeHTML(p2))); - return '' + p1 + ''; - }). - // wiki [blah] - // Search Wikipedia for 'blah' (and visit the article for 'blah' if it exists) - replace(/(\bwiki ?\[([^\]<]+)\])/ig, function(p0, p1, p2) { - p2 = Tools.escapeHTML(encodeURIComponent(Tools.unescapeHTML(p2))); - return '' + p1 + ''; - }). - // [[blah]] - // Short form of gl[[blah]] - replace(/\[\[([^< ]([^<`]*?[^< ])?)\]\]/ig, function(p0, p1) { - var q = Tools.escapeHTML(encodeURIComponent(Tools.unescapeHTML(p1))); - return '' + p1 +''; - }). - // __italics__ - replace(/\_\_([^< ]([^<]*?[^< ])?)\_\_/g, '$1'). - // **bold** - replace(/\*\*([^< ]([^<]*?[^< ])?)\*\*/g, '$1'); -} - function toId(text) { text = text || ''; if (typeof text === 'number') text = ''+text; @@ -360,6 +297,69 @@ var Tools = { return Tools.escapeHTML(formatid); }, + parseMessage: function(str) { + str = Tools.escapeHTML(str); + // Don't format console commands (>>). + if (str.substr(0, 8) === '>>') return str; + // Don't format console results (<<). + if (str.substr(0, 8) === '<<') return str; + return str. + // ``code`` + replace(/\`\`([^< ]([^<`]*?[^< ])?)\`\`/g, '$1'). + // ~~strikethrough~~ + replace(/\~\~([^< ]([^<]*?[^< ])?)\~\~/g, '$1'). + // linking of URIs + replace(/(https?\:\/\/[a-z0-9-.]+(\/([^\s]*[^\s?.,])?)?|[a-z0-9]([a-z0-9-\.]*[a-z0-9])?\.(com|org|net|edu|us)((\/([^\s]*[^\s?.,])?)?|\b))/ig, function(uri) { + // Insert http:// before URIs without a URI scheme specified. + var fulluri = uri.replace(/^([a-z]*[^a-z:])/g, 'http://$1'); + var event; + if (Tools.interstice.isWhitelisted(fulluri)) { + event = 'External link'; + } else { + event = 'Interstice link'; + fulluri = Tools.escapeHTML(Tools.interstice.getURI(Tools.unescapeHTML(fulluri))); + } + return '' + uri + ''; + }). + // google [blah] + // google[blah] + // Google search for 'blah' + replace(/(\bgoogle ?\[([^\]<]+)\])/ig, function(p0, p1, p2) { + p2 = Tools.escapeHTML(encodeURIComponent(Tools.unescapeHTML(p2))); + return '' + p1 + ''; + }). + // gl [blah] + // gl[blah + // Google search for 'blah' and visit the first result ("I'm feeling lucky") + replace(/(\bgl ?\[([^\]<]+)\])/ig, function(p0, p1, p2) { + p2 = Tools.escapeHTML(encodeURIComponent(Tools.unescapeHTML(p2))); + return '' + p1 + ''; + }). + // wiki [blah] + // Search Wikipedia for 'blah' (and visit the article for 'blah' if it exists) + replace(/(\bwiki ?\[([^\]<]+)\])/ig, function(p0, p1, p2) { + p2 = Tools.escapeHTML(encodeURIComponent(Tools.unescapeHTML(p2))); + return '' + p1 + ''; + }). + // [[blah]] + // Short form of gl[[blah]] + replace(/\[\[([^< ]([^<`]*?[^< ])?)\]\]/ig, function(p0, p1) { + var q = Tools.escapeHTML(encodeURIComponent(Tools.unescapeHTML(p1))); + return '' + p1 +''; + }). + // __italics__ + replace(/\_\_([^< ]([^<]*?[^< ])?)\_\_/g, '$1'). + // **bold** + replace(/\*\*([^< ]([^<]*?[^< ])?)\*\*/g, '$1'); + }, + escapeHTML: function(str, jsEscapeToo) { str = (str?''+str:''); str = str.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); diff --git a/js/client-chat.js b/js/client-chat.js index 48368171b..3c6413de0 100644 --- a/js/client-chat.js +++ b/js/client-chat.js @@ -733,13 +733,13 @@ var pmuserid = toUserid(pm); var oName = pm; if (pmuserid === app.user.get('userid')) oName = name; - this.$chat.append('
' + timestamp + '' + clickableName + ': (Private to ' + Tools.escapeHTML(pm) + ') ' + messageSanitize(message) + '
'); + this.$chat.append('
' + timestamp + '' + clickableName + ': (Private to ' + Tools.escapeHTML(pm) + ') ' + Tools.parseMessage(message) + '
'); } else if (message.substr(0,4).toLowerCase() === '/me ') { - this.$chat.append(chatDiv + timestamp + ' ' + clickableName + ' ' + messageSanitize(message.substr(4)) + '
'); + this.$chat.append(chatDiv + timestamp + ' ' + clickableName + ' ' + Tools.parseMessage(message.substr(4)) + '
'); } else if (message.substr(0,5).toLowerCase() === '/mee ') { - this.$chat.append(chatDiv + timestamp + ' ' + clickableName + '' + messageSanitize(message.substr(5)) + ''); + this.$chat.append(chatDiv + timestamp + ' ' + clickableName + '' + Tools.parseMessage(message.substr(5)) + ''); } else if (message.substr(0,10).toLowerCase() === '/announce ') { - this.$chat.append(chatDiv + timestamp + '' + clickableName + ': ' + messageSanitize(message.substr(10)) + ''); + this.$chat.append(chatDiv + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message.substr(10)) + ''); } else if (message.substr(0,6).toLowerCase() === '/warn ') { overlay('rules', {warning: message.substr(6)}); } else if (message.substr(0,14).toLowerCase() === '/data-pokemon ') { @@ -753,7 +753,7 @@ } else { // Normal chat message. if (message.substr(0,2) === '//') message = message.substr(1); - this.$chat.append(chatDiv + timestamp + '' + clickableName + ': ' + messageSanitize(message) + ''); + this.$chat.append(chatDiv + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message) + ''); } } }, { diff --git a/js/client-mainmenu.js b/js/client-mainmenu.js index b59a403a2..95877e7cd 100644 --- a/js/client-mainmenu.js +++ b/js/client-mainmenu.js @@ -72,7 +72,7 @@ var color = hashColor(toId(name)); var clickableName = '' + Tools.escapeHTML(name.substr(1)) + ''; if (name.substr(0, 1) !== ' ') clickableName = '' + Tools.escapeHTML(name.substr(0, 1)) + ''+clickableName; - $chat.append('
' + timestamp + '' + clickableName + ': ' + messageSanitize(message) + '
'); + $chat.append('
' + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message) + '
'); if (autoscroll) { $chatFrame.scrollTop($chat.height()); diff --git a/js/client.js b/js/client.js index 5df9b08d2..ea0d3f0a1 100644 --- a/js/client.js +++ b/js/client.js @@ -1348,7 +1348,7 @@ }, initialize: function(data) { this.type = 'semimodal'; - this.$el.html('

'+Tools.escapeHTML(data.message)+'

').css('max-width', 480); + this.$el.html('

'+Tools.parseMessage(data.message)+'

').css('max-width', 480); }, dispatchClickButton: function(e) {