0.1.1 • Published 6 years ago

@dinalt/plan-b v0.1.1

Weekly downloads
1
License
MIT
Repository
github
Last release
6 years ago

plan-b

Simple javascript lib for executing tasks on web pages

Installation

$ npm i --save @dinalt/plan-b

Usage

Node:

var planB = require("@dinalt/plan-b")

document.addEventListener("DOMContentLoaded", function () {
    planB.plan([
        //This will be executed once
        {
            name: "execute_once",
            actions: [function () { console.log("Once") }],
            triggers: [{ on: "init", plan: "once" }],
        },
        //This will be executed each ten seconds after thirty seconds timeout
        {
            name: "execute_with_timeout_and_repeat",
            actions: [function () { console.log("Timeout and repeat") }],
            triggers: [{ on: "init", timeout: 30000, repeat: 10000 }],
        },
        //This will be executed if local storage do not contains "form_submitted" value. 
        //If task executed, next try will be in four weeks.
        {
            name: "execute_with_plan_and_check",
            actions: [function () { console.log("Execute each four week with check") }],
            triggers: [{
                on: "init",
                plan: [4, "week"], //Array may be replaced by a "week" literal, if first element is 1
                check: function () { return !localStorage.getItem("form_submitted") },
            }],
        },
    ]);

    //Prints last execution date of "execute_once" task into console
    console.log(planB.lastExecuted("execute_once"));
});

TypeScript:

import { plan, lastExecuted } from "@dinalt/plan-b";

plan([
    ...
]);

console.log(lastExecuted("..."));

Browser <script> tag:

Compiled version of the library could be found in "dist" directory of root package folder.

Explanation

Task object

The plan function takes and array of task objects as an argument. Each task must contain three required properties:

  • name (string) - Identifier of a task (should be unique)
  • actions (array of functions) - an array of callbacks, which will be executed when task fires
  • triggers (array of "trigger" objects)

Trigger object

The trigger object contains one required property:

  • on (string) - trigger type, it only can have "init" value in current version (v0.1)

It also could contains four optional properties:

  • timeout number - timeout in milliseconds (see example)
  • repeat number - repeat interval in milliseconds (see example)
  • plan (string | [number, string]) - execution plan
  • check (() => boolean) - a callback which will be executed before each task run, to determine whether task should be executed or not (may take optional string argument with task name)

Plan property

The plan property of trigger may contains several value types:

  • "once" - string value (task will be executed once)
  • number, string - an array, where first element contains amount of time intervals, specified by second element (second element can take one of "second", "minute", "hour", "day", "week" values) (see example)
  • one of "second", "minute", "hour", "day", "week" values (short form of previous version, where first element of array is set to 1) (see example)

How is it works

When planB.plan(tasks) function is called, library checks execution triggers of each task. If trigger condition is match, task actions will be planned for execution by setTimeout js function. If timeout property of trigger is set, it will be passed as second argument to setTimeout. For handling trigger.repeat property, setInterval is used.

Conditions of trigger.plan property are checked only once per planB.plan execution. Let's imagine, you use DOMContentLoaded js event for handling task execution and trigger.plan property is set to "minute". It will be necessary for user to reload the page to start the task, even if it has already been a minute since the last launch.

The trigger.check fires before each task launch.

For storing task last execution date and time, browser local store (or cookies, if local store is unsupported) are used.