add main window; webview; webchannel; pdf.js; wip sidebar
This commit is contained in:
40
controller.js
Normal file
40
controller.js
Normal file
@@ -0,0 +1,40 @@
|
||||
|
||||
const h = (name, props = {}, ...children) => {
|
||||
const element = document.createElement(name);
|
||||
|
||||
for (const [key, value] of Object.entries(props))
|
||||
key.startsWith('on')
|
||||
? element.addEventListener(key.substring(2), value)
|
||||
: element.setAttribute(key, value);
|
||||
|
||||
for (const child of children)
|
||||
element.appendChild(
|
||||
typeof(child) === 'string'
|
||||
? document.createTextNode(child)
|
||||
: child);
|
||||
|
||||
return element;
|
||||
};
|
||||
|
||||
const qs = s => document.querySelector(s);
|
||||
const qsa = s => Array.from(document.querySelectorAll(s))
|
||||
|
||||
const on_command = command => {
|
||||
switch(command.type) {
|
||||
case 'alert': alert(command.message); break;
|
||||
case 'load_pdf': pdfjsLib.getDocument(command.url).promise.then(pdf => PDFViewerApplication.load(pdf)); break;
|
||||
}
|
||||
};
|
||||
|
||||
let call_python;
|
||||
|
||||
new QWebChannel(qt.webChannelTransport, channel => {
|
||||
call_python = (argument, callback) =>
|
||||
channel.objects.bridge.call_python(JSON.stringify(argument),
|
||||
result => callback && callback(JSON.parse(result)));
|
||||
|
||||
channel.objects.bridge.call_javascript.connect(
|
||||
result => on_command(JSON.parse(result)));
|
||||
|
||||
call_python({'type': 'ready'});
|
||||
});
|
||||
Reference in New Issue
Block a user