|
|
- export default class EditJsonConfig extends FormApplication {
- constructor(config, callback) {
- super({}, {});
- this.config = config;
- this.callback = callback;
- }
-
- static get defaultOptions() {
- return mergeObject(super.defaultOptions, {
- id: 'token-variants-config-json-edit',
- classes: ['sheet'],
- template: 'modules/token-variants/templates/configJsonEdit.html',
- resizable: true,
- minimizable: false,
- title: 'Edit Token Configuration',
- width: 400,
- height: 380,
- });
- }
-
- async getData(options) {
- const data = super.getData(options);
-
- data.hasConfig = this.config != null && Object.keys(this.config).length !== 0;
- data.config = JSON.stringify(data.hasConfig ? this.config : {}, null, 2);
-
- return data;
- }
-
- /**
- * @param {JQuery} html
- */
- activateListeners(html) {
- super.activateListeners(html);
- html.on('input', '.command textarea', this._validateJSON.bind(this));
- // Override 'Tab' key to insert spaces
- html.on('keydown', '.command textarea', function (e) {
- if (e.key === 'Tab' && !e.shiftKey) {
- e.preventDefault();
- var start = this.selectionStart;
- var end = this.selectionEnd;
- this.value = this.value.substring(0, start) + ' ' + this.value.substring(end);
- this.selectionStart = this.selectionEnd = start + 2;
- return false;
- }
- });
-
- html.find('.remove').click(this._onRemove.bind(this));
- html.find('.format').click(this._onFormat.bind(this));
- }
-
- async _validateJSON(event) {
- const controls = $(event.target).closest('form').find('button[type="submit"], button.format');
- try {
- this.config = JSON.parse(event.target.value);
- this.config = expandObject(this.config);
- this.flag = this.config.flag;
- controls.prop('disabled', false);
- } catch (e) {
- controls.prop('disabled', true);
- }
- }
-
- async _onRemove(event) {
- this.config = {};
- this.submit();
- }
-
- async _onFormat(event) {
- $(event.target)
- .closest('form')
- .find('textarea[name="config"]')
- .val(JSON.stringify(this.config, null, 2));
- }
-
- /**
- * @param {Event} event
- * @param {Object} formData
- */
- async _updateObject(event, formData) {
- if (this.callback) this.callback(this.config);
- }
- }
|