Giter VIP home page Giter VIP logo

expression_rules_builder's Introduction

Expression Rules Builder

Expression Rules Builder

Install

With npm

npm i expression-rules-builder

With yarn

yarn add expression-rules-builder

Usage

<div id="expressions-container"></div>
<div id="rules-container"></div>
<button id="btnGetMyRules">Get Rules</button>
<textarea id="myRules"></textarea>
import ExpressionRulesBuilder from "expression-rules-builder";

var erb = new ExpressionRulesBuilder({
  expressionsContainer: "#expressions-container",
  rulesContainer: "#rules-container",
  fields: [
    {
      name: "users",
      placeholder: "Select a user",
      type: "list",
      customClass: "my-select-class",
      values: [
        ["Bruno", "BRUNO"],
        ["José", "JOSE"],
      ],
    },
    {
      name: "roles",
      placeholder: "Select a role",
      customClass: "my-select-class",
      type: "list",
      values: [
        ["Admin", "ADMIN"],
        ["Client", "CLIENT"],
      ],
    },
    {
      name: "groups",
      placeholder: "Select a group",
      customClass: "my-select-class",
      type: "list",
      values: [
        ["Diamond", "DIAMOND"],
        ["Gold", "GOLD"],
        ["Silver", "SILVER"],
      ],
    },
    {
      name: "price",
      placeholder: "0,00",
      customClass: "my-input-class",
      type: "text",
    },
    {
      name: "percent",
      placeholder: "0",
      customClass: "my-input-class",
      type: "text",
    },
  ],
  expressions: [
    { name: "user", text: "the user {users}" },
    {
      name: "user_role",
      text: "the user {users} with role {roles}",
    },
    { name: "group", text: "the user of group {groups}" },
    { name: "price", text: "with price ${price}" },
    { name: "percent", text: "with {percent}% percent" },
  ],
  rules: [
    { expression: "user", fields: { users: "JOSE" } },
    {
      expression: "user_role",
      fields: { users: "BRUNO", roles: "ADMIN" },
    },
    { expression: "price", fields: { price: "50" } },
  ],
});

erb.beforeAddExpression(function (expressionName) {
  if (confirm("Are you sure?") == false) {
    console.log(`stopped by user!`);
    return false;
  }
});
erb.afterAddExpression(function (expressionName) {
  console.log(`Expression ${expressionName} added`);
});
erb.beforeRemoveRule(function (expressionName) {
  if (confirm("Are you sure?") == false) {
    console.log(`stopped by user!`);
    return false;
  }
});
erb.afterRemoveRule(function (expressionName) {
  console.log(`Rule ${expressionName} removed`);
});

document.getElementById("btnGetMyRules").addEventListener("click", (ev) => {
  var values = erb.getRules();
  document.getElementById("myRules").value = JSON.stringify(
    values,
    undefined,
    4
  );
});

Style

/* Expression Item */
div.erb-expression-item {
}
/* Selected Expression Item (expressions added to rules) */
div.erb-expression-item.selected {
}
/* Rule Item */
div.erb-rule-item {
}
/* Wrapper element of field type LIST <select> */
span.erb-type-list {
}
/* Wrapper element of field type TEXT <input> */
span.erb-type-text {
}
/* Wrapper element of any field (FIELD_NAME = field you named)
js:  fields: [{name: "fieldName", ...}]
css: span.erb-field-fieldName { ... }
*/
span.erb-field-FIELD_NAME {
}
/* Button add */
button.erb-add-rule {
}
/* Button remove */
button.erb-del-rule {
}
/* Custom field classes
js:  fields: [{..., customClass: "my-custom-class", ...}]
css: .my-custom-class { ... }
*/
.my-custom-class {
}

Demo

https://brunoporto.github.io/expression_rules_builder/

Development

To generate dist package:

yarn run build

run index.html to development http://localhost:9000:

yarn run dev

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.