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