Index: ps/trunk/binaries/data/mods/public/globalscripts/Templates.js =================================================================== --- ps/trunk/binaries/data/mods/public/globalscripts/Templates.js +++ ps/trunk/binaries/data/mods/public/globalscripts/Templates.js @@ -28,20 +28,22 @@ } /** - * Gets an array of all classes for this identity template + * @return {string[]} - All the classes for this identity template. */ function GetIdentityClasses(template) { - var classList = []; + let classString = ""; + if (template.Classes && template.Classes._string) - classList = classList.concat(template.Classes._string.split(/\s+/)); + classString += " " + template.Classes._string; if (template.VisibleClasses && template.VisibleClasses._string) - classList = classList.concat(template.VisibleClasses._string.split(/\s+/)); + classString += " " + template.VisibleClasses._string; if (template.Rank) - classList = classList.concat(template.Rank); - return classList; + classString += " " + template.Rank; + + return classString.length > 1 ? classString.substring(1).split(" ") : []; } /** @@ -50,9 +52,7 @@ */ function GetVisibleIdentityClasses(template) { - if (template.VisibleClasses && template.VisibleClasses._string) - return template.VisibleClasses._string.split(/\s+/); - return []; + return template.VisibleClasses && template.VisibleClasses._string ? template.VisibleClasses._string.split(" ") : []; } /** @@ -87,8 +87,8 @@ // If the elements are still strings, split them by space or by '+' if (typeof sublist == "string") sublist = sublist.split(/[+\s]+/); - if (sublist.every(c => (c[0] == "!" && classes.indexOf(c.substr(1)) == -1) - || (c[0] != "!" && classes.indexOf(c) != -1))) + if (sublist.every(c => (c[0] == "!" && classes.indexOf(c.substr(1)) == -1) || + (c[0] != "!" && classes.indexOf(c) != -1))) return true; } Index: ps/trunk/binaries/data/mods/public/globalscripts/tests/test_Template.js =================================================================== --- ps/trunk/binaries/data/mods/public/globalscripts/tests/test_Template.js +++ ps/trunk/binaries/data/mods/public/globalscripts/tests/test_Template.js @@ -0,0 +1,48 @@ +let identityTemplate = { + "Classes": { "@datatype": "tokens", "_string": "b a" }, + "VisibleClasses": { "@datatype": "tokens", "_string": "c ß" } +}; + +TS_ASSERT_UNEVAL_EQUALS(GetIdentityClasses(identityTemplate), ["b", "a", "c", "ß"]); +TS_ASSERT_UNEVAL_EQUALS(GetVisibleIdentityClasses(identityTemplate), ["c", "ß"]); + +identityTemplate = { + "Classes": { "@datatype": "tokens", "_string": "" }, + "VisibleClasses": { "@datatype": "tokens", "_string": "c ß" } +}; + +TS_ASSERT_UNEVAL_EQUALS(GetIdentityClasses(identityTemplate), ["c", "ß"]); +TS_ASSERT_UNEVAL_EQUALS(GetVisibleIdentityClasses(identityTemplate), ["c", "ß"]); + +identityTemplate = { + "Classes": { "@datatype": "tokens", "_string": "classA" }, + "VisibleClasses": { "@datatype": "tokens", "_string": "classC classF" }, + "Rank": "testRank" +}; + +TS_ASSERT_UNEVAL_EQUALS(GetIdentityClasses(identityTemplate), ["classA", "classC", "classF", "testRank"]); +TS_ASSERT_UNEVAL_EQUALS(GetVisibleIdentityClasses(identityTemplate), ["classC", "classF"]); + +identityTemplate = { +}; + +TS_ASSERT_UNEVAL_EQUALS(GetIdentityClasses(identityTemplate), []); +TS_ASSERT_UNEVAL_EQUALS(GetVisibleIdentityClasses(identityTemplate), []); + +identityTemplate = { + "Classes": { "@datatype": "tokens", "_string": "" }, + "VisibleClasses": { "@datatype": "tokens", "_string": "" }, + "Rank": "" +}; + +TS_ASSERT_UNEVAL_EQUALS(GetIdentityClasses(identityTemplate), []); +TS_ASSERT_UNEVAL_EQUALS(GetVisibleIdentityClasses(identityTemplate), []); + +identityTemplate = { + "Classes": {}, + "VisibleClasses": {}, + "Rank": "" +}; + +TS_ASSERT_UNEVAL_EQUALS(GetIdentityClasses(identityTemplate), []); +TS_ASSERT_UNEVAL_EQUALS(GetVisibleIdentityClasses(identityTemplate), []);