diff --git a/binaries/data/mods/public/gui/session/selection_details.js b/binaries/data/mods/public/gui/session/selection_details.js index e731f72228..8815704eba 100644 --- a/binaries/data/mods/public/gui/session/selection_details.js +++ b/binaries/data/mods/public/gui/session/selection_details.js @@ -302,6 +302,15 @@ function displaySingle(entState, template) if (genericName) iconTooltip = "[font=\"sans-bold-16\"]" + genericName + "[/font]"; + if (template.visibleIdentityClasses && template.visibleIdentityClasses.length) + { + iconTooltip += "\n[font=\"sans-bold-13\"]" + translate("Classes:") + "[/font] "; + iconTooltip += "[font=\"sans-13\"]" + translate(template.visibleIdentityClasses[0]) ; + for (var i = 1; i < template.visibleIdentityClasses.length; i++) + iconTooltip += ", " + translate(template.visibleIdentityClasses[i]); + iconTooltip += "[/font]"; + } + if (template.tooltip) iconTooltip += "\n[font=\"sans-13\"]" + template.tooltip + "[/font]"; diff --git a/binaries/data/mods/public/gui/session/unit_commands.js b/binaries/data/mods/public/gui/session/unit_commands.js index eed4c5f497..e88851d544 100644 --- a/binaries/data/mods/public/gui/session/unit_commands.js +++ b/binaries/data/mods/public/gui/session/unit_commands.js @@ -501,6 +501,15 @@ function setupUnitPanel(guiName, usedPanels, unitEntState, playerState, items, c if (key) tooltip = "[color=\"255 251 131\"][font=\"sans-bold-16\"][" + key + "][/font][/color] " + tooltip; + if (template.visibleIdentityClasses && template.visibleIdentityClasses.length) + { + tooltip += "\n[font=\"sans-bold-13\"]" + translate("Classes:") + "[/font] "; + tooltip += "[font=\"sans-13\"]" + translate(template.visibleIdentityClasses[0]) ; + for (var c = 1; c < template.visibleIdentityClasses.length; c++) + tooltip += ", " + translate(template.visibleIdentityClasses[c]); + tooltip += "[/font]"; + } + if (template.tooltip) tooltip += "\n[font=\"sans-13\"]" + template.tooltip + "[/font]"; diff --git a/binaries/data/mods/public/l10n/messages.json b/binaries/data/mods/public/l10n/messages.json index 3ad736c4e6..8032b42256 100644 --- a/binaries/data/mods/public/l10n/messages.json +++ b/binaries/data/mods/public/l10n/messages.json @@ -142,6 +142,9 @@ "keywords": { "GenericName": {}, "SpecificName": {}, + "VisibleClasses": { + "splitOnWhitespace": true + }, "Tooltip": {}, "GateConversionTooltip": {}, "DisabledTooltip": {}, diff --git a/binaries/data/mods/public/simulation/components/AuraManager.js b/binaries/data/mods/public/simulation/components/AuraManager.js index 4cbda68229..fca8cacaae 100644 --- a/binaries/data/mods/public/simulation/components/AuraManager.js +++ b/binaries/data/mods/public/simulation/components/AuraManager.js @@ -140,16 +140,9 @@ AuraManager.prototype.ApplyTemplateModifications = function(valueName, value, pl if (!this.templateModificationsCache[valueName] || !this.templateModificationsCache[valueName][player]) return value; - var rawClasses; + var classes = []; if (template && template.Identity) - { - rawClasses = template.Identity.Classes; - rawClasses = "_string" in rawClasses ? rawClasses._string : ""; - if (template.Identity.Rank) - rawClasses += " " + template.Identity.Rank; - } - - var classes = rawClasses && rawClasses.length ? rawClasses.split(/\s+/) : []; + classes = GetIdentityClasses(template.Identity); var keyList = []; diff --git a/binaries/data/mods/public/simulation/components/GuiInterface.js b/binaries/data/mods/public/simulation/components/GuiInterface.js index bd364c0839..5396c65187 100644 --- a/binaries/data/mods/public/simulation/components/GuiInterface.js +++ b/binaries/data/mods/public/simulation/components/GuiInterface.js @@ -192,6 +192,7 @@ GuiInterface.prototype.GetEntityState = function(player, ent) ret.identity = { "rank": cmpIdentity.GetRank(), "classes": cmpIdentity.GetClassesList(), + "visibleClasses": cmpIdentity.GetVisibleClassesList(), "selectionGroupName": cmpIdentity.GetSelectionGroupName() }; } @@ -630,7 +631,7 @@ GuiInterface.prototype.GetTemplateData = function(player, extendedName) ret.tooltip = template.Identity.Tooltip; ret.gateConversionTooltip = template.Identity.GateConversionTooltip; ret.requiredTechnology = template.Identity.RequiredTechnology; - ret.identityClassesString = GetTemplateIdentityClassesString(template); + ret.visibleIdentityClasses = GetVisibleIdentityClasses(template.Identity); } if (template.UnitMotion) diff --git a/binaries/data/mods/public/simulation/components/Identity.js b/binaries/data/mods/public/simulation/components/Identity.js index 36086a9868..8b729e696c 100644 --- a/binaries/data/mods/public/simulation/components/Identity.js +++ b/binaries/data/mods/public/simulation/components/Identity.js @@ -61,6 +61,14 @@ Identity.prototype.Schema = "" + "" + "" + + "" + + "" + + "" + + "tokens" + + "" + + "" + + "" + + "" + "" + "" + "" + @@ -99,11 +107,12 @@ Identity.prototype.GetRank = function() Identity.prototype.GetClassesList = function() { - if (this.template.Classes && "_string" in this.template.Classes) - return ( this.template.Classes._string + " " + this.GetRank() ).split(/\s+/); - if (this.GetRank().length) - return [this.GetRank()]; - return []; + return GetIdentityClasses(this.template); +}; + +Identity.prototype.GetVisibleClassesList = function() +{ + return GetVisibleIdentityClasses(this.template); }; Identity.prototype.HasClass = function(name) @@ -118,10 +127,7 @@ Identity.prototype.GetFormationsList = function() var string = this.template.Formations._string; return string.split(/\s+/); } - else - { - return []; - } + return []; }; Identity.prototype.CanUseFormation = function(template) diff --git a/binaries/data/mods/public/simulation/helpers/Templates.js b/binaries/data/mods/public/simulation/helpers/Templates.js index ae1ae259e9..1563577cfb 100644 --- a/binaries/data/mods/public/simulation/helpers/Templates.js +++ b/binaries/data/mods/public/simulation/helpers/Templates.js @@ -1,24 +1,31 @@ /** - * Return template.Identity.Classes._string if exists + * Gets an array of all classes for this identity template */ -function GetTemplateIdentityClassesString(template) +function GetIdentityClasses(template) { - var identityClassesString = undefined; - if (template.Identity && template.Identity.Classes && "_string" in template.Identity.Classes) - identityClassesString = template.Identity.Classes._string; - return identityClassesString; + var classList = []; + if (template.Classes && template.Classes._string) + classList = classList.concat(template.Classes._string.split(/\s+/)); + + if (template.VisibleClasses && template.VisibleClasses._string) + classList.concat(template.VisibleClasses._string.split(/\s+/)); + + if (template.Rank) + classList = classList.concat(template.Rank); + return classList; } /** - * Check whether template.Identity.Classes contains specified class + * Gets an array with all classes for this identity template + * that should be shown in the GUI */ -function TemplateHasIdentityClass(template, className) +function GetVisibleIdentityClasses(template) { - var identityClassesString = GetTemplateIdentityClassesString(template); - var hasClass = identityClassesString && identityClassesString.indexOf(className) != -1; - return hasClass; + if (template.VisibleClasses && template.VisibleClasses._string) + return template.VisibleClasses._string.split(/\s+/); + return []; } -Engine.RegisterGlobal("GetTemplateIdentityClassesString", GetTemplateIdentityClassesString); -Engine.RegisterGlobal("TemplateHasIdentityClass", TemplateHasIdentityClass); +Engine.RegisterGlobal("GetIdentityClasses", GetIdentityClasses); +Engine.RegisterGlobal("GetVisibleIdentityClasses", GetVisibleIdentityClasses); diff --git a/source/tools/i18n/potter/extractors.py b/source/tools/i18n/potter/extractors.py index c57f471ea9..6470afb2d6 100644 --- a/source/tools/i18n/potter/extractors.py +++ b/source/tools/i18n/potter/extractors.py @@ -419,7 +419,11 @@ class xml(Extractor): comment = element.get("comment") comment = u" ".join(comment.split()) # Remove tabs, line breaks and unecessary spaces. comments.append(comment) - yield element.text, context, position, comments + if "splitOnWhitespace" in self.keywords[keyword]: + for splitText in element.text.split(): + yield splitText, context, position, comments + else: + yield element.text, context, position, comments # Hack from http://stackoverflow.com/a/2819788