Native UI #1
3 changed files with 37 additions and 36 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"id" : "space.arimelody.LiveSchedule",
|
"id" : "space.arimelody.LiveSchedule",
|
||||||
"runtime" : "org.gnome.Platform",
|
"runtime" : "org.gnome.Platform",
|
||||||
"runtime-version" : "48",
|
"runtime-version" : "master",
|
||||||
"sdk" : "org.gnome.Sdk",
|
"sdk" : "org.gnome.Sdk",
|
||||||
"command" : "liveschedule",
|
"command" : "liveschedule",
|
||||||
"finish-args" : [
|
"finish-args" : [
|
||||||
|
|
|
||||||
66
main.js
66
main.js
|
|
@ -14,6 +14,8 @@ let schedule = {
|
||||||
|
|
||||||
const offlineTitle = 'OFFLINE';
|
const offlineTitle = 'OFFLINE';
|
||||||
const offlineSubtitle = 'takin a nap';
|
const offlineSubtitle = 'takin a nap';
|
||||||
|
let copyClipboard;
|
||||||
|
let saveImage;
|
||||||
|
|
||||||
document.addEventListener('readystatechange', () => {
|
document.addEventListener('readystatechange', () => {
|
||||||
document.getElementById('version').innerText = VERSION;
|
document.getElementById('version').innerText = VERSION;
|
||||||
|
|
@ -118,7 +120,7 @@ if ('webkit' in window && 'messageHandlers' in window.webkit) {
|
||||||
let _promiseId = 0;
|
let _promiseId = 0;
|
||||||
let _promises = new Map();
|
let _promises = new Map();
|
||||||
|
|
||||||
window.webkit.messageHandlers._nativePromiseResolved.addEventListener('message', (event) => {
|
window.addEventListener('message', (event) => {
|
||||||
const [id] = event.detail;
|
const [id] = event.detail;
|
||||||
const [resolve,] = _promises.get(id) ?? [];
|
const [resolve,] = _promises.get(id) ?? [];
|
||||||
if (!resolve) return;
|
if (!resolve) return;
|
||||||
|
|
@ -126,7 +128,7 @@ if ('webkit' in window && 'messageHandlers' in window.webkit) {
|
||||||
resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
|
|
||||||
window.webkit.messageHandlers._nativePromiseRejected.addEventListener('message', (event) => {
|
window.addEventListener('message', (event) => {
|
||||||
const [id] = event.detail;
|
const [id] = event.detail;
|
||||||
const [,reject] = _promises.get(id) ?? [];
|
const [,reject] = _promises.get(id) ?? [];
|
||||||
if (!reject) return;
|
if (!reject) return;
|
||||||
|
|
@ -134,45 +136,41 @@ if ('webkit' in window && 'messageHandlers' in window.webkit) {
|
||||||
reject();
|
reject();
|
||||||
});
|
});
|
||||||
|
|
||||||
function copyClipboard() {
|
copyClipboard = () => new Promise((resolve, reject) => {
|
||||||
return new Promise((resolve, reject) => {
|
const thisPromiseId = ++_promiseId;
|
||||||
const thisPromiseId = ++promiseId;
|
|
||||||
|
|
||||||
_promises.set(thisPromiseId, [resolve, reject]);
|
_promises.set(thisPromiseId, [resolve, reject]);
|
||||||
|
|
||||||
const schedule = document.getElementById('schedule');
|
const schedule = document.getElementById('schedule');
|
||||||
const boundingRect = getBoundingClientRect();
|
const boundingRect = schedule.getBoundingClientRect();
|
||||||
|
|
||||||
window.webkit.messageHandlers.copySnapshot.postMessage([
|
window.webkit.messageHandlers.copySnapshot.postMessage([
|
||||||
thisPromiseId,
|
thisPromiseId,
|
||||||
'clipboard',
|
'clipboard',
|
||||||
boundingRect.x,
|
boundingRect.x + 1,
|
||||||
boundingRect.y,
|
boundingRect.y + 1,
|
||||||
boundingRect.width,
|
boundingRect.width - 2,
|
||||||
boundingRect.height,
|
boundingRect.height - 2,
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
function saveImage() {
|
saveImage = () => new Promise((resolve, reject) => {
|
||||||
return new Promise((resolve, reject) => {
|
const thisPromiseId = ++_promiseId;
|
||||||
const thisPromiseId = ++promiseId;
|
|
||||||
|
|
||||||
_promises.set(thisPromiseId, [resolve, reject]);
|
_promises.set(thisPromiseId, [resolve, reject]);
|
||||||
|
|
||||||
const schedule = document.getElementById('schedule');
|
const schedule = document.getElementById('schedule');
|
||||||
const boundingRect = getBoundingClientRect();
|
const boundingRect = schedule.getBoundingClientRect();
|
||||||
|
|
||||||
window.webkit.messageHandlers.copySnapshot.postMessage([
|
window.webkit.messageHandlers.copySnapshot.postMessage([
|
||||||
thisPromiseId,
|
thisPromiseId,
|
||||||
'file',
|
'file',
|
||||||
boundingRect.x,
|
boundingRect.x + 1,
|
||||||
boundingRect.y,
|
boundingRect.y + 1,
|
||||||
boundingRect.width,
|
boundingRect.width - 2,
|
||||||
boundingRect.height,
|
boundingRect.height - 2,
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
document.getElementById('clipboard').removeAttribute('disabled');
|
document.getElementById('clipboard').removeAttribute('disabled');
|
||||||
document.getElementById('save-image').removeAttribute('disabled');
|
document.getElementById('save-image').removeAttribute('disabled');
|
||||||
|
|
|
||||||
|
|
@ -34,11 +34,14 @@ static void ls_web_view_constructed(GObject *object) {
|
||||||
ls_web_view_on_resource_request,
|
ls_web_view_on_resource_request,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
|
|
||||||
|
WebKitSettings *settings = webkit_web_view_get_settings(WEBKIT_WEB_VIEW(object));
|
||||||
|
webkit_settings_set_enable_developer_extras(settings, TRUE);
|
||||||
|
|
||||||
WebKitUserContentManager *manager = webkit_web_view_get_user_content_manager(web_view);
|
WebKitUserContentManager *manager = webkit_web_view_get_user_content_manager(web_view);
|
||||||
|
webkit_user_content_manager_register_script_message_handler(manager, "copySnapshot", NULL);
|
||||||
g_signal_connect(manager, "script-message-received::copySnapshot",
|
g_signal_connect(manager, "script-message-received::copySnapshot",
|
||||||
G_CALLBACK(ls_web_view_on_snapshot_message_received),
|
G_CALLBACK(ls_web_view_on_snapshot_message_received),
|
||||||
g_object_ref(object));
|
g_object_ref(object));
|
||||||
webkit_user_content_manager_register_script_message_handler(manager, "copySnapshot", NULL);
|
|
||||||
|
|
||||||
webkit_web_view_load_uri(web_view, "gresource:///space/arimelody/LiveSchedule/webview/index.html");
|
webkit_web_view_load_uri(web_view, "gresource:///space/arimelody/LiveSchedule/webview/index.html");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue