const { Gtk } = imports.gi; import App from 'resource:///com/github/Aylur/ags/app.js'; import Widget from 'resource:///com/github/Aylur/ags/widget.js'; import * as Utils from 'resource:///com/github/Aylur/ags/utils.js'; const { execAsync, exec } = Utils; import { searchItem } from './searchitem.js'; import { execAndClose, couldBeMath, launchCustomCommand } from './miscfunctions.js'; export const DirectoryButton = ({ parentPath, name, type, icon }) => { const actionText = Widget.Revealer({ revealChild: false, transition: "crossfade", transitionDuration: userOptions.animations.durationLarge, child: Widget.Label({ className: 'overview-search-results-txt txt txt-small txt-action', label: 'Open', }) }); const actionTextRevealer = Widget.Revealer({ revealChild: false, transition: "slide_left", transitionDuration: userOptions.animations.durationSmall, child: actionText, }); return Widget.Button({ className: 'overview-search-result-btn', onClicked: () => { App.closeWindow('overview'); execAsync(['bash', '-c', `xdg-open '${parentPath}/${name}'`, `&`]).catch(print); }, child: Widget.Box({ children: [ Widget.Box({ vertical: false, children: [ Widget.Box({ className: 'overview-search-results-icon', homogeneous: true, child: Widget.Icon({ icon: icon, }), }), Widget.Label({ className: 'overview-search-results-txt txt txt-norm', label: name, }), Widget.Box({ hexpand: true }), actionTextRevealer, ] }) ] }), setup: (self) => self .on('focus-in-event', (button) => { actionText.revealChild = true; actionTextRevealer.revealChild = true; }) .on('focus-out-event', (button) => { actionText.revealChild = false; actionTextRevealer.revealChild = false; }) , }) } export const CalculationResultButton = ({ result, text }) => searchItem({ materialIconName: '󱖦 ', name: `Math result`, actionName: "Copy", content: `${result}`, onActivate: () => { App.closeWindow('overview'); execAsync(['wl-copy', `${result}`]).catch(print); }, }); export const DesktopEntryButton = (app) => { const actionText = Widget.Revealer({ revealChild: false, transition: "crossfade", transitionDuration: userOptions.animations.durationLarge, child: Widget.Label({ className: 'overview-search-results-txt txt txt-small txt-action', label: 'Launch', }) }); const actionTextRevealer = Widget.Revealer({ revealChild: false, transition: "slide_left", transitionDuration: userOptions.animations.durationSmall, child: actionText, }); return Widget.Button({ className: 'overview-search-result-btn', onClicked: () => { App.closeWindow('overview'); app.launch(); }, child: Widget.Box({ children: [ Widget.Box({ vertical: false, children: [ Widget.Box({ className: 'overview-search-results-icon', homogeneous: true, child: Widget.Icon({ icon: app.iconName, }), }), Widget.Label({ className: 'overview-search-results-txt txt txt-norm', label: app.name, }), Widget.Box({ hexpand: true }), actionTextRevealer, ] }) ] }), setup: (self) => self .on('focus-in-event', (button) => { actionText.revealChild = true; actionTextRevealer.revealChild = true; }) .on('focus-out-event', (button) => { actionText.revealChild = false; actionTextRevealer.revealChild = false; }) , }) } export const ExecuteCommandButton = ({ command, terminal = false }) => searchItem({ materialIconName: `${terminal ? 'terminal' : ' '}`, name: `Run command`, actionName: `Execute ${terminal ? 'in terminal' : ''}`, content: `${command}`, onActivate: () => execAndClose(command, terminal), extraClassName: 'techfont', }) export const CustomCommandButton = ({ text = '' }) => searchItem({ materialIconName: ' ', name: 'Action', actionName: 'Run', content: `${text}`, onActivate: () => { App.closeWindow('overview'); launchCustomCommand(text); }, }); export const SearchButton = ({ text = '' }) => searchItem({ materialIconName: '󰜏 ', name: 'Search the web', actionName: 'Go', content: `${text}`, onActivate: () => { App.closeWindow('overview'); execAsync(['bash', '-c', `xdg-open '${userOptions.search.engineBaseUrl}${text} ${['', ...userOptions.search.excludedSites].join(' -site:')}' &`]).catch(print); }, });