-
-
Notifications
You must be signed in to change notification settings - Fork 44
/
ui-macro.js
109 lines (93 loc) · 2.78 KB
/
ui-macro.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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
(function () {
// ui macro, for SugarCube 2, by Chapel, v1.0.1
var ui = {
update : UIBar.setStoryElements,
stow : UIBar.stow,
unstow : UIBar.unstow,
toggle : function () {
if ($('#ui-bar').hasClass('stowed')) {
UIBar.unstow();
} else {
UIBar.stow();
}
},
hide : function () {
$('#ui-bar').css('display', 'none');
},
show : function () {
$('#ui-bar').css('display', 'block');
},
kill : function () {
$('#ui-bar').css('display', 'none');
$('#story').css('margin-left', '2.5em');
},
restore : function () {
$('#ui-bar').css('display', 'block');
$('#story').css('margin-left', '20em');
},
jump : UI.jumpto,
saves : UI.saves,
restart : UI.restart,
settings : UI.settings,
share : UI.share,
aliases : {
refresh : 'update',
reload : 'update',
destroy : 'kill',
revive : 'restore',
jumpto : 'jump',
save : 'saves',
load : 'saves',
setting : 'settings',
sharing : 'share'
},
};
var validCommands = Object.keys(ui);
function isValid (command) {
return validCommands.includes(command);
}
function alias (command) {
return ui.aliases[command] || null;
}
function runCommand (command) {
if (!command || typeof command !== 'string') {
return 'Command is not a string.'; // error
}
command = command.toLowerCase().trim();
if (!isValid(command)) {
command = alias(command);
if (!command) {
return 'Command "' + command + '" is not a valid command.'; // error
}
}
ui[command]();
return false;
}
function processCommandList (arr) {
if (!Array.isArray(arr)) {
return 'Command list error.';
}
var check = [];
arr.forEach( function (cmd) {
check.push(runCommand(cmd));
});
return check;
}
Macro.add('ui', {
handler : function () {
if (!Array.isArray(this.args) || !this.args.length) {
this.error('No commands passed to macro.');
}
var cmdList = this.args.flat(Infinity);
var ret = processCommandList(cmdList);
var errors = '';
ret = ret.filter( function (result) {
return typeof result === 'string';
});
errors = ret.join(' ');
if (ret.length && errors) {
this.error(errors);
}
}
});
}());