-
Notifications
You must be signed in to change notification settings - Fork 0
/
options.js
109 lines (87 loc) · 2.42 KB
/
options.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
let opt = {
autosave: true,
exit_url: "",
extra_opcodes: true,
proxy_url: "https://zcode.appspot.com/proxy/?encode=base64&callback=processBase64Zcode&url=%s",
use_proxy: "auto",
windowing: true
};
/**
* Parse a GET parameter.
*
* @param name
* @param type
* @param defaultValue
*/
export function getParameter( name, type, defaultValue ) {
var valueSearch = new RegExp( "[?&]" + name + "=(.*?)(#|&|$)", "i" ).exec( window.location.href ),
value;
if( valueSearch === null || valueSearch.length < 2 ) {
return defaultValue;
}
value = decodeURIComponent( valueSearch[ 1 ].split( "+" ).join( " " ) );
switch( type ) {
case "boolean":
if( value.toLowerCase() === "true" || value === "on" || value === "1" ) {
return true;
}
if( value.toLowerCase() === "false" || value === "off" || value === "0" ) {
return false;
}
return defaultValue;
case "number":
if( parseFloat( value ) + "" === value ) {
return parseFloat( value );
}
return NaN;
default:
if( value.length === 0 ) {
return defaultValue;
}
return value;
}
}
/**
* Returns the value of an option.
*
* @param name
* @returns {*}
*/
export function get( name ) {
return opt[ name ];
}
/**
* Read options from the URL
*/
export function init( defaults ) {
let option_key;
defaults = defaults || {};
opt = {
...opt,
...defaults
};
if( !opt.lock_story ) {
// provide "storyfile" as an option to "story" to get around Quixe's automatic storyfile download if necessary
opt.story = getParameter( "story", "string", opt.story ) || getParameter( "storyfile", "string", opt.story );
}
if( !opt.lock_options ) {
for( option_key in opt ) {
if( option_key !== "story" && option_key !== "storyfile" && option_key in opt ) {
opt[ option_key ] = getParameter( option_key, typeof opt[ option_key ], opt[ option_key ] );
}
}
// special cases
if( opt.exit_url === "false" || opt.exit_url === "0" ) {
opt.exit_url = false;
}
}
}
/**
* Set the value of an option.
*
* @param name
* @returns {*}
*/
export function set( name, value ) {
opt[ name ] = value;
}