From 04ed432b3266a4ca881d1176197031cf9682cb48 Mon Sep 17 00:00:00 2001 From: Jas Singh Date: Sat, 13 Jul 2024 14:43:13 -0700 Subject: [PATCH] Modularized notification toast and menu components. --- modules/menus/notifications/controls/index.js | 56 +++ modules/menus/notifications/index.js | 318 +----------------- .../notification/actions/index.js | 45 +++ .../notifications/notification/body/index.js | 23 ++ .../notifications/notification/close/index.js | 12 + .../notifications/notification/header/icon.js | 32 ++ .../notification/header/index.js | 48 +++ .../notifications/notification/image/index.js | 22 ++ .../menus/notifications/notification/index.js | 59 ++++ .../notification/placeholder/index.js | 27 ++ modules/menus/notifications/utils.js | 5 + modules/notifications/actions/index.js | 43 +++ modules/notifications/body/index.js | 23 ++ modules/notifications/close/index.js | 12 + modules/notifications/header/icon.js | 32 ++ modules/notifications/header/index.js | 49 +++ modules/notifications/image/index.js | 22 ++ modules/notifications/index.js | 185 +--------- scss/menus/audiomenu.scss | 2 +- scss/menus/bluetooth.scss | 2 +- scss/menus/calendar.scss | 2 +- scss/menus/media.scss | 2 +- scss/menus/menu.scss | 8 +- scss/menus/notifications.scss | 25 +- scss/notifications/popups.scss | 3 +- services/snapshot.sh | 21 +- style.css | 41 ++- style.css.map | 2 +- 28 files changed, 591 insertions(+), 530 deletions(-) create mode 100644 modules/menus/notifications/controls/index.js create mode 100644 modules/menus/notifications/notification/actions/index.js create mode 100644 modules/menus/notifications/notification/body/index.js create mode 100644 modules/menus/notifications/notification/close/index.js create mode 100644 modules/menus/notifications/notification/header/icon.js create mode 100644 modules/menus/notifications/notification/header/index.js create mode 100644 modules/menus/notifications/notification/image/index.js create mode 100644 modules/menus/notifications/notification/index.js create mode 100644 modules/menus/notifications/notification/placeholder/index.js create mode 100644 modules/menus/notifications/utils.js create mode 100644 modules/notifications/actions/index.js create mode 100644 modules/notifications/body/index.js create mode 100644 modules/notifications/close/index.js create mode 100644 modules/notifications/header/icon.js create mode 100644 modules/notifications/header/index.js create mode 100644 modules/notifications/image/index.js diff --git a/modules/menus/notifications/controls/index.js b/modules/menus/notifications/controls/index.js new file mode 100644 index 0000000..4019db1 --- /dev/null +++ b/modules/menus/notifications/controls/index.js @@ -0,0 +1,56 @@ +const Controls = (notifs) => { + return Widget.Box({ + class_name: "notification-menu-controls", + expand: false, + vertical: false, + children: [ + Widget.Box({ + class_name: "menu-label-container notifications", + hpack: "start", + vpack: "center", + expand: true, + children: [ + Widget.Label({ + class_name: "menu-label notifications", + label: "Notifications", + }), + ], + }), + Widget.Box({ + hpack: "end", + vpack: "center", + expand: false, + children: [ + Widget.Switch({ + class_name: "menu-switch notifications", + active: notifs.bind("dnd").as((dnd) => !dnd), + on_activate: ({ active }) => { + notifs.dnd = !active; + }, + }), + Widget.Box({ + children: [ + Widget.Separator({ + hpack: "center", + vexpand: true, + vertical: true, + class_name: "menu-separator notification-controls", + }), + Widget.Button({ + class_name: "clear-notifications-button", + tooltip_text: "Clear Notifications", + on_primary_click: () => notifs.clear(), + child: Widget.Label({ + class_name: "clear-notifications-label", + label: "", + }), + }), + ], + }), + ], + }), + ], + }); +}; + +export { Controls }; diff --git a/modules/menus/notifications/index.js b/modules/menus/notifications/index.js index 1391fee..e060178 100644 --- a/modules/menus/notifications/index.js +++ b/modules/menus/notifications/index.js @@ -1,12 +1,9 @@ import PopupWindow from "../PopupWindow.js"; const notifs = await Service.import("notifications"); -import icons from "../../icons/index.js"; -import GLib from "gi://GLib"; +import { Controls } from "./controls/index.js"; +import { NotificationCard } from "./notification/index.js"; export default () => { - const time = (time, format = "%I:%M %p") => - GLib.DateTime.new_from_unix_local(time).format(format); - return PopupWindow({ name: "notificationsmenu", visible: false, @@ -23,316 +20,7 @@ export default () => { vertical: true, hexpand: false, vexpand: false, - children: [ - Widget.Box({ - class_name: "notification-menu-controls", - expand: false, - vertical: false, - children: [ - Widget.Box({ - class_name: "menu-label-container notifications", - hpack: "start", - vpack: "center", - expand: true, - children: [ - Widget.Label({ - class_name: "menu-label notifications", - label: "Notifications", - }), - ], - }), - Widget.Box({ - hpack: "end", - vpack: "center", - expand: false, - children: [ - Widget.Switch({ - class_name: "menu-switch notifications", - active: notifs.bind("dnd").as((dnd) => !dnd), - on_activate: ({ active }) => { - notifs.dnd = !active; - }, - }), - Widget.Box({ - children: [ - Widget.Separator({ - hpack: "center", - vexpand: true, - vertical: true, - class_name: "menu-separator notification-controls", - }), - Widget.Button({ - class_name: "clear-notifications-button", - tooltip_text: "Clear Notifications", - on_primary_click: () => notifs.clear(), - child: Widget.Label({ - class_name: "clear-notifications-label", - label: "", - }), - }), - ], - }), - ], - }), - ], - }), - Widget.Box({ - class_name: "menu-content-container notifications", - hpack: "center", - vexpand: true, - spacing: 0, - vertical: true, - setup: (self) => { - self.hook(notifs, () => { - const notifHasImg = (notif) => { - return notif.image !== undefined && notif.image.length; - }; - const imageContainer = (notif) => { - if (notifHasImg(notif)) { - return [ - Widget.Box({ - class_name: "notification-card-image-container menu", - hpack: "center", - vpack: "center", - vexpand: false, - child: Widget.Box({ - hpack: "center", - vexpand: false, - class_name: "notification-card-image menu", - css: `background-image: url("${notif.image}")`, - }), - }), - ]; - } - - return []; - }; - - const actionsContainer = (notif) => { - if ( - notif.actions !== undefined && - notif.actions.length > 0 - ) { - return [ - Widget.Box({ - class_name: "notification-card-actions menu", - hexpand: true, - vpack: "end", - children: notif.actions.map((action) => { - return Widget.Button({ - hexpand: true, - class_name: "notification-action-buttons menu", - on_primary_click: () => { - if (action.id.includes("scriptAction:-")) { - Utils.execAsync( - `${action.id.replace("scriptAction:-", "")}`, - ).catch((err) => console.error(err)); - notifs.CloseNotification(notif.id); - } else { - notif.invoke(action.id); - } - }, - child: Widget.Box({ - hpack: "center", - hexpand: true, - children: [ - Widget.Label({ - class_name: - "notification-action-buttons-label menu", - hexpand: true, - max_width_chars: 15, - truncate: "end", - wrap: true, - label: action.label, - }), - ], - }), - }); - }), - }), - ]; - } - - return [ - Widget.Box({ - class_name: "spacer", - }), - ]; - }; - - const NotificationIcon = ({ - app_entry, - app_icon, - app_name, - }) => { - let icon = icons.fallback.notification; - - if ( - Utils.lookUpIcon(app_name) || - Utils.lookUpIcon(app_name.toLowerCase() || "") - ) - icon = Utils.lookUpIcon(app_name) - ? app_name - : Utils.lookUpIcon(app_name.toLowerCase()) - ? app_name.toLowerCase() - : ""; - - if (Utils.lookUpIcon(app_icon) && icon === "") - icon = app_icon; - - if (Utils.lookUpIcon(app_entry || "") && icon === "") - icon = app_entry || ""; - - return Widget.Box({ - css: ` - min-width: 2rem; - min-height: 2rem; - `, - child: Widget.Icon({ - class_name: "notification-icon menu", - icon, - }), - }); - }; - - const sortedNotifications = notifs.notifications.sort( - (a, b) => b.time - a.time, - ); - - if (notifs.notifications.length <= 0) { - return (self.children = [ - Widget.Box({ - class_name: "notification-label-container", - vpack: "fill", - hpack: "center", - expand: true, - child: Widget.Box({ - vpack: "center", - vertical: true, - expand: true, - children: [ - Widget.Label({ - vpack: "center", - class_name: "placeholder-label dim bell", - label: notifs.bind("dnd").as(dnd => dnd ? "󰂛" : "󰂚"), - }), - Widget.Label({ - vpack: "start", - class_name: "placehold-label dim message", - label: "You're all caught up :)", - }), - ], - }), - }), - ]); - } - - return (self.children = sortedNotifications.map((notif) => { - return Widget.Box({ - class_name: "notification-card-content-container", - children: [ - Widget.Box({ - class_name: "notification-card menu", - vpack: "start", - hexpand: true, - vexpand: false, - children: [ - ...imageContainer(notif), - Widget.Box({ - vpack: "center", - vertical: true, - hexpand: true, - class_name: `notification-card-content ${!notifHasImg(notif) ? "noimg" : " menu"}`, - children: [ - Widget.Box({ - vertical: false, - hexpand: true, - children: [ - Widget.Box({ - class_name: - "notification-card-header menu", - hpack: "start", - children: [NotificationIcon(notif)], - }), - Widget.Box({ - class_name: - "notification-card-header menu", - hexpand: true, - vpack: "start", - children: [ - Widget.Label({ - class_name: - "notification-card-header-label menu", - hpack: "start", - hexpand: true, - vexpand: true, - max_width_chars: !notifHasImg(notif) - ? 34 - : 26, - truncate: "end", - wrap: true, - label: notif["summary"], - }), - ], - }), - Widget.Box({ - class_name: - "notification-card-header menu", - hpack: "end", - vpack: "start", - hexpand: true, - child: Widget.Label({ - vexpand: true, - class_name: "notification-time", - label: time(notif.time), - }), - }), - ], - }), - Widget.Box({ - vpack: "start", - hexpand: true, - class_name: "notification-card-body menu", - children: [ - Widget.Label({ - hexpand: true, - use_markup: true, - xalign: 0, - justification: "left", - truncate: "end", - lines: 2, - max_width_chars: !notifHasImg(notif) - ? 35 - : 28, - wrap: true, - class_name: - "notification-card-body-label menu", - label: notif["body"], - }), - ], - }), - ...actionsContainer(notif), - ], - }), - ], - }), - Widget.Button({ - class_name: "close-notification-button menu", - on_primary_click: () => { - notifs.CloseNotification(notif.id); - }, - child: Widget.Label({ - label: "󰅜", - hpack: "center", - }), - }), - ], - }); - })); - }); - }, - }), - ], + children: [Controls(notifs), NotificationCard(notifs)], }), ], }), diff --git a/modules/menus/notifications/notification/actions/index.js b/modules/menus/notifications/notification/actions/index.js new file mode 100644 index 0000000..6260363 --- /dev/null +++ b/modules/menus/notifications/notification/actions/index.js @@ -0,0 +1,45 @@ +const Actions = (notif, notifs) => { + if (notif.actions !== undefined && notif.actions.length > 0) { + return Widget.Box({ + class_name: "notification-card-actions menu", + hexpand: true, + vpack: "end", + children: notif.actions.map((action) => { + return Widget.Button({ + hexpand: true, + class_name: "notification-action-buttons menu", + on_primary_click: () => { + if (action.id.includes("scriptAction:-")) { + Utils.execAsync( + `${action.id.replace("scriptAction:-", "")}`, + ).catch((err) => console.error(err)); + notifs.CloseNotification(notif.id); + } else { + notif.invoke(action.id); + } + }, + child: Widget.Box({ + hpack: "center", + hexpand: true, + children: [ + Widget.Label({ + class_name: "notification-action-buttons-label menu", + hexpand: true, + max_width_chars: 15, + truncate: "end", + wrap: true, + label: action.label, + }), + ], + }), + }); + }), + }); + } + + return Widget.Box({ + class_name: "spacer", + }); +}; + +export { Actions }; diff --git a/modules/menus/notifications/notification/body/index.js b/modules/menus/notifications/notification/body/index.js new file mode 100644 index 0000000..99e864c --- /dev/null +++ b/modules/menus/notifications/notification/body/index.js @@ -0,0 +1,23 @@ +import { notifHasImg } from "../../utils.js"; + +export const Body = (notif) => { + return Widget.Box({ + vpack: "start", + hexpand: true, + class_name: "notification-card-body menu", + children: [ + Widget.Label({ + hexpand: true, + use_markup: true, + xalign: 0, + justification: "left", + truncate: "end", + lines: 2, + max_width_chars: !notifHasImg(notif) ? 35 : 28, + wrap: true, + class_name: "notification-card-body-label menu", + label: notif["body"], + }), + ], + }); +}; diff --git a/modules/menus/notifications/notification/close/index.js b/modules/menus/notifications/notification/close/index.js new file mode 100644 index 0000000..0267964 --- /dev/null +++ b/modules/menus/notifications/notification/close/index.js @@ -0,0 +1,12 @@ +export const CloseButton = (notif, notifs) => { + return Widget.Button({ + class_name: "close-notification-button menu", + on_primary_click: () => { + notifs.CloseNotification(notif.id); + }, + child: Widget.Label({ + label: "󰅜", + hpack: "center", + }), + }); +}; diff --git a/modules/menus/notifications/notification/header/icon.js b/modules/menus/notifications/notification/header/icon.js new file mode 100644 index 0000000..af6162b --- /dev/null +++ b/modules/menus/notifications/notification/header/icon.js @@ -0,0 +1,32 @@ +import icons from "../../../../icons/index.js"; + +const NotificationIcon = ({ app_entry, app_icon, app_name }) => { + let icon = icons.fallback.notification; + + if ( + Utils.lookUpIcon(app_name) || + Utils.lookUpIcon(app_name.toLowerCase() || "") + ) + icon = Utils.lookUpIcon(app_name) + ? app_name + : Utils.lookUpIcon(app_name.toLowerCase()) + ? app_name.toLowerCase() + : ""; + + if (Utils.lookUpIcon(app_icon) && icon === "") icon = app_icon; + + if (Utils.lookUpIcon(app_entry || "") && icon === "") icon = app_entry || ""; + + return Widget.Box({ + css: ` + min-width: 2rem; + min-height: 2rem; + `, + child: Widget.Icon({ + class_name: "notification-icon menu", + icon, + }), + }); +}; + +export { NotificationIcon }; diff --git a/modules/menus/notifications/notification/header/index.js b/modules/menus/notifications/notification/header/index.js new file mode 100644 index 0000000..4653743 --- /dev/null +++ b/modules/menus/notifications/notification/header/index.js @@ -0,0 +1,48 @@ +import GLib from "gi://GLib"; +import { NotificationIcon } from "./icon.js"; +import { notifHasImg } from "../../utils.js"; + +const time = (time, format = "%I:%M %p") => + GLib.DateTime.new_from_unix_local(time).format(format); + +export const Header = (notif) => { + return Widget.Box({ + vertical: false, + hexpand: true, + children: [ + Widget.Box({ + class_name: "notification-card-header menu", + hpack: "start", + children: [NotificationIcon(notif)], + }), + Widget.Box({ + class_name: "notification-card-header menu", + hexpand: true, + vpack: "start", + children: [ + Widget.Label({ + class_name: "notification-card-header-label menu", + hpack: "start", + hexpand: true, + vexpand: true, + max_width_chars: !notifHasImg(notif) ? 34 : 22, + truncate: "end", + wrap: true, + label: notif["summary"], + }), + ], + }), + Widget.Box({ + class_name: "notification-card-header menu", + hpack: "end", + vpack: "start", + hexpand: true, + child: Widget.Label({ + vexpand: true, + class_name: "notification-time", + label: time(notif.time), + }), + }), + ], + }); +}; diff --git a/modules/menus/notifications/notification/image/index.js b/modules/menus/notifications/notification/image/index.js new file mode 100644 index 0000000..8eb159f --- /dev/null +++ b/modules/menus/notifications/notification/image/index.js @@ -0,0 +1,22 @@ +import { notifHasImg } from "../../utils.js"; + +const Image = (notif) => { + if (notifHasImg(notif)) { + return Widget.Box({ + class_name: "notification-card-image-container menu", + hpack: "center", + vpack: "center", + vexpand: false, + child: Widget.Box({ + hpack: "center", + vexpand: false, + class_name: "notification-card-image menu", + css: `background-image: url("${notif.image}")`, + }), + }); + } + + return Widget.Box(); +}; + +export { Image }; diff --git a/modules/menus/notifications/notification/index.js b/modules/menus/notifications/notification/index.js new file mode 100644 index 0000000..9743782 --- /dev/null +++ b/modules/menus/notifications/notification/index.js @@ -0,0 +1,59 @@ +import { notifHasImg } from "../utils.js"; +import { Header } from "./header/index.js"; +import { Actions } from "./actions/index.js"; +import { Image } from "./image/index.js"; +import { Placeholder } from "./placeholder/index.js"; +import { Body } from "./body/index.js"; +import { CloseButton } from "./close/index.js"; + +const NotificationCard = (notifs) => { + return Widget.Box({ + class_name: "menu-content-container notifications", + hpack: "center", + vexpand: true, + spacing: 0, + vertical: true, + setup: (self) => { + self.hook(notifs, () => { + const sortedNotifications = notifs.notifications.sort( + (a, b) => b.time - a.time, + ); + + if (notifs.notifications.length <= 0) { + return (self.children = [Placeholder(notifs)]); + } + + return (self.children = sortedNotifications.map((notif) => { + return Widget.Box({ + class_name: "notification-card-content-container", + children: [ + Widget.Box({ + class_name: "notification-card menu", + vpack: "start", + hexpand: true, + vexpand: false, + children: [ + Image(notif), + Widget.Box({ + vpack: "center", + vertical: true, + hexpand: true, + class_name: `notification-card-content ${!notifHasImg(notif) ? "noimg" : " menu"}`, + children: [ + Header(notif), + Body(notif), + Actions(notif, notifs), + ], + }), + ], + }), + CloseButton(notif, notifs), + ], + }); + })); + }); + }, + }); +}; + +export { NotificationCard }; diff --git a/modules/menus/notifications/notification/placeholder/index.js b/modules/menus/notifications/notification/placeholder/index.js new file mode 100644 index 0000000..61cbb2b --- /dev/null +++ b/modules/menus/notifications/notification/placeholder/index.js @@ -0,0 +1,27 @@ +const Placeholder = (notifs) => { + return Widget.Box({ + class_name: "notification-label-container", + vpack: "fill", + hpack: "center", + expand: true, + child: Widget.Box({ + vpack: "center", + vertical: true, + expand: true, + children: [ + Widget.Label({ + vpack: "center", + class_name: "placeholder-label dim bell", + label: notifs.bind("dnd").as((dnd) => (dnd ? "󰂛" : "󰂚")), + }), + Widget.Label({ + vpack: "start", + class_name: "placehold-label dim message", + label: "You're all caught up :)", + }), + ], + }), + }); +}; + +export { Placeholder }; diff --git a/modules/menus/notifications/utils.js b/modules/menus/notifications/utils.js new file mode 100644 index 0000000..033d622 --- /dev/null +++ b/modules/menus/notifications/utils.js @@ -0,0 +1,5 @@ +const notifHasImg = (notif) => { + return notif.image !== undefined && notif.image.length; +}; + +export { notifHasImg }; diff --git a/modules/notifications/actions/index.js b/modules/notifications/actions/index.js new file mode 100644 index 0000000..eb61f55 --- /dev/null +++ b/modules/notifications/actions/index.js @@ -0,0 +1,43 @@ +const Action = (notif, notifs) => { + if (notif.actions !== undefined && notif.actions.length > 0) { + return Widget.Box({ + class_name: "notification-card-actions", + hexpand: true, + vpack: "end", + children: notif.actions.map((action) => { + return Widget.Button({ + hexpand: true, + class_name: "notification-action-buttons", + on_primary_click: () => { + if (action.id.includes("scriptAction:-")) { + Utils.execAsync( + `${action.id.replace("scriptAction:-", "")}`, + ).catch((err) => console.error(err)); + notifs.CloseNotification(notif.id); + } else { + notif.invoke(action.id); + } + }, + child: Widget.Box({ + hpack: "center", + hexpand: true, + children: [ + Widget.Label({ + class_name: "notification-action-buttons-label", + hexpand: true, + label: action.label, + max_width_chars: 15, + truncate: "end", + wrap: true, + }), + ], + }), + }); + }), + }); + } + + return Widget.Box(); +}; + +export { Action }; diff --git a/modules/notifications/body/index.js b/modules/notifications/body/index.js new file mode 100644 index 0000000..0c4be9f --- /dev/null +++ b/modules/notifications/body/index.js @@ -0,0 +1,23 @@ +import { notifHasImg } from "../../menus/notifications/utils.js"; + +export const Body = (notif) => { + return Widget.Box({ + vpack: "start", + hexpand: true, + class_name: "notification-card-body", + children: [ + Widget.Label({ + hexpand: true, + use_markup: true, + xalign: 0, + justification: "left", + truncate: "end", + lines: 2, + max_width_chars: !notifHasImg(notif) ? 35 : 28, + wrap: true, + class_name: "notification-card-body-label", + label: notif["body"], + }), + ], + }); +}; diff --git a/modules/notifications/close/index.js b/modules/notifications/close/index.js new file mode 100644 index 0000000..cbe3981 --- /dev/null +++ b/modules/notifications/close/index.js @@ -0,0 +1,12 @@ +export const CloseButton = (notif, notifs) => { + return Widget.Button({ + class_name: "close-notification-button", + on_primary_click: () => { + notifs.CloseNotification(notif.id); + }, + child: Widget.Label({ + label: "󰅜", + hpack: "center", + }), + }); +}; diff --git a/modules/notifications/header/icon.js b/modules/notifications/header/icon.js new file mode 100644 index 0000000..7f53111 --- /dev/null +++ b/modules/notifications/header/icon.js @@ -0,0 +1,32 @@ +import icons from "../../icons/index.js"; + +const NotificationIcon = ({ app_entry, app_icon, app_name }) => { + let icon = icons.fallback.notification; + + if ( + Utils.lookUpIcon(app_name) || + Utils.lookUpIcon(app_name.toLowerCase() || "") + ) + icon = Utils.lookUpIcon(app_name) + ? app_name + : Utils.lookUpIcon(app_name.toLowerCase()) + ? app_name.toLowerCase() + : ""; + + if (Utils.lookUpIcon(app_icon) && icon === "") icon = app_icon; + + if (Utils.lookUpIcon(app_entry || "") && icon === "") icon = app_entry || ""; + + return Widget.Box({ + css: ` + min-width: 2rem; + min-height: 2rem; + `, + child: Widget.Icon({ + class_name: "notification-icon", + icon, + }), + }); +}; + +export { NotificationIcon }; diff --git a/modules/notifications/header/index.js b/modules/notifications/header/index.js new file mode 100644 index 0000000..b3ed5ea --- /dev/null +++ b/modules/notifications/header/index.js @@ -0,0 +1,49 @@ +import GLib from "gi://GLib"; +import { notifHasImg } from "../../menus/notifications/utils.js"; +import { NotificationIcon } from "./icon.js"; + +const time = (time, format = "%I:%M %p") => + GLib.DateTime.new_from_unix_local(time).format(format); + +export const Header = (notif) => { + return Widget.Box({ + vertical: false, + hexpand: true, + children: [ + Widget.Box({ + class_name: "notification-card-header", + hpack: "start", + children: [NotificationIcon(notif)], + }), + Widget.Box({ + class_name: "notification-card-header", + hexpand: true, + hpack: "start", + vpack: "start", + children: [ + Widget.Label({ + class_name: "notification-card-header-label", + hpack: "start", + hexpand: true, + vexpand: true, + max_width_chars: !notifHasImg(notif) ? 30 : 19, + truncate: "end", + wrap: true, + label: notif["summary"], + }), + ], + }), + Widget.Box({ + class_name: "notification-card-header menu", + hpack: "end", + vpack: "start", + hexpand: true, + child: Widget.Label({ + vexpand: true, + class_name: "notification-time", + label: time(notif.time), + }), + }), + ], + }); +}; diff --git a/modules/notifications/image/index.js b/modules/notifications/image/index.js new file mode 100644 index 0000000..9542bb3 --- /dev/null +++ b/modules/notifications/image/index.js @@ -0,0 +1,22 @@ +import { notifHasImg } from "../../menus/notifications/utils.js"; + +const Image = (notif) => { + if (notifHasImg(notif)) { + return Widget.Box({ + class_name: "notification-card-image-container", + hpack: "center", + vpack: "center", + vexpand: false, + child: Widget.Box({ + hpack: "center", + vexpand: false, + class_name: "notification-card-image", + css: `background-image: url("${notif.image}")`, + }), + }); + } + + return Widget.Box(); +}; + +export { Image }; diff --git a/modules/notifications/index.js b/modules/notifications/index.js index 1acd4b3..c3873b6 100644 --- a/modules/notifications/index.js +++ b/modules/notifications/index.js @@ -1,13 +1,14 @@ const notifs = await Service.import("notifications"); -import GLib from "gi://GLib"; -import icons from "../icons/index.js"; +import { notifHasImg } from "../menus/notifications/utils.js"; +import { Image } from "./image/index.js"; +import { Action } from "./actions/index.js"; +import { Header } from "./header/index.js"; +import { Body } from "./body/index.js"; +import { CloseButton } from "./close/index.js"; export default () => { notifs.popupTimeout = 7000; - const time = (time, format = "%I:%M %p") => - GLib.DateTime.new_from_unix_local(time).format(format); - return Widget.Window({ name: "notifications-window", class_name: "notifications-window", @@ -21,189 +22,21 @@ export default () => { hexpand: true, setup: (self) => { self.hook(notifs, () => { - const notifHasImg = (notif) => { - return notif.image !== undefined && notif.image.length; - }; - const imageContainer = (notif) => { - if (notifHasImg(notif)) { - return [ - Widget.Box({ - class_name: "notification-card-image-container", - hpack: "center", - vpack: "center", - vexpand: false, - child: Widget.Box({ - hpack: "center", - vexpand: false, - class_name: "notification-card-image", - css: `background-image: url("${notif.image}")`, - }), - }), - ]; - } - - return []; - }; - - const actionsContainer = (notif) => { - if (notif.actions !== undefined && notif.actions.length > 0) { - return [ - Widget.Box({ - class_name: "notification-card-actions", - hexpand: true, - vpack: "end", - children: notif.actions.map((action) => { - return Widget.Button({ - hexpand: true, - class_name: "notification-action-buttons", - on_primary_click: () => { - if (action.id.includes("scriptAction:-")) { - Utils.execAsync( - `${action.id.replace("scriptAction:-", "")}`, - ).catch((err) => console.error(err)); - notifs.CloseNotification(notif.id); - } else { - notif.invoke(action.id); - } - }, - child: Widget.Box({ - hpack: "center", - hexpand: true, - children: [ - Widget.Label({ - class_name: "notification-action-buttons-label", - hexpand: true, - label: action.label, - max_width_chars: 15, - truncate: "end", - wrap: true, - }), - ], - }), - }); - }), - }), - ]; - } - - return []; - }; - - const NotificationIcon = ({ app_entry, app_icon, app_name }) => { - let icon = icons.fallback.notification; - - if ( - Utils.lookUpIcon(app_name) || - Utils.lookUpIcon(app_name.toLowerCase() || "") - ) - icon = Utils.lookUpIcon(app_name) - ? app_name - : Utils.lookUpIcon(app_name.toLowerCase()) - ? app_name.toLowerCase() - : ""; - - if (Utils.lookUpIcon(app_icon) && icon === "") icon = app_icon; - - if (Utils.lookUpIcon(app_entry || "") && icon === "") - icon = app_entry || ""; - - return Widget.Box({ - css: ` - min-width: 2rem; - min-height: 2rem; - `, - child: Widget.Icon({ - class_name: "notification-icon", - icon, - }), - }); - }; - return (self.children = notifs.popups.map((notif) => { return Widget.Box({ class_name: "notification-card", vpack: "start", hexpand: true, children: [ - ...imageContainer(notif), + Image(notif), Widget.Box({ vpack: "start", vertical: true, hexpand: true, class_name: `notification-card-content ${!notifHasImg(notif) ? "noimg" : ""}`, - children: [ - Widget.Box({ - vertical: false, - hexpand: true, - children: [ - Widget.Box({ - class_name: "notification-card-header", - hpack: "start", - children: [NotificationIcon(notif)], - }), - Widget.Box({ - class_name: "notification-card-header", - hexpand: true, - hpack: "start", - vpack: "start", - children: [ - Widget.Label({ - class_name: "notification-card-header-label", - hpack: "start", - hexpand: true, - vexpand: true, - max_width_chars: !notifHasImg(notif) ? 30 : 23, - truncate: "end", - wrap: true, - label: notif["summary"], - }), - ], - }), - Widget.Box({ - class_name: "notification-card-header menu", - hpack: "end", - vpack: "start", - hexpand: true, - child: Widget.Label({ - vexpand: true, - class_name: "notification-time", - label: time(notif.time), - }), - }), - ], - }), - Widget.Box({ - vpack: "start", - hexpand: true, - class_name: "notification-card-body", - children: [ - Widget.Label({ - hexpand: true, - use_markup: true, - xalign: 0, - justification: "left", - truncate: "end", - lines: 2, - max_width_chars: !notifHasImg(notif) ? 35 : 28, - wrap: true, - class_name: "notification-card-body-label", - label: notif["body"], - }), - ], - }), - ...actionsContainer(notif), - ], - }), - Widget.Button({ - class_name: "close-notification-button", - on_primary_click: () => { - notifs.CloseNotification(notif.id); - }, - child: Widget.Label({ - label: "󰅜", - hpack: "center", - }), + children: [Header(notif), Body(notif), Action(notif, notifs)], }), + CloseButton(notif, notifs), ], }); })); diff --git a/scss/menus/audiomenu.scss b/scss/menus/audiomenu.scss index 73af123..b93c48d 100644 --- a/scss/menus/audiomenu.scss +++ b/scss/menus/audiomenu.scss @@ -32,7 +32,7 @@ } .menu-section-container.playback { margin-top: 0em; - margin-bottom: 1.35em; + margin-bottom: 1em; } .menu-section-container.input { margin-top: 0em; diff --git a/scss/menus/bluetooth.scss b/scss/menus/bluetooth.scss index cc62e58..7738f3b 100644 --- a/scss/menus/bluetooth.scss +++ b/scss/menus/bluetooth.scss @@ -3,7 +3,7 @@ .menu-items-container.bluetooth { font-size: 1.3em; .menu-section-container { - margin: 1.35em 0em; + margin: 1em 0em; } .menu-label-container { diff --git a/scss/menus/calendar.scss b/scss/menus/calendar.scss index 6fb4326..c6cf20f 100644 --- a/scss/menus/calendar.scss +++ b/scss/menus/calendar.scss @@ -74,7 +74,7 @@ } .clock-content-period { font-size: 1.75em; - margin-bottom: 1.3em; + margin-bottom: 1.35em; margin-right: -0.875em; color: $teal; } diff --git a/scss/menus/media.scss b/scss/menus/media.scss index ef3b358..20d3140 100644 --- a/scss/menus/media.scss +++ b/scss/menus/media.scss @@ -5,7 +5,7 @@ min-height: 18em; .menu-section-container { - margin: 1.3em 0em; + margin: 1em 0em; } .menu-items-section { diff --git a/scss/menus/menu.scss b/scss/menus/menu.scss index c6c8ca1..f835bb0 100644 --- a/scss/menus/menu.scss +++ b/scss/menus/menu.scss @@ -104,7 +104,7 @@ tooltip label { } .menu-section-container { - margin: 1.35em 0em; + margin: 1em 0em; .menu-label { color: $text; @@ -117,7 +117,7 @@ tooltip label { border-radius: 0.4em; border-bottom-left-radius: 0em; border-bottom-right-radius: 0em; - margin: 0em 1.35em ; + margin: 0em 1em ; min-height: 2em; } @@ -130,7 +130,7 @@ tooltip label { } &:nth-child(2) { - margin-top: 1.35em; + margin-top: 1em; } .menu-items-section { @@ -139,7 +139,7 @@ tooltip label { border-top-left-radius: 0em; border-top-right-radius: 0em; padding: 0.9em; - margin: 0em 1.35em; + margin: 0em 1em; } } diff --git a/scss/menus/notifications.scss b/scss/menus/notifications.scss index c9806b2..3e6cb02 100644 --- a/scss/menus/notifications.scss +++ b/scss/menus/notifications.scss @@ -2,7 +2,7 @@ .notification-card-container.menu { margin: 0em; - min-width: 28.6em; + min-width: 30.5em; min-height: 48em; background: $crust; border: 0.13em solid $surface0; @@ -14,14 +14,14 @@ } .menu-content-container.notifications { - margin: 1.35em; + margin: 1em; margin-bottom: 0em; min-height: 4em; } .notification-menu-controls { background: $base; - margin: 1em 1.3em; + margin: 1em 1em; margin-bottom: 0.5em; border-radius: 0.4em; padding: 0.4em 0.75em; @@ -29,7 +29,7 @@ .notification-card.menu { background: $base; - min-width: 23.5em; + min-width: 26.2em; border: 0.15em solid $base; border-radius: 0em; border-bottom-left-radius: 0.4em; @@ -40,7 +40,7 @@ .notification-card-content-container { margin-bottom: 0.65em; &:last-child { - margin-bottom: 1.3em; + margin-bottom: 1em; } } .notification-card-content { @@ -92,3 +92,18 @@ font-size: 1.5em; } } + +.close-notification-button.menu { + background: $red; + color: $crust; + min-width: 2.1em; + border-radius: 0rem 0.35em 0.35em 0em; + + label { + font-size: 1.5em; + } + + &:hover { + background: $maroon; + } +} diff --git a/scss/notifications/popups.scss b/scss/notifications/popups.scss index a387435..0100c26 100644 --- a/scss/notifications/popups.scss +++ b/scss/notifications/popups.scss @@ -21,7 +21,6 @@ padding: 1px; } - .notification-card-image-container { margin: 0.65em 0.65em; border-radius: 0.4em; @@ -84,6 +83,8 @@ .notification-icon { margin-bottom: 0.4em; + min-width: 1em; + min-height: 1em; font-size: 1.3em; } diff --git a/services/snapshot.sh b/services/snapshot.sh index 10edfcf..3d6c66f 100755 --- a/services/snapshot.sh +++ b/services/snapshot.sh @@ -1,18 +1,17 @@ #!/bin/bash outputDir="$HOME/Pictures/Screenshots/" - outputFile="snapshot_$(date +%Y-%m-%d_%H-%M-%S).png" outputPath="$outputDir/$outputFile" mkdir -p "$outputDir" -grimblast copysave area "$outputPath" - -recentFile=$(ls -t "$outputDir"/snapshot_*.png | head -n 1) -notify-send "Grimblast" "Your snapshot has been saved." \ - -i video-x-generic \ - -a "Grimblast" \ - -t 7000 \ - -u normal \ - --action="scriptAction:-dolphin $outputDir=Directory" \ - --action="scriptAction:-xdg-open $recentFile=View" +if grimblast copysave area "$outputPath"; then + recentFile=$(ls -t "$outputDir"/snapshot_*.png | head -n 1) + notify-send "Grimblast" "Your snapshot has been saved." \ + -i video-x-generic \ + -a "Grimblast" \ + -t 7000 \ + -u normal \ + --action="scriptAction:-dolphin $outputDir=Directory" \ + --action="scriptAction:-xdg-open $recentFile=View" +fi diff --git a/style.css b/style.css index 0039688..01696be 100644 --- a/style.css +++ b/style.css @@ -523,7 +523,7 @@ tooltip label { } .menu-section-container { - margin: 1.35em 0em; + margin: 1em 0em; } .menu-section-container .menu-label { color: #cdd6f4; @@ -535,7 +535,7 @@ tooltip label { border-radius: 0.4em; border-bottom-left-radius: 0em; border-bottom-right-radius: 0em; - margin: 0em 1.35em; + margin: 0em 1em; min-height: 2em; } .menu-section-container:first-child { @@ -545,7 +545,7 @@ tooltip label { margin-top: 0em; } .menu-section-container:nth-child(2) { - margin-top: 1.35em; + margin-top: 1em; } .menu-section-container .menu-items-section { background: #1e1e2e; @@ -553,7 +553,7 @@ tooltip label { border-top-left-radius: 0em; border-top-right-radius: 0em; padding: 0.9em; - margin: 0em 1.35em; + margin: 0em 1em; } .menu-active { @@ -878,7 +878,7 @@ window#powermenu .powermenu.box { .menu-section-container.playback { margin-top: 0em; - margin-bottom: 1.35em; + margin-bottom: 1em; } .menu-section-container.input { @@ -968,7 +968,7 @@ window#powermenu .powermenu.box { font-size: 1.3em; } .menu-items-container.bluetooth .menu-section-container { - margin: 1.35em 0em; + margin: 1em 0em; } .menu-items-container.bluetooth .menu-label-container .menu-label { color: #89dceb; @@ -1032,7 +1032,7 @@ window#powermenu .powermenu.box { min-height: 18em; } .menu-items-container.media .menu-section-container { - margin: 1.3em 0em; + margin: 1em 0em; } .menu-items-container.media .menu-items-section { border-radius: 0.4em; @@ -1113,7 +1113,7 @@ window#powermenu .powermenu.box { .notification-card-container.menu { margin: 0em; - min-width: 28.6em; + min-width: 30.5em; min-height: 48em; background: #11111b; border: 0.13em solid #313244; @@ -1124,20 +1124,20 @@ window#powermenu .powermenu.box { margin-right: 0.5em; } .notification-card-container.menu .menu-content-container.notifications { - margin: 1.35em; + margin: 1em; margin-bottom: 0em; min-height: 4em; } .notification-card-container.menu .notification-menu-controls { background: #1e1e2e; - margin: 1em 1.3em; + margin: 1em 1em; margin-bottom: 0.5em; border-radius: 0.4em; padding: 0.4em 0.75em; } .notification-card-container.menu .notification-card.menu { background: #1e1e2e; - min-width: 23.5em; + min-width: 26.2em; border: 0.15em solid #1e1e2e; border-radius: 0em; border-bottom-left-radius: 0.4em; @@ -1148,7 +1148,7 @@ window#powermenu .powermenu.box { margin-bottom: 0.65em; } .notification-card-container.menu .notification-card-content-container:last-child { - margin-bottom: 1.3em; + margin-bottom: 1em; } .notification-card-container.menu .notification-card-content { margin-bottom: 0.25em; @@ -1189,6 +1189,19 @@ window#powermenu .powermenu.box { font-size: 1.5em; } +.close-notification-button.menu { + background: #f38ba8; + color: #11111b; + min-width: 2.1em; + border-radius: 0rem 0.35em 0.35em 0em; +} +.close-notification-button.menu label { + font-size: 1.5em; +} +.close-notification-button.menu:hover { + background: #eba0ac; +} + .calendar-content-container { margin-top: 0em; min-width: 27em; @@ -1258,7 +1271,7 @@ window#powermenu .powermenu.box { } .clock-content-items .clock-content-period { font-size: 1.75em; - margin-bottom: 1.3em; + margin-bottom: 1.35em; margin-right: -0.875em; color: #94e2d5; } @@ -1740,6 +1753,8 @@ window#powermenu .powermenu.box { .notification-icon { margin-bottom: 0.4em; + min-width: 1em; + min-height: 1em; font-size: 1.3em; } diff --git a/style.css.map b/style.css.map index 9afa6c9..3379eb1 100644 --- a/style.css.map +++ b/style.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["scss/main.scss","scss/common/common.scss","scss/colors.scss","scss/common/widget-button.scss","scss/bar/menu.scss","scss/bar/audio.scss","scss/bar/media.scss","scss/bar/network.scss","scss/bar/bluetooth.scss","scss/bar/clock.scss","scss/bar/workspace.scss","scss/bar/window_title.scss","scss/bar/systray.scss","scss/bar/notifications.scss","scss/bar/power.scss","scss/bar/bar.scss","scss/bar/battery.scss","scss/menus/menu.scss","scss/menus/power.scss","scss/common/floating-widget.scss","scss/menus/audiomenu.scss","scss/menus/network.scss","scss/menus/bluetooth.scss","scss/menus/media.scss","scss/menus/notifications.scss","scss/menus/calendar.scss","scss/menus/energy.scss","scss/menus/dashboard.scss","scss/notifications/popups.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;;;ACFF;EACE;EACA;EACA,kBCJgB;EDKhB;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACI,kBClBW;;ADoBf;EACE,OCrBa;;ADuBf;EACE;EACA;EACA;EACA;;AAGJ;EACE;EACA;EACA,kBCjCe;;;ADqCnB;EACE;EACA;EACA;EACA,OCzCiB;;;AD4CnB;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA,kBChEiB;EDiEjB;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;EAEE;EACA,kBChFgB;;;ADmFlB;AAAA;EAEE;EACA,kBCtFgB;;;ADyFlB;AAAA;AAAA;EAGE,OC5FgB;ED6FhB,kBC9CW;;;ADiDb;AAAA;AAAA;EAGE;EACA,kBCrDW;;;ADwDb;AAAA;AAAA;EAGE;EACA,kBC5DW;;;AD+Db;EACE;EACA;EACA;EACA;EACA,kBClHiB;EDmHjB;EACA;EACA;;;AAGF;EACE,kBC3EW;;;AD8Eb;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA,kBCzIc;ED0Id;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA,kBClKiB;;;ADqKnB;EACE;EACA,kBCzHW;;;AD4Hb;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA,OC3IW;ED4IX,kBC3LgB;ED4LhB;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,kBCnKM;EDoKN,OChLK;EDiLL;;;AAGF;EACE;EACA;EACA,kBCnNiB;;;ADsNnB;EACE;IACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AEjOF;EACE,YDoCM;ECnCN;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cD4BM;EC3BN;EACA;;AAEA;EACE;EACA,cDSO;ECRP;;AAGF;EAEE;EACA,cDEO;;ACCT;EA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","file":"style.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["scss/main.scss","scss/common/common.scss","scss/colors.scss","scss/common/widget-button.scss","scss/bar/menu.scss","scss/bar/audio.scss","scss/bar/media.scss","scss/bar/network.scss","scss/bar/bluetooth.scss","scss/bar/clock.scss","scss/bar/workspace.scss","scss/bar/window_title.scss","scss/bar/systray.scss","scss/bar/notifications.scss","scss/bar/power.scss","scss/bar/bar.scss","scss/bar/battery.scss","scss/menus/menu.scss","scss/menus/power.scss","scss/common/floating-widget.scss","scss/menus/audiomenu.scss","scss/menus/network.scss","scss/menus/bluetooth.scss","scss/menus/media.scss","scss/menus/notifications.scss","scss/menus/calendar.scss","scss/menus/energy.scss","scss/menus/dashboard.scss","scss/notifications/popups.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;;;ACFF;EACE;EACA;EACA,kBCJgB;EDKhB;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACI,kBClBW;;ADoBf;EACE,OCrBa;;ADuBf;EACE;EACA;EACA;EACA;;AAGJ;EACE;EACA;EACA,kBCjCe;;;ADqCnB;EACE;EACA;EACA;EACA,OCzCiB;;;AD4CnB;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA,kBChEiB;EDiEjB;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;EAEE;EACA,kBChFgB;;;ADmFlB;AAAA;EAEE;EACA,kBCtFgB;;;ADyFlB;AAAA;AAAA;EAGE,OC5FgB;ED6FhB,kBC9CW;;;ADiDb;AAAA;AAAA;EAGE;EACA,kBCrDW;;;ADwDb;AAAA;AAAA;EAGE;EACA,kBC5DW;;;AD+Db;EACE;EACA;EACA;EACA;EACA,kBClHiB;EDmHjB;EACA;EACA;;;AAGF;EACE,kBC3EW;;;AD8Eb;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA,kBCzIc;ED0Id;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA,kBClKiB;;;ADqKnB;EACE;EACA,kBCzHW;;;AD4Hb;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA,OC3IW;ED4IX,kBC3LgB;ED4LhB;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,kBCnKM;EDoKN,OChLK;EDiLL;;;AAGF;EACE;EACA;EACA,kBCnNiB;;;ADsNnB;EACE;IACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AEjOF;EACE,YDoCM;ECnCN;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cD4BM;EC3BN;EACA;;AAEA;EACE;EACA,cDSO;ECRP;;AAGF;EAEE;EACA,cDEO;;ACCT;EA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","file":"style.css"} \ No newline at end of file