2018-02-13 17:44:07 +01:00
|
|
|
/**
|
|
|
|
* BetterDiscord Modals
|
|
|
|
* Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
|
|
|
|
* All rights reserved.
|
|
|
|
* https://betterdiscord.net
|
|
|
|
*
|
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
|
*/
|
|
|
|
|
2018-02-14 02:40:47 +01:00
|
|
|
import { Utils, FileUtils } from 'common';
|
2018-02-14 17:11:26 +01:00
|
|
|
import { Settings, Events, PluginManager, ThemeManager } from 'modules';
|
2018-02-13 17:44:07 +01:00
|
|
|
import BasicModal from './components/bd/modals/BasicModal.vue';
|
|
|
|
import ErrorModal from './components/bd/modals/ErrorModal.vue';
|
2018-02-14 02:40:47 +01:00
|
|
|
import SettingsModal from './components/bd/modals/SettingsModal.vue';
|
2018-02-13 17:44:07 +01:00
|
|
|
|
2018-02-13 17:57:05 +01:00
|
|
|
export default class {
|
2018-02-13 17:44:07 +01:00
|
|
|
|
|
|
|
static add(modal, component) {
|
|
|
|
modal.component = modal.component || {
|
|
|
|
template: '<custom-modal :modal="modal" />',
|
|
|
|
components: { 'custom-modal': component },
|
|
|
|
data() { return { modal }; },
|
|
|
|
created() { modal.vue = this; }
|
|
|
|
};
|
|
|
|
modal.closing = false;
|
|
|
|
modal.close = () => this.close(modal);
|
|
|
|
|
|
|
|
this.stack.push(modal);
|
|
|
|
Events.emit('bd-refresh-modals');
|
|
|
|
return modal;
|
|
|
|
}
|
|
|
|
|
|
|
|
static close(modal) {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
modal.closing = true;
|
|
|
|
setTimeout(() => {
|
|
|
|
this._stack = this.stack.filter(m => m !== modal);
|
|
|
|
Events.emit('bd-refresh-modals');
|
|
|
|
resolve();
|
|
|
|
}, 200);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
static closeAll() {
|
|
|
|
for (let modal of this.stack)
|
|
|
|
modal.close();
|
|
|
|
}
|
|
|
|
|
|
|
|
static closeLast() {
|
|
|
|
if (!this.stack.length) return;
|
|
|
|
this.stack[this.stack.length - 1].close();
|
|
|
|
}
|
|
|
|
|
|
|
|
static basic(title, text) {
|
|
|
|
return this.add({ title, text }, BasicModal);
|
|
|
|
}
|
|
|
|
|
|
|
|
static error(event) {
|
|
|
|
return this.add({ event }, ErrorModal);
|
|
|
|
}
|
|
|
|
|
2018-02-13 17:57:05 +01:00
|
|
|
static showContentManagerErrors() {
|
|
|
|
// Get any errors from PluginManager and ThemeManager
|
|
|
|
this.error({
|
|
|
|
header:
|
|
|
|
(PluginManager.errors.length && ThemeManager.errors.length ? '' :
|
|
|
|
(PluginManager.errors.length ? PluginManager.moduleName : ThemeManager.moduleName) + ' - ') +
|
|
|
|
(PluginManager.errors.length ? `${PluginManager.errors.length} ${PluginManager.contentType}${PluginManager.errors.length !== 1 ? 's' : ''}` : '') +
|
|
|
|
(PluginManager.errors.length && ThemeManager.errors.length ? ' and ' : '') +
|
|
|
|
(ThemeManager.errors.length ? `${ThemeManager.errors.length} ${ThemeManager.contentType}${ThemeManager.errors.length !== 1 ? 's' : ''}` : '') +
|
|
|
|
' failed to load',
|
|
|
|
module: (PluginManager.errors.length && ThemeManager.errors.length ? 'Content Manager' :
|
|
|
|
(PluginManager.errors.length ? PluginManager.moduleName : ThemeManager.moduleName)),
|
|
|
|
type: 'err',
|
|
|
|
content: ([]).concat(PluginManager.errors).concat(ThemeManager.errors)
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2018-02-14 02:40:47 +01:00
|
|
|
static settings(headertext, settings, settingsUpdated, settingUpdated, saveSettings) {
|
|
|
|
return this.add({
|
|
|
|
headertext, settings,
|
|
|
|
saveSettings: saveSettings ? saveSettings : newSettings => {
|
|
|
|
const updatedSettings = [];
|
|
|
|
|
|
|
|
for (let newCategory of newSettings) {
|
|
|
|
let category = settings.find(c => c.category === newCategory.category);
|
|
|
|
|
|
|
|
for (let newSetting of newCategory.settings) {
|
|
|
|
let setting = category.settings.find(s => s.id === newSetting.id);
|
|
|
|
if (Utils.compare(setting.value, newSetting.value)) continue;
|
|
|
|
|
|
|
|
let old_value = setting.value;
|
|
|
|
setting.value = newSetting.value;
|
|
|
|
updatedSettings.push({ category_id: category.category, setting_id: setting.id, value: setting.value, old_value });
|
|
|
|
if (settingUpdated) settingUpdated(category.category, setting.id, setting.value, old_value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return settingsUpdated ? settingsUpdated(updatedSettings) : updatedSettings;
|
|
|
|
}
|
|
|
|
}, SettingsModal);
|
|
|
|
}
|
|
|
|
|
2018-02-14 17:11:26 +01:00
|
|
|
static internalSettings(set_id) {
|
|
|
|
const set = Settings.getSet(set_id);
|
|
|
|
if (!set) return;
|
2018-02-14 17:32:12 +01:00
|
|
|
return this.settings(set.headertext, set.settings, null, null, newSettings => Settings.mergeSettings(set.id, newSettings));
|
2018-02-14 17:11:26 +01:00
|
|
|
}
|
|
|
|
|
2018-02-14 17:22:48 +01:00
|
|
|
static contentSettings(content) {
|
|
|
|
return this.settings(content.name + ' Settings', content.config, null, null, content.saveSettings.bind(content));
|
2018-02-13 18:06:09 +01:00
|
|
|
}
|
|
|
|
|
2018-02-13 17:44:07 +01:00
|
|
|
static get stack() {
|
|
|
|
return this._stack ? this._stack : (this._stack = []);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|