Files
2024-06-29 14:21:15 +02:00

63 lines
2.2 KiB
JavaScript

import { SettingUtils } from './sn0w.js';
import { app } from '../../../scripts/app.js';
const favouriteCharactersId = 'sn0w.FavouriteCharacters';
let existingList = [];
app.registerExtension({
name: 'sn0w.CharacterContextMenu',
async setup() {
existingList = await SettingUtils.getSetting('sn0w.FavouriteCharacters');
if (!Array.isArray(existingList)) {
existingList = [];
}
const original_getNodeMenuOptions = app.canvas.getNodeMenuOptions;
app.canvas.getNodeMenuOptions = function (node) {
const options = original_getNodeMenuOptions.apply(this, arguments);
if (node.type === 'Character Selector') {
const settingUtils = new SettingUtils();
const nullIndex = options.indexOf(null);
// Check if the filename is in the existingList
const selectedCharacter = node.widgets[0].value;
const isFavourite = existingList.includes(selectedCharacter);
// Create the new menu item
const newMenuItem = {
content: isFavourite ? 'Unfavourite Character ☆' : 'Favourite Character ★',
disabled: false,
callback: () => {
SettingUtils.toggleFavourite(
existingList,
selectedCharacter,
favouriteCharactersId
);
settingUtils.refreshComboInSingleNode(app, 'Character Selector');
},
};
if (nullIndex !== -1) {
options.splice(nullIndex, 0, newMenuItem);
} else {
options.push(newMenuItem);
}
}
return options;
};
var observer = new MutationObserver(function (mutations) {
if (document.contains(document.getElementsByClassName('litecontextmenu')[0])) {
SettingUtils.addStarsToFavourited(existingList);
}
});
observer.observe(document, {
attributes: false,
childList: true,
characterData: false,
subtree: true,
});
},
});