Files
iD/modules/ui/settings/custom_background.js
2023-11-13 21:37:06 +01:00

109 lines
4.0 KiB
JavaScript

import { dispatch as d3_dispatch } from 'd3-dispatch';
import { marked } from 'marked';
import { prefs } from '../../core/preferences';
import { t } from '../../core/localizer';
import { uiConfirm } from '../confirm';
import { utilNoAuto, utilRebind } from '../../util';
export function uiSettingsCustomBackground() {
var dispatch = d3_dispatch('change');
function render(selection) {
// keep separate copies of original and current settings
var _origSettings = {
template: prefs('background-custom-template')
};
var _currSettings = {
template: prefs('background-custom-template')
};
var example = 'https://tile.openstreetmap.org/{zoom}/{x}/{y}.png';
var modal = uiConfirm(selection).okButton();
modal
.classed('settings-modal settings-custom-background', true);
modal.select('.modal-section.header')
.append('h3')
.call(t.append('settings.custom_background.header'));
var textSection = modal.select('.modal-section.message-text');
var instructions =
`${t.html('settings.custom_background.instructions.info')}\n` +
'\n' +
`#### ${t.html('settings.custom_background.instructions.wms.tokens_label')}\n` +
`* ${t.html('settings.custom_background.instructions.wms.tokens.proj')}\n` +
`* ${t.html('settings.custom_background.instructions.wms.tokens.wkid')}\n` +
`* ${t.html('settings.custom_background.instructions.wms.tokens.dimensions')}\n` +
`* ${t.html('settings.custom_background.instructions.wms.tokens.bbox')}\n` +
'\n' +
`#### ${t.html('settings.custom_background.instructions.tms.tokens_label')}\n` +
`* ${t.html('settings.custom_background.instructions.tms.tokens.xyz')}\n` +
`* ${t.html('settings.custom_background.instructions.tms.tokens.flipped_y')}\n` +
`* ${t.html('settings.custom_background.instructions.tms.tokens.switch')}\n` +
`* ${t.html('settings.custom_background.instructions.tms.tokens.quadtile')}\n` +
`* ${t.html('settings.custom_background.instructions.tms.tokens.scale_factor')}\n` +
'\n' +
`#### ${t.html('settings.custom_background.instructions.example')}\n` +
`\`${example}\``;
textSection
.append('div')
.attr('class', 'instructions-template')
.html(marked(instructions));
textSection
.append('textarea')
.attr('class', 'field-template')
.attr('placeholder', t('settings.custom_background.template.placeholder'))
.call(utilNoAuto)
.property('value', _currSettings.template);
// insert a cancel button
var buttonSection = modal.select('.modal-section.buttons');
buttonSection
.insert('button', '.ok-button')
.attr('class', 'button cancel-button secondary-action')
.call(t.append('confirm.cancel'));
buttonSection.select('.cancel-button')
.on('click.cancel', clickCancel);
buttonSection.select('.ok-button')
.attr('disabled', isSaveDisabled)
.on('click.save', clickSave);
function isSaveDisabled() {
return null;
}
// restore the original template
function clickCancel() {
textSection.select('.field-template').property('value', _origSettings.template);
prefs('background-custom-template', _origSettings.template);
this.blur();
modal.close();
}
// accept the current template
function clickSave() {
_currSettings.template = textSection.select('.field-template').property('value');
prefs('background-custom-template', _currSettings.template);
this.blur();
modal.close();
dispatch.call('change', this, _currSettings);
}
}
return utilRebind(render, dispatch, 'on');
}