| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- // Markdown Viewer Desktop — Neutralino.js integration layer
- // Handles system tray, window close confirmation, and file association
- /*
- Function to set up a system tray menu with options specific to the window mode.
- This function checks if the application is running in window mode, and if so,
- it defines the tray menu items and sets up the tray accordingly.
- */
- function setTray() {
- // Tray menu is only available in window mode
- if (typeof NL_MODE === "undefined" || NL_MODE != "window") {
- console.log("INFO: Tray menu is only available in the window mode.");
- return;
- }
- // Define tray menu items
- let tray = {
- icon: "/resources/assets/icon.jpg",
- menuItems: [
- { id: "VERSION", text: "Get version" },
- { id: "SEP", text: "-" },
- { id: "QUIT", text: "Quit" },
- ],
- };
- // Set the tray menu
- try {
- Neutralino.os.setTray(tray);
- } catch (e) {
- console.warn("Failed to set system tray:", e);
- }
- }
- /*
- Function to handle click events on the tray menu items.
- This function performs different actions based on the clicked item's ID,
- such as displaying version information or exiting the application.
- */
- function onTrayMenuItemClicked(event) {
- switch (event.detail.id) {
- case "VERSION":
- // Display version information
- Neutralino.os.showMessageBox(
- "Version information",
- `Neutralinojs server: v${NL_VERSION} | Neutralinojs client: v${NL_CVERSION}`,
- );
- break;
- case "QUIT":
- // Exit the application
- Neutralino.app.exit();
- break;
- }
- }
- async function onWindowClose() {
- try {
- let response = await Neutralino.os.showMessageBox(
- "Exit Markdown Viewer",
- "Are you sure you want to close the application? Any unsaved changes in your tabs may be lost.",
- "YES_NO",
- "QUESTION"
- );
- if (response === "YES") {
- Neutralino.app.exit();
- }
- } catch (e) {
- Neutralino.app.exit();
- }
- }
- function isNeutralinoRuntime() {
- if (typeof Neutralino === 'undefined' || typeof NL_PORT === 'undefined') {
- return false;
- }
- try {
- return typeof NL_TOKEN !== 'undefined' || Boolean(sessionStorage.getItem('NL_TOKEN'));
- } catch (e) {
- return typeof NL_TOKEN !== 'undefined';
- }
- }
- // Initialize Neutralino if in native environment
- if (isNeutralinoRuntime()) {
- Neutralino.init();
- // Register event listeners
- Neutralino.events.on("trayMenuItemClicked", onTrayMenuItemClicked);
- Neutralino.events.on("windowClose", onWindowClose);
- // Conditional initialization: Set up system tray if not running on macOS
- if (typeof NL_OS !== 'undefined' && NL_OS != "Darwin") {
- // TODO: Fix https://github.com/neutralinojs/neutralinojs/issues/615
- setTray();
- }
- }
- // Open file passed as command-line argument (e.g. when double-clicking a .md file)
- (async function loadInitialFile() {
- if (!isNeutralinoRuntime() || typeof NL_ARGS === 'undefined') return;
- const args = Array.isArray(NL_ARGS) ? NL_ARGS : (() => { try { return JSON.parse(NL_ARGS); } catch(e) { return []; } })();
- const filePath = args.find(a => typeof a === 'string' && /\.(md|markdown)$/i.test(a));
- if (!filePath) return;
- try {
- const content = await Neutralino.filesystem.readFile(filePath);
- const fileName = filePath.split(/[/\\]/).pop().replace(/\.(md|markdown)$/i, '');
-
- window.NL_INITIAL_FILE_CONTENT = {
- name: fileName,
- content: content
- };
- // Callback hook in case script.js loaded first
- if (window.NL_IMPORT_EXTERNAL_FILE) {
- window.NL_IMPORT_EXTERNAL_FILE(content, fileName);
- }
- } catch (e) {
- console.warn('Could not open initial file:', e);
- }
- })();
|