-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmoar-folders.js
86 lines (76 loc) · 3.27 KB
/
moar-folders.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
var FOLDER_MAX_DEPTH_MOAR_FOLDERS = CONST.FOLDER_MAX_DEPTH;
(async () => {
const moduleName = "moar-folders";
class MoarFolders {
static registerSettings(){
game.settings.register(moduleName, "folderDepth", {
name: game.i18n.localize("MF.SettingFolderDepth"),
hint: game.i18n.localize("MF.SettingFolderDepthHint"),
scope: "world",
config: true,
type: Number,
default: CONST.FOLDER_MAX_DEPTH
});
}
static initialize(){
FOLDER_MAX_DEPTH_MOAR_FOLDERS = game.settings.get(moduleName, "folderDepth") || CONST.FOLDER_MAX_DEPTH;
for (const key in game) {
if (game.hasOwnProperty(key)) {
if(game[key]?.directory){
let dir = game[key].directory;
let protoclass;
try {
protoclass = game[key].directory.constructor;
} catch (error) {
console.debug(`Moar Folders: Directory Class not known ${game[key].directory.constructor.name}`)
}
if(!protoclass) continue;
if(protoclass?.setupFolders){
let setupFolders_string = protoclass.setupFolders.toString();
setupFolders_string = setupFolders_string.replace(/CONST.FOLDER_MAX_DEPTH/g, "FOLDER_MAX_DEPTH_MOAR_FOLDERS");
protoclass.setupFolders = new Function(`return (function ${setupFolders_string})`)();
}
if(protoclass?.setupFolders){
let _handleDroppedFolder_string = dir._handleDroppedFolder.toString();
_handleDroppedFolder_string = _handleDroppedFolder_string.replace(/CONST.FOLDER_MAX_DEPTH/g, "FOLDER_MAX_DEPTH_MOAR_FOLDERS");
_handleDroppedFolder_string = _handleDroppedFolder_string.replace("async", "async function");
dir._handleDroppedFolder = new Function(`return (${_handleDroppedFolder_string})`)();
}
}
}
}
//Monkey patch activateListeners so the create folder button is only removed from the final folder
var oldactivateListeners= SidebarDirectory.prototype.activateListeners;
SidebarDirectory.prototype.activateListeners= function() {
let addFunc= function(html){
html.find(".folder .folder .folder .create-folder").addClass("create-folder-moar");
html.find(".folder .folder .folder .create-folder").removeClass("create-folder");
}
let removeFunc= function(html){
html.find(".folder .folder .folder .create-folder-moar").addClass("create-folder");
html.find(".folder .folder .folder .create-folder-moar").removeClass("create-folder-moar");
html.find(".folder ".repeat(FOLDER_MAX_DEPTH_MOAR_FOLDERS)+".create-folder").remove();
if ( game.user.isGM ) {
html.find('.create-folder').off();
html.find('.create-folder').click(ev => this._onCreateFolder(ev));
}
}
addFunc.apply(this, arguments);
const result = oldactivateListeners.apply(this, arguments);
removeFunc.apply(this, arguments);
return result;
};
//Reload all directories after some time for the changes to take effect
setTimeout(()=>{
for (const key in ui) {
if (ui.hasOwnProperty(key)) {
const ui_elem = ui[key];
if(ui_elem.constructor.name.includes("Directory") && !ui_elem.constructor.name.includes("MacroDirectory")) ui_elem.render();
}
}
}, 1000);
}
}
Hooks.on('init', () => MoarFolders.registerSettings());
Hooks.on('ready', () => MoarFolders.initialize());
})();