Fix all the things
This commit is contained in:
parent
7cd4380ee4
commit
a277800868
|
@ -177,7 +177,6 @@ var usercss = (() => {
|
||||||
result.label = state.value;
|
result.label = state.value;
|
||||||
|
|
||||||
const {re, type, text} = state;
|
const {re, type, text} = state;
|
||||||
let defaultValue;
|
|
||||||
|
|
||||||
switch (type === 'image' && state.key === 'var' ? '@image@var' : type) {
|
switch (type === 'image' && state.key === 'var' ? '@image@var' : type) {
|
||||||
case 'checkbox': {
|
case 'checkbox': {
|
||||||
|
@ -195,25 +194,34 @@ var usercss = (() => {
|
||||||
state.errorPrefix = 'Invalid JSON: ';
|
state.errorPrefix = 'Invalid JSON: ';
|
||||||
parseJSONValue(state);
|
parseJSONValue(state);
|
||||||
state.errorPrefix = '';
|
state.errorPrefix = '';
|
||||||
|
const extractDefault = text => {
|
||||||
|
if (text.endsWith('*')) {
|
||||||
|
return text.slice(0, -1);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
if (Array.isArray(state.value)) {
|
if (Array.isArray(state.value)) {
|
||||||
result.options = state.value.map(text => {
|
result.options = state.value.map(text => {
|
||||||
if (text.endsWith('*')) {
|
const isDefault = extractDefault(text);
|
||||||
text = text.slice(0, -1);
|
if (isDefault) {
|
||||||
defaultValue = text;
|
result.default = isDefault;
|
||||||
}
|
}
|
||||||
return createOption(text);
|
return createOption(isDefault || text);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
result.options = Object.keys(state.value).map(k => {
|
result.options = Object.keys(state.value).map(k => {
|
||||||
if (k.endsWith('*')) {
|
const isDefault = extractDefault(k);
|
||||||
state.value[k] = state.value[k].slice(0, -1);
|
const value = state.value[k];
|
||||||
k = k.slice(0, -1);
|
if (isDefault) {
|
||||||
defaultValue = k;
|
k = isDefault;
|
||||||
|
result.default = k;
|
||||||
}
|
}
|
||||||
return createOption(k, state.value[k]);
|
return createOption(k, value);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
result.default = typeof defaultValue !== 'undefined' ? defaultValue : (result.options[0] || {}).name || '';
|
if (result.default === null) {
|
||||||
|
result.default = (result.options[0] || {}).name || '';
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,13 +232,10 @@ var usercss = (() => {
|
||||||
state.errorPrefix = '';
|
state.errorPrefix = '';
|
||||||
// [default, start, end, step, units] (start, end, step & units are optional)
|
// [default, start, end, step, units] (start, end, step & units are optional)
|
||||||
if (Array.isArray(state.value) && state.value.length) {
|
if (Array.isArray(state.value) && state.value.length) {
|
||||||
result.default = parseFloat(state.value.shift());
|
result.default = state.value.shift();
|
||||||
const nonDigit = /[^\d.+-]/;
|
|
||||||
// label may be placed anywhere after default value
|
// label may be placed anywhere after default value
|
||||||
const labelIndex = state.value.findIndex(item => nonDigit.test(item));
|
result.units = (state.value.find(i => typeof i === 'string') || '').replace(/[\d.+-]/g, '');
|
||||||
// but should not contain any numbers '4px' => 'px'
|
result.range = state.value.filter(i => typeof i === 'number');
|
||||||
result.units = labelIndex < 0 ? '' : state.value.splice(labelIndex, 1)[0].toString().replace(/[\d.+-]/g, '');
|
|
||||||
result.range = state.value.filter(item => !nonDigit.test(item));
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -615,7 +620,7 @@ var usercss = (() => {
|
||||||
va[value] = colorConverter.format(colorConverter.parse(va[value]), 'rgb');
|
va[value] = colorConverter.format(colorConverter.parse(va[value]), 'rgb');
|
||||||
} else if (
|
} else if (
|
||||||
(va.type === 'number' || va.type === 'range') &&
|
(va.type === 'number' || va.type === 'range') &&
|
||||||
!(typeof va[value] === 'number' || Array.isArray(va.range))
|
(typeof va[value] !== 'number' || !Array.isArray(va.range))
|
||||||
) {
|
) {
|
||||||
throw new Error(chrome.i18n.getMessage('styleMetaErrorRangeOrNumber', va.type));
|
throw new Error(chrome.i18n.getMessage('styleMetaErrorRangeOrNumber', va.type));
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,7 +99,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.current-value {
|
.current-value {
|
||||||
outline: 1px solid rgba(128, 128, 128, 0.5);
|
|
||||||
padding: 2px 4px;
|
padding: 2px 4px;
|
||||||
margin-right: 4px;
|
margin-right: 4px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,25 +201,18 @@ function configDialog(style) {
|
||||||
return va.value === null || va.value === undefined || va.value === va.default;
|
return va.value === null || va.value === undefined || va.value === va.default;
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleRangeAndNumberInputs(va, options) {
|
function rangeToProps(range = []) {
|
||||||
const dataset = {};
|
const dataset = {};
|
||||||
options.value = va.default;
|
if (range.length > 0) {
|
||||||
if (typeof va.range[0] !== 'undefined') {
|
dataset.min = range[0];
|
||||||
options.min = dataset.min = va.range[0];
|
|
||||||
}
|
}
|
||||||
if (typeof va.range[1] !== 'undefined') {
|
if (range.length > 1) {
|
||||||
options.max = dataset.max = va.range[1];
|
dataset.max = range[1];
|
||||||
}
|
}
|
||||||
if (va.range[2]) {
|
if (range[2]) {
|
||||||
options.step = va.range[2];
|
dataset.step = range[2];
|
||||||
}
|
}
|
||||||
const children = va.type === 'range' ? [$create('span.current-value', {textContent: va.value + va.units})] : [];
|
return dataset;
|
||||||
children.push(
|
|
||||||
$create(`span.current-${va.type}`, {dataset}, [
|
|
||||||
va.input = $create('input.config-value', options),
|
|
||||||
])
|
|
||||||
);
|
|
||||||
return children;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildConfigForm() {
|
function buildConfigForm() {
|
||||||
|
@ -279,6 +272,21 @@ function configDialog(style) {
|
||||||
];
|
];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'range':
|
||||||
|
case 'number': {
|
||||||
|
children = [
|
||||||
|
va.type === 'range' && $create('span.current-value', {textContent: va.value + va.units}),
|
||||||
|
va.input = $create('input.config-value', {
|
||||||
|
va,
|
||||||
|
type: va.type,
|
||||||
|
value: va.default,
|
||||||
|
...rangeToProps(va.range),
|
||||||
|
onchange: updateVarOnChange
|
||||||
|
})
|
||||||
|
];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
const options = {
|
const options = {
|
||||||
va,
|
va,
|
||||||
|
@ -287,14 +295,10 @@ function configDialog(style) {
|
||||||
oninput: updateVarOnInput,
|
oninput: updateVarOnInput,
|
||||||
onfocus: selectAllOnFocus,
|
onfocus: selectAllOnFocus,
|
||||||
};
|
};
|
||||||
if (va.type === 'range' || va.type === 'number') {
|
|
||||||
children = handleRangeAndNumberInputs(va, options);
|
|
||||||
} else {
|
|
||||||
children = [
|
children = [
|
||||||
va.input = $create('input.config-value', options),
|
va.input = $create('input.config-value', options),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -314,26 +318,29 @@ function configDialog(style) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateVarOnChange() {
|
function updateVarOnChange() {
|
||||||
|
console.log('updateVar', this.type)
|
||||||
if (this.type === 'number') {
|
if (this.type === 'number') {
|
||||||
this.value = this.va.value = clampValue(this.value, this.va.range);
|
this.value = this.va.value = clampValue(this.value, this.va.range);
|
||||||
} else if (this.type === 'range') {
|
} else if (this.type === 'range') {
|
||||||
$('.current-value', this.closest('.config-range')).textContent = this.va.value + (this.va.units || '');
|
|
||||||
this.va.value = parseFloat(this.value);
|
this.va.value = parseFloat(this.value);
|
||||||
|
$('.current-value', this.closest('.config-range')).textContent = this.va.value + (this.va.units || '');
|
||||||
} else {
|
} else {
|
||||||
this.va.value = this.type !== 'checkbox' ? this.value : this.checked ? '1' : '0';
|
this.va.value = this.type !== 'checkbox' ? this.value : this.checked ? '1' : '0';
|
||||||
}
|
}
|
||||||
|
console.log(this.va.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clamp input[type=number] to a valid range
|
// Clamp input[type=number] to a valid range
|
||||||
function clampValue(value, [min = 0, max = 100, step]) {
|
function clampValue(value, [min = 0, max = 100, step]) {
|
||||||
if (value < min) {
|
if (value < min) {
|
||||||
return min;
|
return min;
|
||||||
} else if (value > max) {
|
}
|
||||||
|
if (value > max) {
|
||||||
return max;
|
return max;
|
||||||
}
|
}
|
||||||
const remainder = value % (step || 1);
|
const inv = 1 / (step || 1);
|
||||||
// Don't restrict to integer values if step is undefined.
|
// Don't restrict to integer values if step is undefined.
|
||||||
return typeof step !== 'undefined' && remainder !== 0 ? value - remainder : value;
|
return typeof step !== 'undefined' ? Math.floor(inv * value) / inv : value;
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateVarOnInput(event, debounced = false) {
|
function updateVarOnInput(event, debounced = false) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user