diff --git a/UI/WebServerResources/JavascriptAPIExtensions.js b/UI/WebServerResources/JavascriptAPIExtensions.js index f51c31445..12db867bd 100644 --- a/UI/WebServerResources/JavascriptAPIExtensions.js +++ b/UI/WebServerResources/JavascriptAPIExtensions.js @@ -98,22 +98,39 @@ String.prototype.asDate = function () { return newDate; }; -String.prototype.asCSSIdentifier = function() { - var characters = [ '_' , '\\.', '#' , '@' , '\\*', ':' , ';' , ',' , ' ', - '\\(', '\\)', '\\[', '\\]', '\\{', '\\}', - "'", '"', '&', '\\+' ]; - var escapeds = [ '_U_', '_D_', '_H_', '_A_', '_S_', '_C_', '_SC_', '_CO_', '_SP_', - '_LP_', '_RP_', '_LS_', '_RQ_', '_LC_', '_RC_', - '_SQ_', '_DQ_', '_AM_', '_P_' ]; +RegExp.escape = function(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); +} +var css_invalid_characters = [ '_' , '.', '#' , '@' , '*', ':' , ';' , ',' , ' ', + '(', ')', '[', ']', '{', '}', + "'", '"', '&', '+' ]; +var css_escape_characters = [ '_U_', '_D_', '_H_', '_A_', '_S_', '_C_', '_SC_', '_CO_', '_SP_', + '_LP_', '_RP_', '_LS_', '_RQ_', '_LC_', '_RC_', + '_SQ_', '_DQ_', '_AM_', '_P_' ]; + +String.prototype.asCSSIdentifier = function() { var newString = this; - for (var i = 0; i < characters.length; i++) { - var re = new RegExp(characters[i], 'g'); - newString = newString.replace(re, escapeds[i]); + for (var i = 0; i < css_invalid_characters.length; i++) { + var re = new RegExp(RegExp.escape(css_invalid_characters[i]), 'g'); + newString = newString.replace(re, css_escape_characters[i]); } - if (/^\d+/.test(newString)) { + if (/^\d/.test(newString)) newString = '_' + newString; + + return newString; +}; + +String.prototype.fromCSSIdentifier = function() { + var newString = this; + + if (/^_\d/.test(newString)) + newString = newString.substring(1); + + for (var i = 0; i < css_escape_characters.length; i++) { + var re = new RegExp(css_escape_characters[i], 'g'); + newString = newString.replace(re, css_invalid_characters[i]); } return newString;