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

es5-ff-spa-loader

v0.3.0

Published

Javascript Single Page Application Loader

Downloads

9

Readme

es5-ff-spa-loader

A javascript library providing server defined loading of assets for a single page application.

Installation

npm --save install es5-ff-spa-loader

Then use the dist/es5-ff-spa-loader.min.js script inline in the index.

Features

  • Assets caching for offline use.
  • Assets hashing for fast syncing.
  • Assets types: js,css,dss
  • Caching backends: localStorage,webSqlDB,sqllite,none
  • Multi server/version support by url question ui.
  • Progress indicator ui.
  • Loader error ui.
  • No external dependencies.
  • Technology agnostic booting.
  • Build-in Cordova booting.
  • Build-in AngularJS-1 booting.

Usage

Usage Multi Server (Minimal)

FFSpaLoader.options.server.assets = '/api/path/to/spa/client/resources';
FFSpaLoader.start();

Usage Single Server

FFSpaLoader.options.server.url = 'http://myserver'; // or window.location.href;
FFSpaLoader.options.server.assets = '/api/path/to/spa/client/resources';
FFSpaLoader.start();

Usage Angular

FFSpaLoader.options.boot.debug.enable = true;
FFSpaLoader.options.boot.angular.modules.push('exampleUI');
FFSpaLoader.options.server.url = 'http://myserver';
FFSpaLoader.options.server.assets = '/api/path/to/spa/client/resources';
FFSpaLoader.start(function(err) {
	console.log('FFExample.boot done');
}); 

Assets format

{
	"data": {
		"resources": [
		{
			"url": "/static/js/some-asset.js",
			"type": "js",
			"hash": ​-164319899
		},
		{
			"url": "/static/css/some-asset.css",
			"type": "css",
			"hash": ​1391550981
		},
		{
			"url": "/static/css/more-asset-data.css",
			"type": "dss",
			"hash": ​1371811412
		},
    ]
}

The hash key is required as only on hash change the resource will be downloaded again, so multiple small files makes updates faster.

Options

The available FFSpaLoader.options.* values;

  • boot.debug.enable = Enable debug output. (default: false)
  • boot.debug.handler = Prints/log debug message. (default: console.log)
  • boot.debug.prefix = Debug message prefix. (default: 'FFSpaLoader.')
  • boot.error.enable = Enables the ui error handler. (default: true)
  • boot.error.title = The error title. (default: 'Loader ');
  • boot.cordova.enable = Use deviceready event to boot when cordova is detected. (default: true)
  • boot.cordova.timeout = Boot after (if<0=no-)timeout when deviceready event is not received. (default: -1)
  • boot.cordova.flag = The window flag which is set when cordova is booted. (default: 'FFCordovaDevice')
  • boot.angular.enable = Auto bootstrap angular modules. (default: true)
  • boot.angular.modules = The angular modules to boot. (default: empty)
  • boot.cleanup.enable = Auto cleanup the loader html tags. (default: true)
  • boot.cleanup.timeout = Cleanup after timeout(in ms) so css effects are done. (default: 1000)
  • boot.cleanup.tags = The array of tag ids to remove. (default: empty)
  • server.url = The server url like 'https://myhost', when null the user will get promted to input it. (default: null)
  • server.depath = Strip this path from the server.url needed when the ui has prefix from application root.
  • server.assets = The server path to the assets resources definition file, is required (default: null)
  • server.timeout = The timeout to download the server resources. (default: 4096)
  • server.flag = The window flag which is set when the server.url is know. (default: 'FFServerUrl')
  • server.header.request = An key value object with the request headers. (default: {'X-FFSpaLoader': 'sync'})
  • server.header.response = An key value object with the required response headers. (default: {})
  • question.transport = The transport to prefix the server.url with. (default: 'http://')
  • question.title = The question ui title. (default: 'Server')
  • question.submit = The start button text. (default: 'Start')
  • question.text = The question ui text. (default: 'Please provide the server name;')
  • question.size = The question ui input size. (default: 32)
  • question.validate.min.value = The minimal hostname length, false is disabled (default: 3)
  • question.validate.min.message = The error message (default: 'Server name is to short.')
  • question.validate.max.value = The maximal hostname length, false is disabled (default: 255)
  • question.validate.max.message =The error message (default: 'Server name is to long.')
  • question.validate.regex.value = The regex to validate the hostname, false is disabled. (default: '^([a-zA-Z0-9.:])*$')
  • question.validate.regex.message = The error message (default: 'Server name is invalid.')
  • loader.title = The loader title (default: 'Loading Application')
  • loader.footer = The loader footer (default: '© FFSpaLoader')
  • loader.await = The timeout in ms before the loader displays. (default: 250)
  • loader.progres.items.enable = Enables the per item progres. (default: true)
  • loader.progres.items.size = Shorten longer urls to this size. (default: 50)
  • loader.progres.bar.enable = Enables the progres bar. (default: true)
  • loader.progres.bar.percentage = Print percentage's in bar. (default: true)
  • cache.meta = The cache backend for the meta information(server.url+content), null is auto select,false is disable. (default: null)
  • cache.js = The cache backend for for js, null is auto select,false is disable. (default: null)
  • cache.css = The cache backend for for css, null is auto select,false is disable. (default: null)
  • cache.dss = The cache backend for for dss, null is auto select,false is disable. (default: null)

Functions

The functions in FFSpaLoader.*;

  • start(cb) = Starts loading your application, optional function argument can be used for done and/or error callback.
  • clearServerUrl(cb) = Clears the cached server url so after reload user get promted again.
  • clearCache(cb) = Clears the cached values so after reload all assets get refetched.

Factory

The available FFSpaLoader.factory.* functions;

  • detect.localStorage() = Checks is localStorage is working.
  • detect.openDatabase() = Checks if openDatabase is defined.
  • detect.sqlitePlugin() = Checks if sqlitePlugin is defined.
  • detect.cordova() = Checks if cordova is defined.
  • detect.cordovaDevice() = Checks if the options.boot.cordova.flag is defined in the window.(NOTE: is always false before calling start();)
  • cache.localStorage() = Creates an localStorage service.
  • cache.websql(opt) = Creates an websql service.

Cache Types

The cache types in FFSpaLoader.options.cache.* store different types data;

  • meta = Stores the server url and server assets.
  • js = Store application javascript data.
  • css = Stores application css data.
  • dss = Stores application css large data like base64 fonts/svg/etc.

Cache Config

Per default all cache types are auto selected in the following order;

  • detect.sqlitePlugin() and detect.cordovaDevice()
  • detect.openDatabase()
  • detect.localStorage()
  • none

More custom schemas are possible like; (todo: needs testing)

FFSpaLoader.options.cache.meta = false;
FFSpaLoader.options.cache.js = false;
FFSpaLoader.options.cache.css = false;
FFSpaLoader.options.cache.dss = false; 

if (FFSpaLoader.factory.detect.localStorage()) {
	FFSpaLoader.options.cache.css = FFSpaLoader.factory.cache.localStorage();
	FFSpaLoader.options.cache.dss = FFSpaLoader.factory.cache.localStorage();
}
FFSpaLoader.options.server.url = 'http://myserver';
FFSpaLoader.options.server.assets = '/api/path/to/spa/client/resources';
FFSpaLoader.start();

Example Application

There is a nodejs example application in the example folder;

  • git clone https://bitbucket.org/im_ik/es5-ff-spa-loader.git
  • cd es5-ff-spa-loader
  • npm install
  • npm start

For the mobile example install+build steps are;

  • export ANDROID_HOME=/my/android-sdk/path
  • npm install cordova -g
  • cd es5-ff-spa-loader
  • cd example
  • cd app_mobile
  • cordova platform add android
  • cordova build

Tested Browsers

  • Chromium 46
  • Iceweasel 43
  • Firefox Aurora 45
  • Opera 12 Presto
  • IE 11 Edge
  • Android 5.1.1 in Cordova + Site
  • Android 4.4.4 in Cordova + Site
  • Android 4.2.2 in Cordova + Site

Todo

  • test in production
  • Add instance websql options so it can also be used in application code.
  • Split assets per type so do js first then boot then css + dss.
  • Add more tests
  • css: set tag.media = 'only you';
  • css: add media in resouces
  • Add in browser tests
  • cache limits for soft fallback to injecting ?

Contributing

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code.

Release History

0.3.0

  • Fixed clearServerUrl() to also clean the cached server resources json.
  • Auto clean option.server.url from # and ? endings for: FFSpaLoader.options.server.url = window.location.href;
  • Added server.depath option to strip the ui-prefix from the server.url.
  • Added auto resetting server.url when is file:// for "Page save as" feature.
  • Fixed askUrl to accept host and context path with auto clean/depathing.
  • Fixed duplicate starts on askUrl submit multiple clicks.
  • Switch to karma + jasmine unit tests.
  • Fixed define.amd module constructor.
  • Integrated example package.json to main file.
  • Removed options.error.[handler|title].
  • Added options.boot.error.[enable|title].
  • start(cb) function callback now includes error.
  • Moved options.debug.* to options.boot.debug.*.
  • Fixed example page/app offline use. (safe page as(html only))

0.2.1

  • Fixed clearCache method to added json header.
  • Added url to non 200 http status error message.
  • Added boot.cleanup.tags options.

0.2.0

  • Moved error.style and question.style to css file.
  • Changed dist with extra css/js folder.
  • Added loader progress bar.
  • refined css so question/loader/error are equal.
  • Added response header check support.
  • Added json accept header on assets resources list.
  • Added cb errors on assets resources json parse + result obj.
  • Renamed cssData type to dss for enum easiness.
  • Added unknown resource type error.

0.1.1

  • Moved websql delete timeout to cleanServerlUrl for faster boot.
  • Fixed websql db-size and db-name for older androids.
  • Added more jsdoc.
  • Added question.size option.
  • Changed websql option openDatabase to returning open function.
  • Fixed sqlitePlugin open function was 2x typo on openDatabase.
  • Added websql table option. (defaults to 'cache_store')
  • Added clearCache function.
  • Fixed removed question div on loader error.
  • Updated example and removed it from npm.
  • Added cordova app with example.

0.1.0

  • Moved options.server.question to options.question.
  • Added question.validate.[min|max|regex].value|message options.
  • Strip question value to hostname+port before use and validating.
  • Allow user upgrade to https in question input from default of transport option.
  • Added server request headers option.
  • Updated css of question and error ui.
  • Fixed cordova booting.

0.0.4

  • Added auto cache clean code.
  • Disable cordova timeout per default.
  • Remove unused mobileAgent detect.
  • Fixed cached resources injection order.

0.0.3

  • Fixed example script path.
  • Fixed example size.
  • Initial release.