npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@arekx/data-flow-js

v1.1.13

Published

Data binding and handling and rendering JS library

Downloads

18

Readme

DataFlowJS

DataFlow JS data binding JS library. It is used to bind multiple HTML elements to a single JSON data object. The idea is to track all changes and to allow user not to worry about updating all places one a single piece of data is changed but to move all of the concerns of rendering to their respective elements to make development easier to handle and debug.

This library is not meant to be a replacement for component management libraries like Angular, VueJS and React. It is meant to be a simple small library which will allow you to handle data better and it can be together with those component libraries (with some additional implementation of course).

You can also use this to get benefits of one-way databinding (two-way databinding is also possible) without having to import the whole library.

If you are developing complex SPA app with routing on the client side with lots of components and it needs to be JS Client App on frontend with REST backend then this probably is not for you. It can be used for this but you will probably have more success using the abovementioned libraries.

If you have a server-side rendered web app which needs to implement a lot of JS interactivity then this is probably a perfect solution to handle lots of complexity brought out by manipulating data.

Simple Usage Example


<span class="my-element"></span>
<span class="my-element"></span>
<span id="nested"></span>

<script src="data-flow.js"></script>
<script>
var flow = DataFlow({
   myBoundData: 'my data',
   nested: {
      data: {
         works: 'too'
      }
   }
}); // new DataFlow(data)" also works if you need to use that.

// Bind all changes to myBoundData to all elements of class my-element
flow.bind({to: '.my-element', path: 'myBoundData'});
flow.bind({to: '#nested', as: 'html', path: 'nested.data.works'});

// All elements of .my-element are not showing my another data
flow.set("myBoundData", "my another data");

// span with id nested now has bold text also works as contents.
flow.set('nested.data.works', "<strong>also works</strong>");
</script>

Installation

Installation is done using npm - npm install --save @arekx/data-flow-js.

Examples

Examples are in html files examples folder.

Building

Run npm install and then run npm run build.

Testing

Run npm install and then npm test to run all Jest tests.

Reference

DataFlow

DataFlow is the main usage function which binds the data json as a DataSource.

When invoking DataFlow({some: 'data'}) it will return instance of DataSource with some additional functions like bind and having access to renderer to configure rendering.

Even though DataFlow implements default renderers for text, html and a function() {} callback, you can pass your own renderer or set a static renderer.

DataFlow accepts two a parameters: object|DataFlow.DataSource and DataFlow.Renderer.

First parameter can be either object (which will get turned to a datasource) or DataFlow.DataSource instance to which the bindings will be set. If DataFlow.Renderer is not defined then new one will be created.

DataFlow returns passed or new instance of DataFlow.DataSource with added bind function and added renderer.

DataFlow.DataSource Reference

| method | parameters | description | | ------------- | ------------- | ------------- | | constructor | data - JSON object of data | Creates and instrantiantes new DataSource. | | set | name - key which will be set (dot notation is supported so that you can set object.key1.key2.key3, non-existing objects will be created), data - data which will be set to that key | Sets data to a specified name and runs updates. | | get | name - key from which data will be returned (dot notation is supported so that you can get object.key1.key2.key3), defaultValue - default value which will be returned if key is not found | Returns value from key or default value | | run | callback - function of type function(data) { } where user can set any of the data directly or change it. After that function finishes, update will be called. | Runs direct update on the specified data in the datasource and updates all relevant bindings. | | update | None. | Runs update and updates all relevant bindings. | | unbind | None. | Unbinds datasource from data, this will effectively unbind all dataflow bindings as well. | | bindHandler | handler - handler which will be invoked on all changes. | Binds handler for any of the changes to datasource. Callback will be invoked with this set to the originating datasource. | | unbindHandler | handler - handler which will be unbound from all changes | Unbinds handler from all changes to datasource. |

DataFlow.Renderer Reference

| method | parameters | description | | ------------- | ------------- | ------------- | | constructor | None | Creates and instantiates new Renderer. | | render | boundElement instance of DataFlow.BoundElement when calling bind or DataFlow.bind. | Renders bound element based on their configuration | | set | name - renderer name which can be used in as, callback - renderer callback of type function(boundElement, forElement) {} which will be called | Sets renderer type which can be set to as when calling bind or DataFlow.bind. If existing renderer is specified it will be overwritten. | | runOnBoundElement | callback - callback which will be ran of type function(boundElement, forElement) {}, boundElement - instance of DataFlow.BoundElement on which the callback will be called upon. | Runs callback on bound element where it's called based on whether element has multiple element or a single element. |

Also you can set static renderers which will be available on all new instances of DataFlow.Renderer, by calling: Renderer.setStaticRenderer(rendererName, callback) signature is the same as DataFlow.Renderer.set

DataFlow.BoundElement Reference

DataFlow's BoundElement is instantiated when bind function is called, it's an instance which manages updates to an element defined by a selector.

| method | parameters | description | | ------------- | ------------- | ------------- | | constructor | config - JSON object (refer below for config) | Creates and instantiates new BoundElement. | | getValue | (Optional) defaultValue - Default value which will be returned if original value does not exist. | Returns value or default value if key defined by config.path is not in datasource. | | setValue | value - value which will be set. | Sets value in datasource defined by key set in config.path, after which this element will be updated. | | run | callback - callback of type function(value) {} value which will be called. | Runs callback which allows you to update value got from datasource by path defined by config.path after which DataSource.update() is called to notify datasource of the changes. | | update | None. | Runs update to re-render the changes. | | unbind | None. | Unbinds element from listening to any changes in the datasource. |

BoundElement configuration

| config | type | default | description | | ------------- | ------------- | ------------- | ------------- | | to | String|Element|Mixed | - | Selector (if String) which will get the HTMLElement or any mixed type which will be used for rendering. | | multiple | boolean | - (will be set from number of retrieved elements by default) | Whether or not element is considered multiple elements. | | updateDisabled | boolean | false | Whether or not to update element on changes from datasource. | | renderer | DataFlow.Renderer | - | Renderer which will be used to render elements. | | dataSource | DataFlow.DataSource | - | DataSource which will be used read/set values. | | path | String | - | Key which will be used to get values from DataSource, can be dot-notation. | | as | String|Callback | text | Renderer which will be used. If String then renderer set from that string (by calling Renderer.set or Renderer.setStaticRenderer) from config will be used. | | onBind | Callback(BoundElement) with (Element from BoundElement as this) | (noop function) | Function which will be called when data is bound to datasource. | | onUpdate | Callback(Value, BoundElement) with (Element from BoundElement as this) | (noop function) | Function which will be called when data from datasource is updated. This will be called after onBind once to render the initial data. | | onAfterRender | Callback(BoundElement) with (Element from BoundElement as this) | (noop function) | Function which will be called after data is rendered to element. | | onUnbind | Callback(BoundElement) with (Element from BoundElement as this) | (noop function) | Function which will be called when unbind is called. |