///
///
/*
© Microsoft. All rights reserved.
This library is supported for use in Windows Tailored Apps only.
Build: 6.2.8093.0
Version: 0.5
*/
(function (WinJS, undefined) {
var readyComplete = false;
var resourceMap;
var resourceLoader;
function processAllImpl(rootElement) {
WinJS.Resources._processAllImpl(rootElement);
return WinJS.Promise.wrap();
}
WinJS.Namespace.defineWithParent(WinJS, "Resources", {
_parseResourceSyntax: function (str){
var objs = [];
var chunks = str.split(";");
for(var i = 0, l = chunks.length; i < l; i++){
var chunk = chunks[i];
if(chunk.trim() !== ""){
var index = chunk.indexOf(":");
if (index !== -1){
var prop = chunk.substring(0, index);
var ref = chunk.substring(index + 1);
objs.push({destination: prop.trim(), source: ref.trim() });
}else {
if (WinJS.validation){
this._throwError("InvalidMarkup");
}
}
}
}
return objs;
},
_throwError : function(errorId) {
var hardCodedErrors = {
"InvalidMarkup":"Invalid markup",
"FailToFindItem":"Fail to find item:{0}",
"UndefinedProperty":"Undefined property name:{0}",
"InvalidValueForProperty":"Invalid value:[{0}] for given property:[{1}]",
"TooDeepLoop":"Nested loop more than {0} is not supported",
"NoItem":"no resource for given source: {0}",
"NoActionAllowed":"action is not allowed in the data-win-res syntax"
};
var message = hardCodedErrors[errorId];
if (message) {
for (var i = 1, l = arguments.length; i < l; i++){
message = message.replace("{" + (i-1) + "}", arguments[i]);
}
}else {
message = "unknown error";
}
throw message;
},
_setMember: function (props, root, data) {
var parts = props.split(".");
var ob = root;
var prop = parts[0];
for (var i = 1, len = parts.length; i < len; i++) {
if (ob[parts[ i-1]] === undefined) {
ob[parts[i-1] ] = {} ;
}
ob = ob[parts[i-1]] ;
prop = parts[i];
}
ob[prop] = data.value;
if ((data.lang !== undefined) &&
(ob.lang !== undefined) &&
(ob.lang !== data.lang) ) {
ob.lang = data.lang;
}
},
_getString : function (key) {
///
/// Search resources through MRT resources
///
///
/// Requested resource id for searching
///
if (!resourceLoader){
if (window.Windows && Windows.ApplicationModel && Windows.ApplicationModel.Resources) {
resourceLoader = new Windows.ApplicationModel.Resources.ResourceLoader();
}
}
return resourceLoader && resourceLoader.getString(key);
},
_getValue : function (key) {
///
/// Search resources through MRT resources
///
///
/// Requested resource id for searching
///
if (!resourceMap){
if (window.Windows && Windows.ApplicationModel && Windows.ApplicationModel.Resources) {
var mainResourceMap = Windows.ApplicationModel.Resources.Core.ResourceManager.current.mainResourceMap;
resourceMap = mainResourceMap.getSubtree('Resources');
}
}
if (resourceMap){
var resCandidate = resourceMap.getValue(key);
var langValue = "";
var qualifiers = resCandidate.qualifiers;
for (var i = 0, len = resCandidate.qualifiers.size; i < len; i++){
if (qualifiers[i].qualifierName === "Language"){
langValue = qualifiers[i].qualifierValue;
break;
}
}
return {value:resCandidate.toString(), lang:langValue};
}
},
_processAllImpl: function(rootElement, count){
rootElement = rootElement || document.body;
var count = count || 0;
if (count < 4) {
var elements = rootElement.querySelectorAll('[data-win-res]');
if (count == 0) {
if (rootElement.getAttribute) {
var elem = rootElement.getAttribute('data-win-res');
if (elem) {
elements.push(elem);
}
}
}
if (elements.length === 0) {
return;
}
for (var i = 0, len = elements.length; i < len; i++) {
var e = elements[i];
var decls = this._parseResourceSyntax(e.getAttribute('data-win-res'));
for (var k = 0, l = decls.length ; k < l; k++){
var decl = decls[k];
var data = false;
try {
data = this._getValue(decl.source);
} catch(err) {
if (WinJS.validation) {
throw err;
}
}
if (data) {
this._setMember(decl.destination, e, data);
if (decl.destination === "innerHTML") {
this._processAllImpl(e, count + 1);
}
}else {
if (WinJS.validation) {
this._throwError("NoItem", decl.source);
}
}
}
}
}
else if (WinJS.validation){
this._throwError("TooDeepLoop", 3);
}
},
processAll: function (rootElement) {
///
/// Process resources tag that reads its syntax and replace strings
/// with localized strings
///
///
/// Element to start searching at, if not specified, the entire document is searched.
///
if (!readyComplete) {
return WinJS.Utilities.ready().then(function () {
readyComplete = true;
return processAllImpl(rootElement);
});
}
else {
return processAllImpl(rootElement);
}
}
});
})(WinJS);