mirror of
https://github.com/ascribe/onion.git
synced 2025-01-03 18:35:09 +01:00
integrate string formating functionality
This commit is contained in:
parent
a19ea989ef
commit
68be98c3f0
@ -14,7 +14,6 @@ class PieceListActions {
|
|||||||
PieceListFetcher
|
PieceListFetcher
|
||||||
.fetch(page, pageSize, search, orderBy, orderAsc)
|
.fetch(page, pageSize, search, orderBy, orderAsc)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
console.log(res);
|
|
||||||
this.actions.updatePieceList({
|
this.actions.updatePieceList({
|
||||||
page,
|
page,
|
||||||
pageSize,
|
pageSize,
|
||||||
|
@ -5,6 +5,8 @@ import TableItem from '../ascribe_table/table_item';
|
|||||||
|
|
||||||
import TableColumnContentModel from '../../models/table_column_content_model';
|
import TableColumnContentModel from '../../models/table_column_content_model';
|
||||||
|
|
||||||
|
import getLangText from '../../utils/lang_utils';
|
||||||
|
|
||||||
let AccordionListItemTable = React.createClass({
|
let AccordionListItemTable = React.createClass({
|
||||||
getInitialState() {
|
getInitialState() {
|
||||||
return {
|
return {
|
||||||
@ -78,7 +80,7 @@ let AccordionListItemTableToggle = React.createClass({
|
|||||||
<span
|
<span
|
||||||
className={this.props.className}
|
className={this.props.className}
|
||||||
onClick={this.props.onClick}>
|
onClick={this.props.onClick}>
|
||||||
{this.props.show ? 'Hide all ' + this.props.numOfTableItems + ' Editions' : 'Show all ' + this.props.numOfTableItems + ' Editions'}
|
{this.props.show ? getLangText('Hide all %d Editions', this.props.numOfTableItems) : getLangText('Show all %d Editions', this.props.numOfTableItems)}
|
||||||
</span>
|
</span>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ import TableItemText from '../ascribe_table/table_item_text';
|
|||||||
import TableItemCheckbox from '../ascribe_table/table_item_checkbox';
|
import TableItemCheckbox from '../ascribe_table/table_item_checkbox';
|
||||||
import TableItemAclFiltered from '../ascribe_table/table_item_acl_filtered';
|
import TableItemAclFiltered from '../ascribe_table/table_item_acl_filtered';
|
||||||
|
|
||||||
import getText from '../../utils/lang_utils';
|
import getLangText from '../../utils/lang_utils';
|
||||||
|
|
||||||
let AccordionListItemTableEditions = React.createClass({
|
let AccordionListItemTableEditions = React.createClass({
|
||||||
|
|
||||||
@ -50,8 +50,8 @@ let AccordionListItemTableEditions = React.createClass({
|
|||||||
let columnList = [
|
let columnList = [
|
||||||
new TableColumnContentModel((item) => { return { 'editionId': item.id, 'pieceId': this.props.parentId, 'selectItem': this.selectItem, 'selected': item.selected }}, '', '', TableItemCheckbox, 1, false),
|
new TableColumnContentModel((item) => { return { 'editionId': item.id, 'pieceId': this.props.parentId, 'selectItem': this.selectItem, 'selected': item.selected }}, '', '', TableItemCheckbox, 1, false),
|
||||||
new TableColumnContentModel((item) => { return { 'content': item.edition_number }}, 'num_editions', '#', TableItemText, 1, false),
|
new TableColumnContentModel((item) => { return { 'content': item.edition_number }}, 'num_editions', '#', TableItemText, 1, false),
|
||||||
new TableColumnContentModel((item) => { return { 'content': item.bitcoin_id }}, 'bitcoin_id', getText('Bitcoin Address'), TableItemText, 5, false),
|
new TableColumnContentModel((item) => { return { 'content': item.bitcoin_id }}, 'bitcoin_id', getLangText('Bitcoin Address'), TableItemText, 5, false),
|
||||||
new TableColumnContentModel((item) => { return { 'content': item.acl }}, 'acl', 'Actions', TableItemAclFiltered, 4, false)
|
new TableColumnContentModel((item) => { return { 'content': item.acl }}, 'acl', getLangText('Actions'), TableItemAclFiltered, 4, false)
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
const languages = {
|
const languages = {
|
||||||
'en-US': {
|
'en-US': {
|
||||||
'Bitcoin Address': 'Bitcoin Address',
|
'Bitcoin Address': 'Bitcoin Address',
|
||||||
'Actions': 'Actions'
|
'Actions': 'Actions',
|
||||||
|
'Hide all %d Editions': 'Hide all %d Editions',
|
||||||
|
'Show all %d Editions': 'Show all %d Editions'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -34,8 +34,41 @@ let GeneralUtils = {
|
|||||||
let sum = 0;
|
let sum = 0;
|
||||||
l.forEach((num) => sum += parseFloat(num) || 0);
|
l.forEach((num) => sum += parseFloat(num) || 0);
|
||||||
return sum;
|
return sum;
|
||||||
}
|
},
|
||||||
|
|
||||||
|
/*
|
||||||
|
Taken from http://stackoverflow.com/a/4795914/1263876
|
||||||
|
Behaves like C's format string function
|
||||||
|
|
||||||
|
Does not throw errors though if a argument's type is not
|
||||||
|
matching its template's representative!!!
|
||||||
|
This essentially means you can use %d or %s for anything...
|
||||||
|
*/
|
||||||
|
formatText() {
|
||||||
|
var args = arguments,
|
||||||
|
string = args[0],
|
||||||
|
i = 1;
|
||||||
|
return string.replace(/%((%)|s|d)/g, function (m) {
|
||||||
|
// m is the matched format, e.g. %s, %d
|
||||||
|
var val = null;
|
||||||
|
if (m[2]) {
|
||||||
|
val = m[2];
|
||||||
|
} else {
|
||||||
|
val = args[i];
|
||||||
|
// A switch statement so that the formatter can be extended. Default is %s
|
||||||
|
switch (m) {
|
||||||
|
case '%d':
|
||||||
|
val = parseFloat(val);
|
||||||
|
if (isNaN(val)) {
|
||||||
|
val = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export default GeneralUtils;
|
export default GeneralUtils;
|
||||||
|
@ -1,18 +1,20 @@
|
|||||||
import languages from '../constants/languages';
|
import languages from '../constants/languages';
|
||||||
import template from 'lodash.template';
|
|
||||||
|
|
||||||
let getText = function(s, ...args) {
|
import GeneralUtils from './general_utils';
|
||||||
|
|
||||||
|
let getLangText = function(s, ...args) {
|
||||||
let lang = navigator.language || navigator.userLanguage;
|
let lang = navigator.language || navigator.userLanguage;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if(lang in languages) {
|
if(lang in languages) {
|
||||||
return languages[lang][s];
|
return GeneralUtils.formatText(languages[lang][s], args);
|
||||||
} else {
|
} else {
|
||||||
// just use the english language
|
// just use the english language
|
||||||
return languages['en-US'][s];
|
return GeneralUtils.formatText(languages['en-US'][s], args);
|
||||||
}
|
}
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
console.error(err);
|
console.error(new Error('Language-string is not in constants file.'));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export default getText;
|
export default getLangText;
|
Loading…
Reference in New Issue
Block a user