mirror of
https://github.com/ansible/awx.git
synced 2026-05-08 18:07:36 -02:30
Add support for configurably including strings
* Add json-loader to load JSON files via webpack * Add a JSON file for string overrides * Add a getter method to BaseString for an easier and more clearly defined approach to accessing string values
This commit is contained in:
3
awx/ui/client/assets/default.strings.json
Normal file
3
awx/ui/client/assets/default.strings.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,16 +1,61 @@
|
|||||||
|
import defaults from '../../assets/default.strings.json';
|
||||||
|
|
||||||
let i18n;
|
let i18n;
|
||||||
|
|
||||||
function BaseStringService (namespace) {
|
function BaseStringService (namespace) {
|
||||||
let t = i18n._;
|
let t = i18n._;
|
||||||
|
|
||||||
|
const ERROR_NO_NAMESPACE = t('BaseString cannot be extended without providing a namespace');
|
||||||
|
const ERROR_NO_STRING = t('No string exists with this name');
|
||||||
|
|
||||||
|
if (!namespace) {
|
||||||
|
throw new Error(ERROR_NO_NAMESPACE);
|
||||||
|
}
|
||||||
|
|
||||||
this.t = t;
|
this.t = t;
|
||||||
this[namespace] = {};
|
this[namespace] = {};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These strings are globally relevant and configured to give priority to values in
|
||||||
|
* default.strings.json and fall back to defaults defined inline.
|
||||||
|
*/
|
||||||
|
this.BRAND_NAME = defaults.BRAND_NAME || 'AWX';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Globally relevant strings should be defined here to avoid duplication of content across the
|
||||||
|
* the project.
|
||||||
|
*/
|
||||||
this.CANCEL = t('CANCEL');
|
this.CANCEL = t('CANCEL');
|
||||||
this.SAVE = t('SAVE');
|
this.SAVE = t('SAVE');
|
||||||
this.OK = t('OK');
|
this.OK = t('OK');
|
||||||
}
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This getter searches the extending class' namespace first for a match then falls back to
|
||||||
|
* the more globally relevant strings defined here. Strings with with dots as delimeters are
|
||||||
|
* supported to give flexibility to extending classes to nest strings as necessary.
|
||||||
|
*
|
||||||
|
* If no match is found, an error is thrown to alert the developer immediately instead of
|
||||||
|
* failing silently.
|
||||||
|
*/
|
||||||
|
this.get = name => {
|
||||||
|
let keys = name.split('.');
|
||||||
|
let value;
|
||||||
|
|
||||||
|
keys.forEach(key => {
|
||||||
|
if (!value) {
|
||||||
|
value = this[namespace][key] || this[key];
|
||||||
|
} else {
|
||||||
|
value = value[key];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!value) {
|
||||||
|
throw new Error(ERROR_NO_STRING);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return value;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function BaseStringServiceLoader (_i18n_) {
|
function BaseStringServiceLoader (_i18n_) {
|
||||||
i18n = _i18n_;
|
i18n = _i18n_;
|
||||||
|
|||||||
3696
awx/ui/npm-shrinkwrap.json
generated
3696
awx/ui/npm-shrinkwrap.json
generated
File diff suppressed because it is too large
Load Diff
@@ -63,6 +63,7 @@
|
|||||||
"jshint": "^2.9.4",
|
"jshint": "^2.9.4",
|
||||||
"jshint-loader": "^0.8.3",
|
"jshint-loader": "^0.8.3",
|
||||||
"jshint-stylish": "^2.2.0",
|
"jshint-stylish": "^2.2.0",
|
||||||
|
"json-loader": "^0.5.4",
|
||||||
"karma": "^1.4.1",
|
"karma": "^1.4.1",
|
||||||
"karma-chrome-launcher": "^1.0.1",
|
"karma-chrome-launcher": "^1.0.1",
|
||||||
"karma-coverage": "^1.1.1",
|
"karma-coverage": "^1.1.1",
|
||||||
|
|||||||
@@ -69,19 +69,27 @@ var baseConfig = function() {
|
|||||||
new webpack.optimize.CommonsChunkPlugin('vendor', 'tower.vendor.js')
|
new webpack.optimize.CommonsChunkPlugin('vendor', 'tower.vendor.js')
|
||||||
],
|
],
|
||||||
module: {
|
module: {
|
||||||
loaders: [{
|
loaders: [
|
||||||
// disable AMD loading (broken in this lib) and default to CommonJS (not broken)
|
{
|
||||||
test: /\.angular-tz-extensions.js$/,
|
// disable AMD loading (broken in this lib) and default to CommonJS (not broken)
|
||||||
loader: 'imports?define=>false'
|
test: /\.angular-tz-extensions.js$/,
|
||||||
}, {
|
loader: 'imports?define=>false'
|
||||||
// es6 -> es5
|
},
|
||||||
test: /\.js$/,
|
{
|
||||||
loader: 'babel-loader',
|
// es6 -> es5
|
||||||
exclude: /(node_modules)/,
|
test: /\.js$/,
|
||||||
query: {
|
loader: 'babel-loader',
|
||||||
presets: ['es2015']
|
exclude: /(node_modules)/,
|
||||||
|
query: {
|
||||||
|
presets: ['es2015']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.json$/,
|
||||||
|
loader: 'json-loader',
|
||||||
|
exclude: /(node_modules)/
|
||||||
}
|
}
|
||||||
}]
|
]
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
|
|||||||
Reference in New Issue
Block a user