123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452 |
- /**
- * Copyright (c) 2006-2016, JGraph Ltd
- * Copyright (c) 2006-2016, Gaudenz Alder
- */
- var mxResources =
- {
- /**
- * Class: mxResources
- *
- * Implements internationalization. You can provide any number of
- * resource files on the server using the following format for the
- * filename: name[-en].properties. The en stands for any lowercase
- * 2-character language shortcut (eg. de for german, fr for french).
- *
- * If the optional language extension is omitted, then the file is used as a
- * default resource which is loaded in all cases. If a properties file for a
- * specific language exists, then it is used to override the settings in the
- * default resource. All entries in the file are of the form key=value. The
- * values may then be accessed in code via <get>. Lines without
- * equal signs in the properties files are ignored.
- *
- * Resource files may either be added programmatically using
- * <add> or via a resource tag in the UI section of the
- * editor configuration file, eg:
- *
- * (code)
- * <mxEditor>
- * <ui>
- * <resource basename="examples/resources/mxWorkflow"/>
- * (end)
- *
- * The above element will load examples/resources/mxWorkflow.properties as well
- * as the language specific file for the current language, if it exists.
- *
- * Values may contain placeholders of the form {1}...{n} where each placeholder
- * is replaced with the value of the corresponding array element in the params
- * argument passed to <mxResources.get>. The placeholder {1} maps to the first
- * element in the array (at index 0).
- *
- * See <mxClient.language> for more information on specifying the default
- * language or disabling all loading of resources.
- *
- * Lines that start with a # sign will be ignored.
- *
- * Special characters
- *
- * To use unicode characters, use the standard notation (eg. \u8fd1) or %u as a
- * prefix (eg. %u20AC will display a Euro sign). For normal hex encoded strings,
- * use % as a prefix, eg. %F6 will display a "o umlaut" (ö).
- *
- * See <resourcesEncoded> to disable this. If you disable this, make sure that
- * your files are UTF-8 encoded.
- *
- * Asynchronous loading
- *
- * By default, the core adds two resource files synchronously at load time.
- * To load these files asynchronously, set <mxLoadResources> to false
- * before loading mxClient.js and use <mxResources.loadResources> instead.
- *
- * Variable: resources
- *
- * Object that maps from keys to values.
- */
- resources: {},
- /**
- * Variable: extension
- *
- * Specifies the extension used for language files. Default is <mxResourceExtension>.
- */
- extension: mxResourceExtension,
- /**
- * Variable: resourcesEncoded
- *
- * Specifies whether or not values in resource files are encoded with \u or
- * percentage. Default is false.
- */
- resourcesEncoded: false,
- /**
- * Variable: loadDefaultBundle
- *
- * Specifies if the default file for a given basename should be loaded.
- * Default is true.
- */
- loadDefaultBundle: true,
- /**
- * Variable: loadDefaultBundle
- *
- * Specifies if the specific language file file for a given basename should
- * be loaded. Default is true.
- */
- loadSpecialBundle: true,
- /**
- * Function: isLanguageSupported
- *
- * Hook for subclassers to disable support for a given language. This
- * implementation returns true if lan is in <mxClient.languages>.
- *
- * Parameters:
- *
- * lan - The current language.
- */
- isLanguageSupported: function(lan)
- {
- if (mxClient.languages != null)
- {
- return mxUtils.indexOf(mxClient.languages, lan) >= 0;
- }
-
- return true;
- },
- /**
- * Function: getDefaultBundle
- *
- * Hook for subclassers to return the URL for the special bundle. This
- * implementation returns basename + <extension> or null if
- * <loadDefaultBundle> is false.
- *
- * Parameters:
- *
- * basename - The basename for which the file should be loaded.
- * lan - The current language.
- */
- getDefaultBundle: function(basename, lan)
- {
- if (mxResources.loadDefaultBundle || !mxResources.isLanguageSupported(lan))
- {
- return basename + mxResources.extension;
- }
- else
- {
- return null;
- }
- },
- /**
- * Function: getSpecialBundle
- *
- * Hook for subclassers to return the URL for the special bundle. This
- * implementation returns basename + '_' + lan + <extension> or null if
- * <loadSpecialBundle> is false or lan equals <mxClient.defaultLanguage>.
- *
- * If <mxResources.languages> is not null and <mxClient.language> contains
- * a dash, then this method checks if <isLanguageSupported> returns true
- * for the full language (including the dash). If that returns false the
- * first part of the language (up to the dash) will be tried as an extension.
- *
- * If <mxResources.language> is null then the first part of the language is
- * used to maintain backwards compatibility.
- *
- * Parameters:
- *
- * basename - The basename for which the file should be loaded.
- * lan - The language for which the file should be loaded.
- */
- getSpecialBundle: function(basename, lan)
- {
- if (mxClient.languages == null || !this.isLanguageSupported(lan))
- {
- var dash = lan.indexOf('-');
-
- if (dash > 0)
- {
- lan = lan.substring(0, dash);
- }
- }
- if (mxResources.loadSpecialBundle && mxResources.isLanguageSupported(lan) && lan != mxClient.defaultLanguage)
- {
- return basename + '_' + lan + mxResources.extension;
- }
- else
- {
- return null;
- }
- },
- /**
- * Function: add
- *
- * Adds the default and current language properties file for the specified
- * basename. Existing keys are overridden as new files are added. If no
- * callback is used then the request is synchronous.
- *
- * Example:
- *
- * At application startup, additional resources may be
- * added using the following code:
- *
- * (code)
- * mxResources.add('resources/editor');
- * (end)
- *
- * Parameters:
- *
- * basename - The basename for which the file should be loaded.
- * lan - The language for which the file should be loaded.
- * callback - Optional callback for asynchronous loading.
- */
- add: function(basename, lan, callback)
- {
- lan = (lan != null) ? lan : ((mxClient.language != null) ?
- mxClient.language.toLowerCase() : mxConstants.NONE);
-
- if (lan != mxConstants.NONE)
- {
- var defaultBundle = mxResources.getDefaultBundle(basename, lan);
- var specialBundle = mxResources.getSpecialBundle(basename, lan);
-
- var loadSpecialBundle = function()
- {
- if (specialBundle != null)
- {
- if (callback)
- {
- mxUtils.get(specialBundle, function(req)
- {
- mxResources.parse(req.getText());
- callback();
- }, function()
- {
- callback();
- });
- }
- else
- {
- try
- {
- var req = mxUtils.load(specialBundle);
-
- if (req.isReady())
- {
- mxResources.parse(req.getText());
- }
- }
- catch (e)
- {
- // ignore
- }
- }
- }
- else if (callback != null)
- {
- callback();
- }
- }
-
- if (defaultBundle != null)
- {
- if (callback)
- {
- mxUtils.get(defaultBundle, function(req)
- {
- mxResources.parse(req.getText());
- loadSpecialBundle();
- }, function()
- {
- loadSpecialBundle();
- });
- }
- else
- {
- try
- {
- var req = mxUtils.load(defaultBundle);
-
- if (req.isReady())
- {
- mxResources.parse(req.getText());
- }
-
- loadSpecialBundle();
- }
- catch (e)
- {
- // ignore
- }
- }
- }
- else
- {
- // Overlays the language specific file (_lan-extension)
- loadSpecialBundle();
- }
- }
- },
- /**
- * Function: parse
- *
- * Parses the key, value pairs in the specified
- * text and stores them as local resources.
- */
- parse: function(text)
- {
- if (text != null)
- {
- var lines = text.split('\n');
-
- for (var i = 0; i < lines.length; i++)
- {
- if (lines[i].charAt(0) != '#')
- {
- var index = lines[i].indexOf('=');
-
- if (index > 0)
- {
- var key = lines[i].substring(0, index);
- var idx = lines[i].length;
-
- if (lines[i].charCodeAt(idx - 1) == 13)
- {
- idx--;
- }
-
- var value = lines[i].substring(index + 1, idx);
-
- if (this.resourcesEncoded)
- {
- value = value.replace(/\\(?=u[a-fA-F\d]{4})/g,"%");
- mxResources.resources[key] = unescape(value);
- }
- else
- {
- mxResources.resources[key] = value;
- }
- }
- }
- }
- }
- },
- /**
- * Function: get
- *
- * Returns the value for the specified resource key.
- *
- * Example:
- * To read the value for 'welomeMessage', use the following:
- * (code)
- * var result = mxResources.get('welcomeMessage') || '';
- * (end)
- *
- * This would require an entry of the following form in
- * one of the English language resource files:
- * (code)
- * welcomeMessage=Welcome to mxGraph!
- * (end)
- *
- * The part behind the || is the string value to be used if the given
- * resource is not available.
- *
- * Parameters:
- *
- * key - String that represents the key of the resource to be returned.
- * params - Array of the values for the placeholders of the form {1}...{n}
- * to be replaced with in the resulting string.
- * defaultValue - Optional string that specifies the default return value.
- */
- get: function(key, params, defaultValue)
- {
- var value = mxResources.resources[key];
-
- // Applies the default value if no resource was found
- if (value == null)
- {
- value = defaultValue;
- }
-
- // Replaces the placeholders with the values in the array
- if (value != null && params != null)
- {
- value = mxResources.replacePlaceholders(value, params);
- }
-
- return value;
- },
- /**
- * Function: replacePlaceholders
- *
- * Replaces the given placeholders with the given parameters.
- *
- * Parameters:
- *
- * value - String that contains the placeholders.
- * params - Array of the values for the placeholders of the form {1}...{n}
- * to be replaced with in the resulting string.
- */
- replacePlaceholders: function(value, params)
- {
- var result = [];
- var index = null;
-
- for (var i = 0; i < value.length; i++)
- {
- var c = value.charAt(i);
- if (c == '{')
- {
- index = '';
- }
- else if (index != null && c == '}')
- {
- index = parseInt(index)-1;
-
- if (index >= 0 && index < params.length)
- {
- result.push(params[index]);
- }
-
- index = null;
- }
- else if (index != null)
- {
- index += c;
- }
- else
- {
- result.push(c);
- }
- }
-
- return result.join('');
- },
- /**
- * Function: loadResources
- *
- * Loads all required resources asynchronously. Use this to load the graph and
- * editor resources if <mxLoadResources> is false.
- *
- * Parameters:
- *
- * callback - Callback function for asynchronous loading.
- */
- loadResources: function(callback)
- {
- mxResources.add(mxClient.basePath+'/resources/editor', null, function()
- {
- mxResources.add(mxClient.basePath+'/resources/graph', null, callback);
- });
- }
- };
- __mxOutput.mxResources = typeof mxResources !== 'undefined' ? mxResources : undefined;
|