]> git.proxmox.com Git - pve-xtermjs.git/blob - src/www/util.js
bump version to 3.12.0-1
[pve-xtermjs.git] / src / www / util.js
1 function urlEncode(object) {
2 var i,value, params = [];
3
4 for (i in object) {
5 if (object.hasOwnProperty(i)) {
6 value = object[i];
7 if (value === undefined) value = '';
8 params.push(encodeURIComponent(i) + '=' + encodeURIComponent(String(value)));
9 }
10 }
11
12 return params.join('&');
13 }
14
15 var msgtimeout;
16 var severities = {
17 normal: 1,
18 warning: 2,
19 error: 3,
20 };
21
22 function showMsg(message, timeout, severity) {
23 var status_bar = document.getElementById('status_bar');
24 clearTimeout(msgtimeout);
25
26 status_bar.classList.remove('normal');
27 status_bar.classList.remove('warning');
28 status_bar.classList.remove('error');
29
30 status_bar.textContent = message;
31
32 severity = severity || severities.normal;
33
34 switch (severity) {
35 case severities.normal:
36 status_bar.classList.add('normal');
37 break;
38 case severities.warning:
39 status_bar.classList.add('warning');
40 break;
41 case severities.error:
42 status_bar.classList.add('error');
43 break;
44 default:
45 throw "unknown severity";
46 }
47
48 status_bar.classList.add('open');
49
50 if (timeout !== 0) {
51 msgtimeout = setTimeout(hideMsg, timeout || 1500);
52 }
53 }
54
55 function hideMsg() {
56 clearTimeout(msgtimeout);
57 status_bar.classList.remove('open');
58 }
59
60 function getQueryParameter(name) {
61 var params = location.search.slice(1).split('&');
62 var result = "";
63 params.forEach(function(param) {
64 var components = param.split('=');
65 if (components[0] === name) {
66 result = components.slice(1).join('=');
67 }
68 });
69 return result;
70 }
71
72 var cur = 0;
73 var left = 0;
74
75 function Utf8ArrayToStr(arraybuffer) {
76 var array = new Uint8Array(arraybuffer),
77 i = 0,
78 len = array.byteLength,
79 out = "",
80 c;
81
82 while (i < len) {
83 c = array[i++];
84 if (!left && c < 0x80) {
85 out += String.fromCharCode(c);
86 } else if(!left) {
87 switch (c >> 4) {
88 case 12: case 13:
89 // 110x xxxx 10xx xxxx
90 cur = (c & 0x1F) << 6;
91 left = 1;
92 break;
93 case 14:
94 // 1110 xxxx 10xx xxxx 10xx xxxx
95 cur = (c & 0x0F) << 12;
96 left = 2;
97 break;
98 case 15:
99 // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx
100 cur = (c & 0x07) << 18;
101 left = 3;
102 break;
103 default:
104 cur = 0;
105 out += '\ufffd';
106 }
107 } else if (c >= 0x80 && c <= 0xBF) {
108 cur = cur | ((c & 0x3F) << (--left * 6));
109 if (!left) {
110 out += String.fromCharCode(cur);
111 cur = 0;
112 }
113 } else {
114 cur = 0;
115 left = 0;
116 out += '\ufffd';
117 }
118 }
119
120 return out;
121 }
122
123 function API2Request(reqOpts) {
124 var me = this;
125
126 reqOpts.method = reqOpts.method || 'GET';
127
128 var xhr = new XMLHttpRequest();
129
130 xhr.onload = function() {
131 var scope = reqOpts.scope || this;
132 var result;
133 var errmsg;
134
135 if (xhr.readyState === 4) {
136 var ctype = xhr.getResponseHeader('Content-Type');
137 if (xhr.status === 200) {
138 if (ctype.match(/application\/json;/)) {
139 result = JSON.parse(xhr.responseText);
140 } else {
141 errmsg = 'got unexpected content type ' + ctype;
142 }
143 } else {
144 errmsg = 'Error ' + xhr.status + ': ' + xhr.statusText;
145 }
146 } else {
147 errmsg = 'Connection error - server offline?';
148 }
149
150 if (errmsg !== undefined) {
151 if (reqOpts.failure) {
152 reqOpts.failure.call(scope, errmsg);
153 }
154 } else {
155 if (reqOpts.success) {
156 reqOpts.success.call(scope, result);
157 }
158 }
159 if (reqOpts.callback) {
160 reqOpts.callback.call(scope, errmsg === undefined);
161 }
162 }
163
164 var data = urlEncode(reqOpts.params || {});
165
166 if (reqOpts.method === 'GET') {
167 xhr.open(reqOpts.method, "/api2/json" + reqOpts.url + '?' + data);
168 } else {
169 xhr.open(reqOpts.method, "/api2/json" + reqOpts.url);
170 }
171 xhr.setRequestHeader('Cache-Control', 'no-cache');
172 if (reqOpts.method === 'POST' || reqOpts.method === 'PUT') {
173 xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
174 xhr.setRequestHeader('CSRFPreventionToken', PVE.CSRFPreventionToken);
175 xhr.send(data);
176 } else if (reqOpts.method === 'GET') {
177 xhr.send();
178 } else {
179 throw "unknown method";
180 }
181 }
182
183 function getTerminalSettings() {
184 var res = {};
185 var settings = ['fontSize', 'fontFamily', 'letterSpacing', 'lineHeight'];
186 if(localStorage) {
187 settings.forEach(function(setting) {
188 var val = localStorage.getItem('pve-xterm-' + setting);
189 if (val !== undefined && val !== null) {
190 res[setting] = val;
191 }
192 });
193 }
194 return res;
195 }