]>
git.proxmox.com Git - mirror_novnc.git/blob - core/util/properties.js
2 * noVNC: HTML5 VNC client
3 * Copyright (C) 2012 Joel Martin
4 * Licensed under MPL 2.0 (see LICENSE.txt)
6 * See README.md for usage and integration instructions.
10 * Getter/Setter Creation Utilities
13 import * as Log
from './logging.js';
15 function make_property (proto
, name
, mode
, type
) {
20 getter = function (idx
) {
21 if (typeof idx
!== 'undefined') {
22 return this['_' + name
][idx
];
24 return this['_' + name
];
28 getter = function () {
29 return this['_' + name
];
33 var make_setter = function (process_val
) {
35 return function (val
, idx
) {
36 if (typeof idx
!== 'undefined') {
37 this['_' + name
][idx
] = process_val(val
);
39 this['_' + name
] = process_val(val
);
43 return function (val
, idx
) {
44 if (typeof idx
!== 'undefined') {
45 this['_' + name
][idx
] = val
;
47 this['_' + name
] = val
;
54 if (type
=== 'bool') {
55 setter
= make_setter(function (val
) {
56 if (!val
|| (val
in {'0': 1, 'no': 1, 'false': 1})) {
62 } else if (type
=== 'int') {
63 setter
= make_setter(function (val
) { return parseInt(val
, 10); });
64 } else if (type
=== 'float') {
65 setter
= make_setter(parseFloat
);
66 } else if (type
=== 'str') {
67 setter
= make_setter(String
);
68 } else if (type
=== 'func') {
69 setter
= make_setter(function (val
) {
71 return function () {};
76 } else if (type
=== 'arr' || type
=== 'dom' || type
== 'raw') {
77 setter
= make_setter();
79 throw new Error('Unknown property type ' + type
); // some sanity checking
83 if (typeof proto
['get_' + name
] === 'undefined') {
84 proto
['get_' + name
] = getter
;
87 // set the setter if needed
88 if (typeof proto
['set_' + name
] === 'undefined') {
90 proto
['set_' + name
] = setter
;
91 } else if (mode
=== 'wo') {
92 proto
['set_' + name
] = function (val
, idx
) {
93 if (typeof this['_' + name
] !== 'undefined') {
94 throw new Error(name
+ " can only be set once");
96 setter
.call(this, val
, idx
);
101 // make a special setter that we can use in set defaults
102 proto
['_raw_set_' + name
] = function (val
, idx
) {
103 setter
.call(this, val
, idx
);
104 //delete this['_init_set_' + name]; // remove it after use
108 export function make_properties (constructor, arr
) {
110 for (var i
= 0; i
< arr
.length
; i
++) {
111 make_property(constructor.prototype, arr
[i
][0], arr
[i
][1], arr
[i
][2]);
115 export function set_defaults (obj
, conf
, defaults
) {
116 var defaults_keys
= Object
.keys(defaults
);
118 var conf_keys
= Object
.keys(conf
);
121 for (i
= 0; i
< defaults_keys
.length
; i
++) { keys_obj
[defaults_keys
[i
]] = 1; }
122 for (i
= 0; i
< conf_keys
.length
; i
++) { keys_obj
[conf_keys
[i
]] = 1; }
123 var keys
= Object
.keys(keys_obj
);
125 for (i
= 0; i
< keys
.length
; i
++) {
126 var setter
= obj
['_raw_set_' + keys
[i
]];
128 Log
.Warn('Invalid property ' + keys
[i
]);
132 if (keys
[i
] in conf
) {
133 setter
.call(obj
, conf
[keys
[i
]]);
135 setter
.call(obj
, defaults
[keys
[i
]]);