sk_fems_ui commit
This commit is contained in:
124
plugins/message.js
Normal file
124
plugins/message.js
Normal file
@ -0,0 +1,124 @@
|
||||
export default (context, inject) => {
|
||||
const RE_TOKEN_LIST_VALUE = new RegExp(/^(?:\d)+/);
|
||||
const RE_TOKEN_NAMED_VALUE = new RegExp(/^(?:\w)+/);
|
||||
|
||||
const isObject = obj => {
|
||||
return obj !== null && typeof obj === 'object';
|
||||
};
|
||||
|
||||
const parse = msg => {
|
||||
let tokens = [];
|
||||
let position = 0;
|
||||
|
||||
let text = '';
|
||||
while (position < msg.length) {
|
||||
let char = msg[position++];
|
||||
if (char === '{') {
|
||||
if (text) {
|
||||
tokens.push({ type: 'text', value: text });
|
||||
}
|
||||
|
||||
text = '';
|
||||
let sub = '';
|
||||
char = msg[position++];
|
||||
while (char !== undefined && char !== '}') {
|
||||
sub += char;
|
||||
char = msg[position++];
|
||||
}
|
||||
const isClosed = char === '}';
|
||||
|
||||
const type = RE_TOKEN_LIST_VALUE.test(sub)
|
||||
? 'list'
|
||||
: isClosed && RE_TOKEN_NAMED_VALUE.test(sub)
|
||||
? 'named'
|
||||
: 'unknown';
|
||||
|
||||
tokens.push({ value: sub, type });
|
||||
} else if (char === '%') {
|
||||
// when found rails i18n syntax, skip text capture
|
||||
if (msg[position] !== '{') {
|
||||
text += char;
|
||||
}
|
||||
} else {
|
||||
text += char;
|
||||
}
|
||||
}
|
||||
text && tokens.push({ type: 'text', value: text });
|
||||
|
||||
return tokens;
|
||||
};
|
||||
|
||||
const compile = (tokens, values) => {
|
||||
const compiled = [];
|
||||
let index = 0;
|
||||
const mode = Array.isArray(values)
|
||||
? 'list'
|
||||
: isObject(values)
|
||||
? 'named'
|
||||
: 'unknown';
|
||||
|
||||
if (mode === 'unknown') {
|
||||
return compiled;
|
||||
}
|
||||
|
||||
while (index < tokens.length) {
|
||||
const token = tokens[index];
|
||||
switch (token.type) {
|
||||
case 'text':
|
||||
compiled.push(token.value);
|
||||
break;
|
||||
case 'list':
|
||||
compiled.push(values[parseInt(token.value, 10)]);
|
||||
break;
|
||||
case 'named':
|
||||
if (mode === 'named') {
|
||||
compiled.push(values[token.value]);
|
||||
} else {
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
console.log(
|
||||
`Type of token '${token.type}' and format of value '${mode}' don't match!`,
|
||||
);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'unknown':
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
console.log("Detect 'unknown' type of token!");
|
||||
}
|
||||
break;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
|
||||
return compiled;
|
||||
};
|
||||
|
||||
const m = (codeId, def, params) => {
|
||||
let tokens = [];
|
||||
let compiled = [];
|
||||
let returnMsg = '';
|
||||
let dicList = null,
|
||||
userLocale;
|
||||
|
||||
if (context.$auth && context.$auth.user) {
|
||||
dicList = context.$auth.user.dicList;
|
||||
userLocale = context.$auth.user.user.userLocale;
|
||||
returnMsg = dicList[userLocale][codeId];
|
||||
if (params) {
|
||||
tokens = parse(returnMsg);
|
||||
// console.log("tokens: ", tokens);
|
||||
compiled = compile(tokens, params);
|
||||
// console.log("compiled: ", compiled);
|
||||
returnMsg = compiled.join('');
|
||||
}
|
||||
}
|
||||
|
||||
if (!returnMsg) {
|
||||
returnMsg = def;
|
||||
}
|
||||
|
||||
return returnMsg;
|
||||
};
|
||||
|
||||
inject('m', m);
|
||||
};
|
Reference in New Issue
Block a user