2
0
Fork 0
es5-ff-spa-loader/README.md
2016-01-22 15:44:43 +01:00

209 lines
7.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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,cssData
* Caching backends: localStorage,webSqlDB,sqllite,none
* Server url question ui.
* Loader error ui.
* Build-in Cordova booting.
* Build-in AngularJS 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';
FFSpaLoader.options.server.assets = '/api/path/to/spa/client/resources';
FFSpaLoader.start();
### Usage Angular
FFSpaLoader.options.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() {
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": "cssData",
"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;
* debug.enable = Enable debug output. (default: false)
* debug.handler = Prints/log debug message. (default: console.log)
* debug.prefix = Debug message prefix. (default: 'FFSpaLoader.')
* error.handler = The error handler. (default: internal error handler ui)
* error.title = The error title. (default: 'Loader ');
* error.style = The error ui css style. (default: red error)
* 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)
* server.url = The server url like 'https://myhost', when null the user will get promted to input it. (default: null)
* 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'})
* 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.style = The question ui css style. (default: blue input)
* 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.')
* 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.cssData = The cache backend for for cssData, null is auto select,false is disable. (default: null)
## 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 server.url and server.assets data.
* js = Store application javascript data.
* css = Stores application css data.
* cssData = 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.cssData = false;
if (FFSpaLoader.factory.detect.localStorage()) {
FFSpaLoader.options.cache.css = FFSpaLoader.factory.cache.localStorage();
FFSpaLoader.options.cache.cssData = 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 fully working nodejs example application in the example folder.
## Tested Browsers
* Chromium 46
* Iceweasel 43
* Opera 12 Presto
* IE 11 Edge
* Android 5 in Cordova
## Todo
* test in production
* Server header check support
* Add table+instance websql options so it can also be used in application code.
* Split assets per type so do js first then boot then css + cssData.
* Move css to file ?
* Add more tests
* css: set tag.media = 'only you';
* css: add media in resouces
* Add in browser tests
## 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.1.1
* Moved websql delete timeout to cleanServerlUrl for faster boot.
* Added more jsdoc
### 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.