Files
movim-rs/frontend/scripts/movim_rpc.js
T
2026-10-24 14:03:52 +07:00

89 lines
2.5 KiB
JavaScript

/**
* Short functions
*/
function MWSa(widget, func, params) {
return MovimRPC.fetch(widget, func, params, false);
}
function MWSad(widget, func, params) {
return MovimRPC.fetch(widget, func, params, true);
}
var MovimRPC = {
fetchWithTimeout: async function (resource, options = {}) {
const { timeout = 5000 } = options;
const controller = new AbortController();
const id = setTimeout(() => controller.abort(), timeout);
const response = await fetch(resource, {
...options,
signal: controller.signal
});
clearTimeout(id);
return response;
},
fetch: function (widget, func, params, daemon) {
var body = {
'c': MovimUtils.urlParts().page,
'w': widget,
'f': func
};
if (params) body.p = params;
var url = BASE_URI;
let request = MovimRPC.fetchWithTimeout(url += daemon ? 'ajaxd' : 'ajax', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(
{ 'func': 'message', 'b': body }
)
});
if (!daemon) {
request.then(response => {
if (response.ok) {
return response.json();
} else if (response.status == 403) {
MovimUtils.disconnect();
}
}).then(data => {
for (funcall of data) {
MovimRPC.handle(funcall);
}
});
}
return request;
},
handle: function (funcall) {
if (funcall.func != null && (typeof window[funcall.func] == 'function')) {
try {
window[funcall.func].apply(null, funcall.p);
} catch (err) {
console.log("Error caught: "
+ err.toString()
+ " - "
+ funcall.func
+ ":"
+ JSON.stringify(funcall.p)
);
}
} else if (funcall.func != null) {
var funcs = funcall.func.split('.');
var called = funcs[0];
if (typeof window[called] == 'object'
&& typeof window[funcs[0]][funcs[1]] != 'undefined') {
window[funcs[0]][funcs[1]].apply(null, funcall.p);
}
}
}
}