UNPKG

simplegoals

Version:

Motivate your users with pleasant and easy-to-use achievements.

263 lines (216 loc) 9.38 kB
<p align="center"> <img src="https://raw.githubusercontent.com/simplegoals/simplegoals/master/logo.png" alt="SimpleGoals: Beautiful and Easy-to-Use Achievements" width="40%"> </p> <p align="center">Motivate your users with pleasant and easy-to-use achievements.</p> <p align="center"> <img src="https://raw.githubusercontent.com/simplegoals/simplegoals/master/demo.gif" alt="SimpleGoals: Beautiful and Easy-to-Use Achievements"> </p> <p align="center"><b>Demo and a prettier version of this documentation is available at <a href="https://simplegoals.co">simplegoals.co</a></b></p> **SimpleGoals** allows you to quickly and easily create achievements your users can accomplish — add intriguing game elements to your website. And even more: **CloudStorage** allows you to keep users' achievements persistent across different browsers and devices. It only takes a couple of minutes to add new options to get everything ready. - [How it works?](#how-does-it-work) - [Installation](#installation) - [CDN (Easiest)](#cdn-easiest) - [Download files](#download-files) - [Webpack or Browserify (Advanced)](#webpack-or-browserify-advanced) - [Usage](#usage) - [Initializing](#initializing) - [Unlock achievements](#unlock-achievements) - [Show all achievements](#show-all-achievements) - [Options](#options) - [CloudStorage](#cloudstorage) - [Development](#development) - [License](#license) # How does it work? - Create a list of goals your users can achieve. 🏆 - Decide when each achievement is unlocked (e.g. on a button click, or when a special page was opened) - Add a small JS snippet to your website. 👩‍💻 - Tada! 🎉 # Installation There are several ways to get started with SimpleGoals. You can use: ### CDN (Easiest) Just add this line to HTML code it before the closing `</body>` element. ```html <script type="text/javascript" src="https://static.simplegoals.co/0.3.1/simplegoals-styles-included.min.js"></script> ``` And you're ready to use SimpleGoals! If you're going to update styles of SimpleGoals, you might want to load JS and styles separately: ```html // Before closing </head> element <link rel="stylesheet" href="https://static.simplegoals.co/0.3.1/simplegoals.min.css"> // Before closing </body> element <script type="text/javascript" src="https://static.simplegoals.co/0.3.1/simplegoals.min.js"></script> ``` ### Download files You can download SimpleGoals files from https://static.simplegoals.co/0.3.1/simplegoals.zip and add them to your project directory Then load them in HTML: ```html // Before closing </head> element <link rel="stylesheet" href="simplegoals.min.css"> // Before closing </body> element <script type="text/javascript" src="simplegoals.min.js"></script> ``` ### Webpack or Browserify (Advanced) Add package: ```shell // With npm npm install simplegoals --save // With yarn yarn add simplegoals ``` Load SimpleGoals in your JS code ```js // Webpack import 'simplegoals/dist/simplegoals.min.css' import SimpleGoals from 'simplegoals'; // Browserify require 'simplegoals/dist/simplegoals.min.css' var SimpleGoals = require('simplegoals'); ``` # Usage Using SimpleGoals is fast and easy! ## Initializing To use SimpleGoals you need to initialize it: ```js // Define a list of all available goals (Example) var goals = { explorer: { name: "Curious Explorer", description: "Scroll through half of the page" }, secret: { name: "Lucky Digger", description: "Find a secret button" } } // Initialize SimpleGoals when a page is loaded window.addEventListener('load', function() { SimpleGoals.init({ goals: goals }) }); ``` You can check out all available options in the [Options](#options) section ## Unlock achievements There are two ways to unlock goals. - You can add `data-simplegoals-unlock="key_of_goal"` attribute to any button. When a user clicks this button, the goals will be unlocked and achievement will appear. ```html <a data-simplegoals-unlock="secret" href="#">I'm a secret button</a> ``` - You can call `SimpleGoals.unlock("key_of_goal")` method at any time. ```js SimpleGoals.unlock("explorer") ``` Example: ```js // Scroll through half of the page if (document.body.scrollTop > document.body.scrollHeight / 2) { SimpleGoals.unlock("explorer") } ``` Each goal can be unlocked and shown only once. ## Show all achievements There are also two ways to show all achievements. - You can add `data-simplegoals-overview="true"` attribute to any button. When user click this button, the list of all achievements will be shown. Example: ```html <a data-simplegoals-overview="true" href="#">Show all achievements</a> ``` - You can call `SimpleGoals.showOverview()` method at any time. ```js SimpleGoals.showOverview() ``` Example: ```js // Scroll through half of the page if (document.body.scrollTop > document.body.scrollHeight / 2) { SimpleGoals.showOverview() } ``` ## Options Option | Default | Description -----|---------|------------ **`goals`** | `[]` | An `Object` with all possible goals. Each key is a key of the goal and each value should be an `Object` with `name` and `description` **`useCloudStorage`** | `false` | If `true`, **[CloudStorage](#CloudStorage)** will be used and goals for users will be saved in the cloud and will be persistent across all browser sessions and devices of the user. If `false`, `LocalStorage` will be used. All data will be saved in the user's browser and will be not synced. If a user clears local storage or use another browser, all achievements will be lost. **`theme`** | see **[Theme Options](#theme-options)** | An `Object`, see **[Theme Options](#theme-options)** **`onGoalUnlock`** | `function(goalKey){}` | This is callback method that will be called, when a goal will be unlocked. It takes a goal's `key` as a param. You can use this callback method to add custom logging or some API calls. **`freshStart`** | `false` | When `true` resets all goals every time a user refreshes or opens a new page. Works only when `useCloudStorage` is `false`. **`timeout`** | `0` | This options sets the time(in milliseconds) between achievement appears and automatically disappears. If it is set to `0`, achievements will be not hidden automatically. **`appId`** | `null` | Used only when **[CloudStorage](#CloudStorage)** is enabled. You can get your `appId` here: **https://api.simplegoals.co/projects/new** **`user`** | `null` | Used only when **[CloudStorage](#CloudStorage)** is enabled. Used to determine user in CloudStorage. Object with `uid`, `email`, and `name`. Either `uid` or `email` should be present. ### Theme options Option | Default | Description -----|---------|------------ **`fontFamily`** | Browser default | Specifies the font for an elements **`background`** | `#ffffff` | Background color **`primary`** | `#38b2ac` | The color of buttons and links **`title`** | `#000000` | The color of main labels **`subtitle`** | `#718096` | The color of additional text **`primaryHover`** | 7% darker than `primary` | The color of buttons and links in the hovered state, calculated automatically if not specified. **`opposite`** | `#000000` or `#FFFFFF` | The color of text on buttons, calculated automatically if not specified. Example: ```js SimpleGoals.init({ goals: goals, onGoalUnlock: function(goalKey){ console.log(goalKey) }, theme: { fontFamily: 'Arial, Helvetica, sans-serif', background: '#ffffff', primary: '#38b2ac', title: '#000000', subtitle: '#718096' } timeout: 10000, useCloudStorage: true, appId: "f072c862-4f88-4be9-a86e-521e4a282e68", user: { uid: "magician#3123936", email: "harry@hogwarts.com", name: "Harry Potter"= } }) ``` # CloudStorage CloudStorage allows you to keep users' achievements persistent across different browsers and devices. It only takes a couple of minutes to add new options to get everything ready. There are two little steps you need to do: - Go to **https://api.simplegoals.co/projects/new** and get an **appId** that you can use. It's might be useful to get new **appId** for each of your environments: test, staging, production and so on. - Add new options to `SimpleGoals.init()` call: ```js SimpleGoals.init({ goals: goals, useCloudStorage: true, // Required for CloudStorage appId: "yourAppId", // appId that you just got user: { // Information about User uid: "magician#3123936", // Optional, but either UID or email should be present email: "harry@hogwarts.com", // Optional, but either UID or email should be present name: "Harry Potter" // Optional } }) ``` UID is any unique identifier for a user. Either UID or email should be present for user params. *Note: It works only for logged in users* *Note: When users first time converts from a guest to a logged in user, all their achievements are saved in CloudStorage* # Development First of all, thank you for making SimpleGoals better! All source files are in `src` folder. To install all dependecies run: ```shell npm install // or yarn install ``` To run local environment run: ```shell npm run playground // or yarn playground ``` Playground will be available at `http://localhost:8080` To build production-ready bundle run: ```shell npm run build // or yarn build ``` # License This project is licensed under [MIT license](https://opensource.org/licenses/MIT).