const { Gdk, Gtk } = imports.gi; import { App, Service, Utils, Widget } from '../../imports.js'; const { execAsync, exec } = Utils; import { searchItem } from './searchitem.js'; import { execAndClose, startsWithNumber, launchCustomCommand } from './miscfunctions.js'; export const DirectoryButton = ({ parentPath, name, type, icon }) => { const actionText = Widget.Revealer({ revealChild: false, transition: "crossfade", transitionDuration: 200, 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: 300, 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, setup: (self) => Utils.timeout(1, () => { const styleContext = self.get_parent().get_style_context(); const width = styleContext.get_property('min-width', Gtk.StateFlags.NORMAL); const height = styleContext.get_property('min-height', Gtk.StateFlags.NORMAL); self.size = Math.max(width, height, 1); }) }), }), Widget.Label({ className: 'overview-search-results-txt txt txt-norm', label: name, }), Widget.Box({ hexpand: true }), actionTextRevealer, ] }) ] }), connections: [ ['focus-in-event', (button) => { actionText.revealChild = true; actionTextRevealer.revealChild = true; }], ['focus-out-event', (button) => { actionText.revealChild = false; actionTextRevealer.revealChild = false; }], ] }) } export const CalculationResultButton = ({ result, text }) => searchItem({ materialIconName: 'calculate', 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: 200, 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: 300, 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, setup: (self) => Utils.timeout(1, () => { const styleContext = self.get_parent().get_style_context(); const width = styleContext.get_property('min-width', Gtk.StateFlags.NORMAL); const height = styleContext.get_property('min-height', Gtk.StateFlags.NORMAL); self.size = Math.max(width, height, 1); }) }), }), Widget.Label({ className: 'overview-search-results-txt txt txt-norm', label: app.name, }), Widget.Box({ hexpand: true }), actionTextRevealer, ] }) ] }), connections: [ ['focus-in-event', (button) => { actionText.revealChild = true; actionTextRevealer.revealChild = true; }], ['focus-out-event', (button) => { actionText.revealChild = false; actionTextRevealer.revealChild = false; }], ] }) } export const ExecuteCommandButton = ({ command, terminal = false }) => searchItem({ materialIconName: `${terminal ? 'terminal' : 'settings_b_roll'}`, name: `Run command`, actionName: `Execute ${terminal ? 'in terminal' : ''}`, content: `${command}`, onActivate: () => execAndClose(command, terminal), }) export const CustomCommandButton = ({ text = '' }) => searchItem({ materialIconName: 'settings_suggest', name: 'Action', actionName: 'Run', content: `${text}`, onActivate: () => { App.closeWindow('overview'); launchCustomCommand(text); }, }); export const SearchButton = ({ text = '' }) => searchItem({ materialIconName: 'travel_explore', name: 'Search Google', actionName: 'Go', content: `${text}`, onActivate: () => { App.closeWindow('overview'); execAsync(['bash', '-c', `xdg-open 'https://www.google.com/search?q=${text} -site:quora.com' &`]).catch(print); // fuck quora }, });