Coder Social home page Coder Social logo

cloudxtreme / quark-shell-mac Goto Github PK

View Code? Open in Web Editor NEW

This project forked from hackplan/quark-shell-mac

0.0 1.0 0.0 3.1 MB

Quark Shell for Mac helps web developers to create native-like Mac menubar app using HTML and JavaScript without writing any native code.

License: MIT License

Makefile 0.37% Ruby 0.53% Objective-C 82.85% HTML 10.33% JavaScript 5.92%

quark-shell-mac's Introduction

Quark Shell for Mac

Quark Shell helps you create cross-platform (currently Mac-only, Windows version coming soon) menubar/tray app using HTML and JavaScript without writing any native code. Quark Shell exposes a JavaScript object called quark to provide system functions. Quark Shell for Mac is based on WebKit.

Screenshot

Integrating Web App

app/index.html is the portal of your menubar app. app/preferences/[identifier].html are the preference pages (for example, app/preferences/general.html).

To build your app:

  1. Delete the current app folder
  2. Put your files into app folder
  3. Open quark-shell.xcworkspace in Xcode
  4. Change bundle name and bundle identifier (see Issue #50 for details)
  5. Build and have fun!

Remember that Quark Shell is still a WIP. When the project is stable enough, the build process will be simplified.

API

APIs may change rapidly before 1.0.

quark.platform // returns "mac" or "windows"

// App info (configurable in Xcode)
quark.appVersion
quark.appBundleVersion

// Enable/disable Web Inspector
quark.debug = true

// Manipulate the popup window
quark.openPopup()
quark.closePopup()
quark.togglePopup()
quark.resizePopup({width: 326, height: 623})

// Quit application
quark.quit()

// Open URL in default browser
quark.openURL("https://pomotodo.com/")

// Set menubar icon
quark.setMenubarIcon("data:image/png;base64,iVBORw...SuQmCC")
quark.setMenubarHighlightedIcon("data:image/png;base64,iVBORw...SuQmCC")
quark.resetMenubarIcon()

// Set menubar icon click action
quark.setClickAction(function () { console.log("Don’t click me!"); })
quark.setSecondaryClickAction(function () { console.log("What did I say?"); })

// Set menubar label
quark.setLabel("03:14 AM")

// Auto launch at login
// You also need to change bundle identifier "com.hackplan.quark-shell-helper" to a proper one in quark-shell-helper.xcodeproj and QSHWebViewDelegate.m
quark.setLaunchAtLogin(true)

// Send system notification
quark.notify({
  title: "Pomotodo",
  content: "Break is over!",
  time: "2038-01-19T03:14:07Z", // (optional) delivery date for scheduled notification, in ISO 8601
  popupOnClick: true // popup when clicking notification
})

// Remove all scheduled notifications
quark.removeAllScheduledNotifications()

// Remove all delivered notifications from notification center
quark.removeAllDeliveredNotifications()

// Open new window
// "url" is relative to "app" folder
// Notice: You can only open one window at the same time,
// or the later window will replace the former window.
quark.newWindow({
  url: "about.html",
  width: 600,
  height: 400,

  // optional options
  x: 100, y: 100, // x and y should both be provided, "center" is also a valid value
  border: true, // whether the window has a border, default is true
  shadow: true, // whether the window has a shadow, default is true
  alwaysOnTop: false, // whether the window should always on top, default is false
  alpha: 1.0 // the alpha value of the window, between 0 and 1, default is 1.0
})

// Close new window
quark.closeWindow()

// Pin/unpin pop-up window (won’t close when click outside the window)
quark.pin()
quark.unpin()

// Exchange messages between webviews
quark.emit("MessageName", "payload")
quark.on("MessageName", function(message) {
	console.log(message)
})

// Show a context menu
quark.showMenu({
  items: [
    {label: "Test", click: function() { console.log("I am completely operational") } },
    {type: "separator"},
    {label: "Exit", click: function() { console.log("LIFE FUNCTION TERMINATED") } }
  ],
  x: 100,
  y: 200
])

Global Shortcuts

// Set global keyboard shortcut
quark.addKeyboardShortcut({
  keycode: 0x7A, // F1 key
  modifierFlags: 0, // no modifier key
  callback: function suchCallback() {
    console.log("wow")
    quark.togglePopup()
  }
})

// Clear global keyboard shortcut
quark.clearKeyboardShortcut()

Please follow NSEvent Class Reference for documentation about modifier flags.

Also, Quark Shell for Mac allows you to record shortcuts via native components in Preferences window.

Preferences

quark.setupPreferences([
  {"label": "General",  "identifier": "general",  "icon": "NSPreferencesGeneral", "height": 192},
  {"label": "Account",  "identifier": "account",  "icon": "NSUserAccounts",       "height": 102},
  {"label": "Shortcut", "identifier": "shortcut", "icon": "NSAdvanced",           "height": 120}
])

// Must be called after quark.setupPreferences()
quark.openPreferences()
quark.closePreferences()

Quark Shell for Mac also provides some native components for preferences.

More detail: Preferences.md

Auto Updating

// Check for update
quark.checkUpdate("https://rawgit.com/HackPlan/quark-shell-mac/master/updater/SampleAppcast.xml")
quark.checkUpdateInBackground("https://rawgit.com/HackPlan/quark-shell-mac/master/updater/SampleAppcast.xml")

More detail: AutoUpdate.md

FAQ

  • Can I use local storage? Yes.
  • Can I use WebSQL? Yes.
  • Can I use IndexedDB? No, because we are using NSWebView. A future Yosemite-only version using WKWebView will support IndexedDB.
  • Is Quark Shell compatible with Mac App Store? Absolutely yes.

Story

Quark Shell was originally Menubar WebKit. It was created for Pomotodo for Mac. Later on, we decided to create a Windows version based on Atom Shell. The project was highly inspired by Atom Shell (now Electron), node-webkit (now nw.js), and MacGap. As a cross-platform project, Menubar WebKit is no longer an appropriate name, so we started to use Quark Shell.

Credits

Quark Shell for Mac was created by LIU Dongyuan (@xhacker) in the development of Pomotodo for Mac.

Some of the code are taken from:

Used third-party libraries:

Contribution

Pull requests are welcome! If you want to do something big, please open an issue first.

License

MIT

quark-shell-mac's People

Contributors

readmecritic avatar untsop avatar xhacker avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.