_ ____ _ _ __ ____ ___
| | _ \ / \ | |/ / __ _|___ \ / _ \
_ | | |_) / _ \ | ' / \ \ / / __) || | | |
| |_| | __/ ___ \| . \ \ V / / __/ | |_| |
\___/|_| /_/ \_\_|\_\ \_/ |_____(_)___/
JPAK is a multi-use Javascript Package System, developed for loading several files at once with only one package.
JPAK can be used for many things. From game assets to webpage assets. It makes easier to preload all images and resources that you need for website.
- Javascript Loader / Packer for 2.0 EXT (Both NodeJS and Browser)
- Python Packer for 1.0
- JPAK 1.0 Specification file
- JPAK 2.0 Extended Specification file
- Load progress event
- Get file as Base64
- Get file as HTML Data URI (for hide from Network Requests)
- GZIP Decompress Support, forked from https://github.com/jsxgraph/jsxgraph/
- Simple C# Windows Tool for Exploring and Export Content from JPAK Files (v1.0)
- C++ Extension
- Partial Loading of data
- Add option to compress files on packing.
- More stuff on JPAK Explorer for Windows
- JPAK Explorer for Linux
- Documents for C#, C++
- Zlib Decompress for C++
- C++ Library for JPAK 2.0 EXT
JPAK is made to be simple. You can use for any file you want. First, you need to create a JPAK package.
You can use the python script called packer.py at tools
folder. The sintax is simple, just create a folder and thrown what you want on that package inside it.
python packer1.py PackageFolder
This will generate a file called PackageFolder.jpak
, with that we can try it at web.
For creating a JMS package you should use the extpacker.js
inside the tools folder like below:
./extpacker.js package.jms volume.jds folder/*
This should generate a metadata file called package.jms
, a data storage volume called volume.jds
using contents of folder
. Everytime you load this package, you will load the package.jms
file, that will point out where are the volumes and which files are inside.
You can append data to a JMS by running the same command again with another volume:
./extpacker.js package.jms volume2.jds folder2/*
When implementing the new Web Loader (for both JPAK1 and JMS) we decided to change the way it works to be more usefull and work for both files. This broke the compatibility with the older JPAK Loader, so if you are upgrading it, you will need to change how it works.
First you need to initialize a loader by doing:
var myJpakLoader = new JPAK.Loader({"file" : "packtest.jms"}); // you can do the same thing for a jpak file just by replacing the file name.
Then you can make the loader start loading metadata and filling the object and use a promise to get the callback when its done.
myJpakLoader.load().then(function() {
// Called when its loaded
});
So after it is loaded, you can load files in the old loader fashion:
myJpakLoader.load().then(function() {
// Called when its loaded
myJpakLoader.getFileURL("/img/python-logo-official.png", "image/png").then(function(data) {
$("body").append('<BR>/img/python-logo-official.png: <BR><BR> <img src="'+data+'">');
console.log("Loaded /img/python-logo-official.png");
});
});
You have about the same calls as the older loader, but in a promise way.
myJpakLoader.getFile(path, type).then(function (data) {
// data is a BLOB
});
Arguments:
path
-> That is the relative path to the package. If the file before packaging was atPackageFolder/test.jpg
here you would put/test.jpg
type
-> The mimetype of the file. Used in construction of the blob. Defaults toapplication/octet-stream
myJpakLoader.getFileURL(path, type).then(function(url) {
// url is a URL to local blob content
});
So basicly, for images you can do something like:
myJpakLoader.getFileURL("/test.jpg", "image/jpeg").then(function(url) {
$("body").append('<img src="'+url+'">');
});
and you can do for HTML (text/plain) for example:
myJpakLoader.getFile("/test.html", "text/html").then(function(data) {
var reader = new FileReader();
reader.onloadend = function(evt) {
$("body").append('<BR>/test.html:<BR><BR>'+evt.target.result);
};
reader.readAsText(data);
});
There is a already minified version at dist/jpak.min.js
but if you want to compile by yourself or run the examples locally, you can do:
npm install
npm install -g bower
npm install -g grunt-cli
bower install
sudo grunt dev
This should setup a local enviroment for testing the JPAK Library. Then you can open in your browser http://localhost:8082/test/
to see the examples.
If you just want to build it, do the same as before, but instead sudo grunt dev
do:
grunt concat uglify
This will generate the minified version jpak.min.js
and the non-minified version jpak.js
.
A C# Version of JPAK Tool is available. There is many things todo in there, but it works for the JPAK Explorer. The images used in thumbnail is from Crystal Clear, can be found at http://commons.wikimedia.org/wiki/Crystal_Clear and its licensed under LGPL
You can check the folder test
for see a working simple example that loads an image
, javascript
and a HTML
file to the page.