diff --git a/examples/fgallery/README.md b/examples/fgallery/README.md new file mode 100644 index 0000000..0bf4513 --- /dev/null +++ b/examples/fgallery/README.md @@ -0,0 +1,119 @@ +# Fgallery - Static image gallery + +Fgallery comprises of some perl code, that can generate an image gallery built completely staticly with no server side code. This can then be easily hosted using ipfs. + +http://www.thregr.org/~wavexx/software/fgallery/ + +## Dependencies + +Fgallery reqires a few dependencies to work, on Ubuntu 14.04 I needed: + +``` +Perl, with the following modules (which can be installed from CPAN): + Image::ExifTool + JSON + +imagemagick +liblcms2-utils +exiftran +``` + +## Building the gallery + +Fistly, you'll need to prepare a directory with your images in, you can either make your own or use the demo one provided. Make a note of where it's located on the file system. + +The latest version of fgallery can be downloaded from their website, unzip the archive and change directory into the extracted folder. + +Run: + +``` +./fgallery /demo /gallery +``` + +You'll need to give the full path to where you placed the demo folder. + +Fgallery will then start processing images and building all the static files in the output directory: + +``` +reading completed +processing completed +generating archive... +completed +``` + +## Hosting with IPFS + +Putting the images online is done with just one command: + +``` +ipfs add -r /gallery +``` + +Obviously replacing /output/location with the location you asked fgallery to output the files to. + +This will add all of the files: + +``` +added QmYby7AidsKyM29z5TgVH6CGFkj5k9mauzJSSdRXmqoqXZ gallery/back.png +added Qma6c2Cz4Wp9ZsdtMUxzmc1rfTN1QewSdDkjdkqYkoYKJZ gallery/blurs/01O0FMD.jpg +added QmemKBx9awiTz6GubFuW6dQ3M7RnM7wiXaN6sA3NVXEAHM gallery/blurs/03Kj6JO.jpg +added QmZxRcxLzEvMiqEPxXECz8d2XdwCL9KvS9zKjVYHkw4t3P gallery/blurs/04CVyjY.jpg +added QmSTHdib78JDtPyWR498CbYnYWExVJLzD1298utjgMZkJj gallery/blurs/05vYu5k.jpg +added QmWKJo49HxhFnvTEW8r9D8vV7ezytn2n3u9XR2QhsUNAe2 gallery/blurs/06YYa0i.jpg +added Qmbc9U7yJKVRGWarSzDqFsFPZ5U4oFr3rnu7CMzxPSLj9R gallery/blurs/06uDGyB.jpg +added QmU3ski5amcbK1wQZVLHAhYpJRyv1vWfwVEfcJB5iRrzQ2 gallery/blurs/07v5H70.jpg +added QmWFVgR6i81FUXTS9HxppL8y1hy4DmqyS3Xse2uiGLmosj gallery/blurs/07vVDJI.jpg +added QmVmZBm5j6HZcAdYnPNJaSFL1FRxkyPkzJ7ixno1mGUNi4 gallery/blurs/097mGzX.jpg +added QmQMbgdCgNmSXJSoqm46nDq5QUjAduZ2RRRhgeB8pFnfmU gallery/blurs/0AKuTh0.jpg +added QmYjMJSrg3eWLEkH94Js2i8EgHWEgbYFV775BnPtPWMkdf gallery/blurs/GdRkiQe.jpg +added QmWhZjvDXM9W4Es2ZFeqYUSZgfB7B5URxCgXHcnjs2d9gk gallery/blurs +added QmPGmwDDBvbh3WwdPmwomBaVkRPcwKxjBqhBwuixoKQ5Ax gallery/cut-left.png +added QmUTzLj5XovXtrVKxNCEV2gewn3uHKuUt2CvfBVMn3aS6F gallery/cut-mov.png +added Qme591h16sr4d1GAd9DTQj2MzS7SGCDddaTjW9X8pmtdQP gallery/cut-right.png +added Qmdh4iSEzJ4JJ8TxpJqMWEFrEJGTXnibMycjFEi5fA2ga2 gallery/cut-top.png +added QmNZhsytZxPJYkYLFsR7p1xgusaDUq4XqPo7JxVjeokMAA gallery/data.json +added Qmc6QSF5vfAKAvRUmeozG39BnomLcjyGCcREbRFCxCGzbx gallery/download.png +added QmVwtBtRCngQJrPcFeq3DSa96FyLqBi7bfMQcSKxcDqLhU gallery/eye.png +added QmNbsd4SMzxSRNUm9J3a5sgBJg8H3tJUGU5bjJVRKkYugD gallery/files/album.zip +added Qma7ZL21cVBTYpMPFx9Z3TKiX3FWgwGog6LqWV8TzMXdrz gallery/files +added QmYksDd1jEtz6kcYb2A7WXiHd2e9iNjtRWhytbQ9pS9SeU gallery/imgs/01O0FMD.jpg +added QmTtYSk393PnukPUGtJtQiiT88ToMsq1rTi6DmZaT4NNiT gallery/imgs/03Kj6JO.jpg +added QmTSJAEzzrTxZc7QCYKquTnxYy93mMeBcxtzxFeVFfZfUU gallery/imgs/04CVyjY.jpg +added QmSbKdZoQfuuXCfkcvJHLVJEAxSf3e3ynpiB9tERJ4otgW gallery/imgs/05vYu5k.jpg +added Qme3prmgJwo3Y2Ao8H1XEcaRq5ZGCgySR4xskJJXBXsfty gallery/imgs/06YYa0i.jpg +added QmQZZjigYvdWdCigVh8icbRNiYueihHHRrVTc3A6RBQpx9 gallery/imgs/06uDGyB.jpg +added Qmbr6nyNEQR3STZ1WFg73Qh7HjjqQfQkJMeBaqiu1BzezW gallery/imgs/07v5H70.jpg +added QmcBkLJWpsG75yZbQnmcKrS2gvNKho44R9rS5mKuEi9uqo gallery/imgs/07vVDJI.jpg +added QmceXN5f82R5Rd8MCvhSUgR8ZA4SgNBSya1vg3hByVKwHu gallery/imgs/097mGzX.jpg +added QmQh7L4vTGGPuV7CbHVBgx7S6Y173oAUXDgE6bVTa6mdjW gallery/imgs/0AKuTh0.jpg +added QmQrryUqtM4UYYVLXiKbhyxBy9i75p46tHMHABrBQDqPWf gallery/imgs/GdRkiQe.jpg +added QmTQzSHt6B92KPzhtdtGE6DP7dvVJzCP2PuRrxZXJeekPX gallery/imgs +added QmUpYBMVqDrhfBCK2ghHjoaX62fQtgrrCxfabaAwYjeDSe gallery/index.css +added QmQeGFPJ6FrjG4GsiTZswZJac7dmLo6G21x9zoFZ1naczr gallery/index.html +added QmRVVLVVcvQnr4mwiNU266SQ49z3BosaiumjT9aydL54HC gallery/index.js +added QmQ1ERFyV2MxhFC5ng1ttVdg86dafivgQyLkwtWbmyHKjV gallery/left.png +added QmQKrKStaD7ijv2A4LP5weMwyXn9mZ6FJEpd4kax85W69h gallery/mootools-core-1.4.js +added Qmd9w91XMVfjHud9mTtGaAKJsxwCEZB2GaoVUA9j7s2oJz gallery/mootools-idle.js +added QmcJ7TBvQHCeQgBkJnidzZWoWDyDErq6BtrVCTAyCsmy3Y gallery/mootools-mooswipe.js +added QmWtHAixSGya2jToEWvAxLeKhiT1dkcXQr6kg7f6nPFdSq gallery/mootools-more-1.4.js +added QmTq42T1LBXiubNNEiGN8howjGKFWYPGUuiZQU68ffqvaq gallery/noise.png +added QmRziDBMHQZybCWF5s7kbe8MdQxugbmXR1WCgaLLGya4jb gallery/right.png +added QmQvs1n39aE9Ey7fFiBkKfNyJvST5LqTjMSUz9MWvKPMeb gallery/throbber.gif +added QmedcnTL7w34755XxnBMCf5zdXu4s57hkPsNxb7fDcVBJj gallery/thumbs/01O0FMD.jpg +added QmNvz7ZjBRo5TRiKgmw3JuhAvmvGibYmVHs7tdGmdKDF2H gallery/thumbs/03Kj6JO.jpg +added QmSopgp2tbbPh1TvTVjutWaAyAf4wfUTiwh65VHR56ZRVi gallery/thumbs/04CVyjY.jpg +added QmfDUXqikZQtx984nwkgf2uvm1H9qCzSkHkeaDvhKLZvoL gallery/thumbs/05vYu5k.jpg +added QmaknQgxfX2MS3We17EzVRssCmr53DzKmbz94bzLXmpKEE gallery/thumbs/06YYa0i.jpg +added QmU4YBZGAG5A7kmQmYZGJMc6z51kdnjtJY2RUfHoZrMw37 gallery/thumbs/06uDGyB.jpg +added QmY2K9Zd2kPntvwenjizWt7fGQvptLia94vkS5ejewkiKH gallery/thumbs/07v5H70.jpg +added QmVofJdrSKXeALbnDi6wesCciCs5weg51aXzD3AR9CU1ug gallery/thumbs/07vVDJI.jpg +added QmRCHjy36Dh9WwaNi6Tj2wAJvqF4cKaaJJwMku5micERX1 gallery/thumbs/097mGzX.jpg +added QmR2YruXg2mujXax6cKuQTHKSJ5zZvLCsCKX6MRnkGVKao gallery/thumbs/0AKuTh0.jpg +added QmQM49GgBY3WNEtT9xTiQrBEuVvYtAgcsG4scL3mQbaCRL gallery/thumbs/GdRkiQe.jpg +added QmUYC9AuQYAQPNCannRUyiNg94MbRHXUZYktMNRqwJbfvF gallery/thumbs +added QmedGgNBaGUDsc8anZ3LZ6HNjfKcoZGDpjoPxXwwKWjK2p gallery +``` + +Take the hash of the folder, in this case "QmedGgNBaGUDsc8anZ3LZ6HNjfKcoZGDpjoPxXwwKWjK2p", and add it to http://ipfs.io/ipfs/ to see the gallery live: + +https://ipfs.io/ipfs/QmedGgNBaGUDsc8anZ3LZ6HNjfKcoZGDpjoPxXwwKWjK2p diff --git a/examples/fgallery/demo/01O0FMD.jpg b/examples/fgallery/demo/01O0FMD.jpg new file mode 100644 index 0000000..d1e125b Binary files /dev/null and b/examples/fgallery/demo/01O0FMD.jpg differ diff --git a/examples/fgallery/demo/03Kj6JO.jpg b/examples/fgallery/demo/03Kj6JO.jpg new file mode 100644 index 0000000..704e8ef Binary files /dev/null and b/examples/fgallery/demo/03Kj6JO.jpg differ diff --git a/examples/fgallery/demo/04CVyjY.jpg b/examples/fgallery/demo/04CVyjY.jpg new file mode 100644 index 0000000..95928b7 Binary files /dev/null and b/examples/fgallery/demo/04CVyjY.jpg differ diff --git a/examples/fgallery/demo/05vYu5k.jpg b/examples/fgallery/demo/05vYu5k.jpg new file mode 100644 index 0000000..55470bb Binary files /dev/null and b/examples/fgallery/demo/05vYu5k.jpg differ diff --git a/examples/fgallery/demo/06YYa0i.jpg b/examples/fgallery/demo/06YYa0i.jpg new file mode 100644 index 0000000..143a9bb Binary files /dev/null and b/examples/fgallery/demo/06YYa0i.jpg differ diff --git a/examples/fgallery/demo/06uDGyB.png b/examples/fgallery/demo/06uDGyB.png new file mode 100644 index 0000000..bd2f661 Binary files /dev/null and b/examples/fgallery/demo/06uDGyB.png differ diff --git a/examples/fgallery/demo/07v5H70.jpg b/examples/fgallery/demo/07v5H70.jpg new file mode 100644 index 0000000..17d3655 Binary files /dev/null and b/examples/fgallery/demo/07v5H70.jpg differ diff --git a/examples/fgallery/demo/07vVDJI.jpg b/examples/fgallery/demo/07vVDJI.jpg new file mode 100644 index 0000000..a2d6d72 Binary files /dev/null and b/examples/fgallery/demo/07vVDJI.jpg differ diff --git a/examples/fgallery/demo/097mGzX.jpg b/examples/fgallery/demo/097mGzX.jpg new file mode 100644 index 0000000..68cbc19 Binary files /dev/null and b/examples/fgallery/demo/097mGzX.jpg differ diff --git a/examples/fgallery/demo/0AKuTh0.jpg b/examples/fgallery/demo/0AKuTh0.jpg new file mode 100644 index 0000000..d3794e2 Binary files /dev/null and b/examples/fgallery/demo/0AKuTh0.jpg differ diff --git a/examples/fgallery/demo/GdRkiQe.jpg b/examples/fgallery/demo/GdRkiQe.jpg new file mode 100644 index 0000000..314ed5a Binary files /dev/null and b/examples/fgallery/demo/GdRkiQe.jpg differ diff --git a/examples/fgallery/output/back.png b/examples/fgallery/output/back.png new file mode 100644 index 0000000..d05b45d Binary files /dev/null and b/examples/fgallery/output/back.png differ diff --git a/examples/fgallery/output/blurs/01O0FMD.jpg b/examples/fgallery/output/blurs/01O0FMD.jpg new file mode 100644 index 0000000..80dfc8a Binary files /dev/null and b/examples/fgallery/output/blurs/01O0FMD.jpg differ diff --git a/examples/fgallery/output/blurs/03Kj6JO.jpg b/examples/fgallery/output/blurs/03Kj6JO.jpg new file mode 100644 index 0000000..8812e7e Binary files /dev/null and b/examples/fgallery/output/blurs/03Kj6JO.jpg differ diff --git a/examples/fgallery/output/blurs/04CVyjY.jpg b/examples/fgallery/output/blurs/04CVyjY.jpg new file mode 100644 index 0000000..5f2ca3c Binary files /dev/null and b/examples/fgallery/output/blurs/04CVyjY.jpg differ diff --git a/examples/fgallery/output/blurs/05vYu5k.jpg b/examples/fgallery/output/blurs/05vYu5k.jpg new file mode 100644 index 0000000..e33eac5 Binary files /dev/null and b/examples/fgallery/output/blurs/05vYu5k.jpg differ diff --git a/examples/fgallery/output/blurs/06YYa0i.jpg b/examples/fgallery/output/blurs/06YYa0i.jpg new file mode 100644 index 0000000..0c7d396 Binary files /dev/null and b/examples/fgallery/output/blurs/06YYa0i.jpg differ diff --git a/examples/fgallery/output/blurs/06uDGyB.jpg b/examples/fgallery/output/blurs/06uDGyB.jpg new file mode 100644 index 0000000..3fdf170 Binary files /dev/null and b/examples/fgallery/output/blurs/06uDGyB.jpg differ diff --git a/examples/fgallery/output/blurs/07v5H70.jpg b/examples/fgallery/output/blurs/07v5H70.jpg new file mode 100644 index 0000000..eadf41e Binary files /dev/null and b/examples/fgallery/output/blurs/07v5H70.jpg differ diff --git a/examples/fgallery/output/blurs/07vVDJI.jpg b/examples/fgallery/output/blurs/07vVDJI.jpg new file mode 100644 index 0000000..03fb7c2 Binary files /dev/null and b/examples/fgallery/output/blurs/07vVDJI.jpg differ diff --git a/examples/fgallery/output/blurs/097mGzX.jpg b/examples/fgallery/output/blurs/097mGzX.jpg new file mode 100644 index 0000000..f2a0788 Binary files /dev/null and b/examples/fgallery/output/blurs/097mGzX.jpg differ diff --git a/examples/fgallery/output/blurs/0AKuTh0.jpg b/examples/fgallery/output/blurs/0AKuTh0.jpg new file mode 100644 index 0000000..8feef8f Binary files /dev/null and b/examples/fgallery/output/blurs/0AKuTh0.jpg differ diff --git a/examples/fgallery/output/blurs/GdRkiQe.jpg b/examples/fgallery/output/blurs/GdRkiQe.jpg new file mode 100644 index 0000000..bee49e6 Binary files /dev/null and b/examples/fgallery/output/blurs/GdRkiQe.jpg differ diff --git a/examples/fgallery/output/cut-left.png b/examples/fgallery/output/cut-left.png new file mode 100644 index 0000000..f24692d Binary files /dev/null and b/examples/fgallery/output/cut-left.png differ diff --git a/examples/fgallery/output/cut-mov.png b/examples/fgallery/output/cut-mov.png new file mode 100644 index 0000000..9744870 Binary files /dev/null and b/examples/fgallery/output/cut-mov.png differ diff --git a/examples/fgallery/output/cut-right.png b/examples/fgallery/output/cut-right.png new file mode 100644 index 0000000..c712544 Binary files /dev/null and b/examples/fgallery/output/cut-right.png differ diff --git a/examples/fgallery/output/cut-top.png b/examples/fgallery/output/cut-top.png new file mode 100644 index 0000000..61b0fd5 Binary files /dev/null and b/examples/fgallery/output/cut-top.png differ diff --git a/examples/fgallery/output/data.json b/examples/fgallery/output/data.json new file mode 100644 index 0000000..bc57c5c --- /dev/null +++ b/examples/fgallery/output/data.json @@ -0,0 +1 @@ +{"blur":[600,336],"thumb":{"min":[150,112],"max":[267,200]},"data":[{"thumb":["thumbs/01O0FMD.jpg",[173,112]],"stamp":1,"blur":"blurs/01O0FMD.jpg","img":["imgs/01O0FMD.jpg",[1600,1035]]},{"thumb":["thumbs/03Kj6JO.jpg",[199,112]],"blur":"blurs/03Kj6JO.jpg","stamp":2,"img":["imgs/03Kj6JO.jpg",[1600,900]]},{"img":["imgs/04CVyjY.jpg",[1600,1063]],"stamp":3,"blur":"blurs/04CVyjY.jpg","thumb":["thumbs/04CVyjY.jpg",[169,112]]},{"stamp":4,"blur":"blurs/05vYu5k.jpg","img":["imgs/05vYu5k.jpg",[1600,900]],"thumb":["thumbs/05vYu5k.jpg",[199,112]]},{"img":["imgs/06uDGyB.jpg",[1600,900]],"blur":"blurs/06uDGyB.jpg","stamp":5,"thumb":["thumbs/06uDGyB.jpg",[199,112]]},{"img":["imgs/06YYa0i.jpg",[1600,900]],"blur":"blurs/06YYa0i.jpg","stamp":6,"thumb":["thumbs/06YYa0i.jpg",[199,112]]},{"img":["imgs/07v5H70.jpg",[1600,900]],"blur":"blurs/07v5H70.jpg","stamp":7,"thumb":["thumbs/07v5H70.jpg",[199,112]]},{"thumb":["thumbs/07vVDJI.jpg",[150,113]],"img":["imgs/07vVDJI.jpg",[1600,1200]],"stamp":8,"blur":"blurs/07vVDJI.jpg"},{"stamp":9,"blur":"blurs/097mGzX.jpg","img":["imgs/097mGzX.jpg",[1600,900]],"thumb":["thumbs/097mGzX.jpg",[199,112]]},{"thumb":["thumbs/0AKuTh0.jpg",[199,112]],"blur":"blurs/0AKuTh0.jpg","stamp":10,"img":["imgs/0AKuTh0.jpg",[1600,900]]},{"img":["imgs/GdRkiQe.jpg",[1594,1200]],"blur":"blurs/GdRkiQe.jpg","stamp":11,"thumb":["thumbs/GdRkiQe.jpg",[150,113]]}],"download":"files/album.zip"} \ No newline at end of file diff --git a/examples/fgallery/output/download.png b/examples/fgallery/output/download.png new file mode 100644 index 0000000..6a160c8 Binary files /dev/null and b/examples/fgallery/output/download.png differ diff --git a/examples/fgallery/output/eye.png b/examples/fgallery/output/eye.png new file mode 100644 index 0000000..562942a Binary files /dev/null and b/examples/fgallery/output/eye.png differ diff --git a/examples/fgallery/output/files/album.zip b/examples/fgallery/output/files/album.zip new file mode 100644 index 0000000..d8aa9fb Binary files /dev/null and b/examples/fgallery/output/files/album.zip differ diff --git a/examples/fgallery/output/imgs/01O0FMD.jpg b/examples/fgallery/output/imgs/01O0FMD.jpg new file mode 100644 index 0000000..87db734 Binary files /dev/null and b/examples/fgallery/output/imgs/01O0FMD.jpg differ diff --git a/examples/fgallery/output/imgs/03Kj6JO.jpg b/examples/fgallery/output/imgs/03Kj6JO.jpg new file mode 100644 index 0000000..dc58ca1 Binary files /dev/null and b/examples/fgallery/output/imgs/03Kj6JO.jpg differ diff --git a/examples/fgallery/output/imgs/04CVyjY.jpg b/examples/fgallery/output/imgs/04CVyjY.jpg new file mode 100644 index 0000000..cec366a Binary files /dev/null and b/examples/fgallery/output/imgs/04CVyjY.jpg differ diff --git a/examples/fgallery/output/imgs/05vYu5k.jpg b/examples/fgallery/output/imgs/05vYu5k.jpg new file mode 100644 index 0000000..257354c Binary files /dev/null and b/examples/fgallery/output/imgs/05vYu5k.jpg differ diff --git a/examples/fgallery/output/imgs/06YYa0i.jpg b/examples/fgallery/output/imgs/06YYa0i.jpg new file mode 100644 index 0000000..c87bb33 Binary files /dev/null and b/examples/fgallery/output/imgs/06YYa0i.jpg differ diff --git a/examples/fgallery/output/imgs/06uDGyB.jpg b/examples/fgallery/output/imgs/06uDGyB.jpg new file mode 100644 index 0000000..ec3d353 Binary files /dev/null and b/examples/fgallery/output/imgs/06uDGyB.jpg differ diff --git a/examples/fgallery/output/imgs/07v5H70.jpg b/examples/fgallery/output/imgs/07v5H70.jpg new file mode 100644 index 0000000..0656f0b Binary files /dev/null and b/examples/fgallery/output/imgs/07v5H70.jpg differ diff --git a/examples/fgallery/output/imgs/07vVDJI.jpg b/examples/fgallery/output/imgs/07vVDJI.jpg new file mode 100644 index 0000000..3766205 Binary files /dev/null and b/examples/fgallery/output/imgs/07vVDJI.jpg differ diff --git a/examples/fgallery/output/imgs/097mGzX.jpg b/examples/fgallery/output/imgs/097mGzX.jpg new file mode 100644 index 0000000..424e542 Binary files /dev/null and b/examples/fgallery/output/imgs/097mGzX.jpg differ diff --git a/examples/fgallery/output/imgs/0AKuTh0.jpg b/examples/fgallery/output/imgs/0AKuTh0.jpg new file mode 100644 index 0000000..0de8305 Binary files /dev/null and b/examples/fgallery/output/imgs/0AKuTh0.jpg differ diff --git a/examples/fgallery/output/imgs/GdRkiQe.jpg b/examples/fgallery/output/imgs/GdRkiQe.jpg new file mode 100644 index 0000000..01686a9 Binary files /dev/null and b/examples/fgallery/output/imgs/GdRkiQe.jpg differ diff --git a/examples/fgallery/output/index.css b/examples/fgallery/output/index.css new file mode 100644 index 0000000..b77c319 --- /dev/null +++ b/examples/fgallery/output/index.css @@ -0,0 +1,291 @@ +/* General reset */ +html, body +{ + overflow: hidden; /* IE<9 */ + padding: 0; + margin: 0; + border: 0; +} + +img +{ + border: none; +} + +/* Main gallery elements */ +#gallery h2 +{ + margin: 1em; + font-family: monospace; +} + +#gallery +{ + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + + display: none; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #111; +} + +#gallery.no-cursor * +{ + cursor: none !important; +} + +#gallery a, #gallery a:active, #gallery a:focus +{ + outline: none; +} + +#gallery #background +{ + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +#gallery #noise +{ + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: url(noise.png); + background-repeat: repeat; +} + +#gallery #content +{ + position: absolute; + top: 0; + left: 0; +} + +#gallery #flash +{ + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #fff; +} + +/* Main image */ +#gallery #content img.current +{ + box-shadow: 0 0 2.5em rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 2.5em rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 0 2.5em rgba(0, 0, 0, 0.5); +} + +/* Header */ +#gallery #content #header +{ + -webkit-user-select: text; + -khtml-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + + position: absolute; + top: 0; + left: 0; + color: #fff; + background: #111; /* IE<9 */ + background: rgba(0, 0, 0, 0.7); + font-family: sans-serif; + padding: 0.5em; +} + +#gallery #content #header img +{ + vertical-align: middle; + height: 1em; +} + +#gallery #content #header #throbber +{ + height: 100%; +} + +#gallery #content #header a +{ + text-decoration: none; + color: #fff; +} + +#gallery #content #header a:hover +{ + text-decoration: underline; +} + +/* Navigation arrows */ +#gallery #content #left, +#gallery #content #right +{ + position: absolute; + width: 5%; + min-width: 2.5em; + top: 0; + bottom: 0; +} + +#gallery #content #left +{ + left: 0; +} + +#gallery #content #right +{ + right: 0; +} + +#gallery #content #left div, +#gallery #content #right div +{ + position: absolute; + cursor: pointer; + top: 0; + left: 0; + bottom: 0; + right: 0; + opacity: 0.3; + filter: alpha(opacity=30); +} + +#gallery #content #left div:hover, +#gallery #content #right div:hover +{ + opacity: 0.6; + filter: alpha(opacity=60); +} + +#gallery #content #left img, +#gallery #content #right img +{ + position: absolute; + display: block; + margin: auto; + top: 0; + bottom: 0; +} + +#gallery #content #left img +{ + left: 25%; +} + +#gallery #content #right img +{ + right: 25%; +} + +/* Thumbnail list */ +#gallery #list +{ + position: absolute; + background: rgba(255, 255, 255, 0.1); + padding-top: 0.5em; + padding-left: 0.5em; + + box-shadow: 0 0 1em rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 1em rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0 0 1em rgba(0, 0, 0, 0.5); +} + +#gallery #list:focus +{ + outline: none; +} + +/* Invidivual thumbnails */ +#gallery #list .thumb +{ + display: inline-block; + margin-bottom: 0.5em; + margin-right: 0.5em; + + box-shadow: 0.25em 0.25em 0.25em rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0.25em 0.25em 0.25em rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0.25em 0.25em 0.25em rgba(0, 0, 0, 0.5); +} + +#gallery #list .thumb a +{ + display: block; + position: relative; + border: 2px solid #111 +} + +#gallery #list .thumb.current a +{ + border: 2px solid #f00; +} + +#gallery #list .thumb a:hover, +#gallery #list .thumb a:focus +{ + border: 2px solid #fff; +} + +#gallery #list .thumb.current a:hover, +#gallery #list .thumb.current a:focus +{ + border: 2px solid #f00; +} + +/* Thumbnail styles */ +#gallery #list .thumb .ovr +{ + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +#gallery #list .thumb.cut-left .ovr +{ + background: url(cut-left.png) top left repeat-y; +} + +#gallery #list .thumb.cut-right .ovr +{ + background: url(cut-right.png) repeat-y top right; +} + +#gallery #list .thumb.cut-left.cut-right .ovr +{ + background: url(cut-left.png) top left repeat-y, url(cut-right.png) repeat-y top right; +} + +#gallery #list .thumb.cut-top .ovr +{ + background: url(cut-top.png) top left repeat-x; +} + +#gallery #list .thumb.cut-bottom .ovr +{ + background: url(cut-right.png) repeat-x bottom left; +} + +#gallery #list .thumb.cut-top.cut-bottom .ovr +{ + background: url(cut-left.png) top left repeat-x, url(cut-right.png) repeat-x bottom left; +} + +#gallery #list .thumb.movie .ovr +{ + background: url(cut-mov.png) top left repeat-y, url(cut-mov.png) top right repeat-y; +} diff --git a/examples/fgallery/output/index.html b/examples/fgallery/output/index.html new file mode 100644 index 0000000..8da47e0 --- /dev/null +++ b/examples/fgallery/output/index.html @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + diff --git a/examples/fgallery/output/index.js b/examples/fgallery/output/index.js new file mode 100644 index 0000000..47f65ba --- /dev/null +++ b/examples/fgallery/output/index.js @@ -0,0 +1,677 @@ +// fgallery: a modern, minimalist javascript photo gallery +// Copyright(c) 2003-2014 by wave++ "Yuri D'Elia" +// Distributed under GPL2 (see COPYING) WITHOUT ANY WARRANTY. +var datafile = 'data.json'; +var padding = 22; +var duration = 500; +var thrdelay = 1500; +var hidedelay = 3000; +var prefetch = 1; +var minupscale = 640 * 480; +var thumbrt = 16/9 - 5/3; +var cutrt = 0.15; + +Element.Events.hashchange = +{ + onAdd: function() + { + var hash = window.location.hash; + + var hashchange = function() + { + if(hash == window.location.hash) return; + else hash = window.location.hash; + + var value = (!hash.indexOf('#')? hash.substr(1): hash); + window.fireEvent('hashchange', value); + document.fireEvent('hashchange', value); + }; + + if("onhashchange" in window + && (!Browser.ie || Browser.version > 7)) + window.onhashchange = hashchange; + else + hashchange.periodical(50); + } +}; + +// some state variables +var emain; // main object +var eback; // background +var enoise; // additive noise +var eflash; // flashing object +var ehdr; // header +var elist; // thumbnail list +var fscr; // thumbnail list scroll fx +var econt; // picture container +var ebuff; // picture buffer +var eleft; // go left +var eright; // go right +var oimg; // old image +var eimg; // new image +var cthumb; // current thumbnail +var mthumb; // missing thumbnails +var eidx; // current index +var tthr; // throbber timeout +var imgs; // image list +var first; // first image +var idle; // idle timer +var clayout; // current layout +var csr; // current scaling ratio + +function resize() +{ + // best layout + var msize = emain.getSize(); + var rt = (imgs.thumb.min[0] / imgs.thumb.min[1]); + var maxw = msize.x - imgs.thumb.min[0] - padding; + var maxh = msize.y * rt - imgs.thumb.min[1] - padding; + var layout = (maxw >= maxh? 'horizontal': 'vertical'); + + // calculate a good multiplier for the thumbnail size + var m = (layout == 'horizontal'? + (msize.x * window.devicePixelRatio * thumbrt) / imgs.thumb.min[0]: + (msize.y * window.devicePixelRatio * thumbrt) / imgs.thumb.min[1]); + if(m >= 1) + m = Math.pow(2, Math.floor(Math.log(m) / Math.LN2)); + else + m = Math.pow(2, Math.ceil(Math.log(m) / Math.LN2)); + var sr = m / window.devicePixelRatio; + + if(layout != clayout || sr != csr) + { + onLayoutChanged(layout, sr); + if(cthumb) centerThumb(0); + clayout = layout; + csr = sr; + } + + // resize main container + var epos = elist.getPosition(); + if(layout == 'horizontal') + { + econt.setStyles( + { + 'width': epos.x, + 'height': msize.y + }); + } + else + { + econt.setStyles( + { + width: msize.x, + height: epos.y + }); + } + + if(oimg) resizeMainImg(oimg); + if(eimg) resizeMainImg(eimg); +} + +function onLayoutChanged(layout, sr) +{ + elist.setStyle('display', 'none'); + + // refit the thumbnails, cropping edges + imgs.data.each(function(x, i) + { + var crop = x.thumb[1]; + var size = (x.thumb[2]? x.thumb[2]: crop); + var offset = (x.thumb[3]? x.thumb[3]: [0, 0]); + var center = (x.center? [x.center[0] / 1000, x.center[1] / 1000]: [0.5, 0.5]); + + var maxw, maxh; + if(layout == 'horizontal') + { + maxw = imgs.thumb.min[0]; + maxh = Math.round(maxw * (crop[1] / crop[0])); + maxh = Math.max(maxh, imgs.thumb.min[1]); + maxh = Math.min(maxh, imgs.thumb.max[1]); + } + else + { + maxh = imgs.thumb.min[1]; + maxw = Math.round(maxh * (crop[0] / crop[1])); + maxw = Math.max(maxw, imgs.thumb.min[0]); + maxw = Math.min(maxw, imgs.thumb.max[0]); + } + + x.eimg.setStyles( + { + 'width': Math.round(maxw * sr), + 'height': Math.round(maxh * sr), + 'background-size': Math.round(crop[0] * sr) + "px " + Math.round(crop[1] * sr) + "px" + }); + + // center cropped thumbnail + var dx = maxw - crop[0]; + var cx = size[0] * center[0] - offset[0]; + cx = Math.round(crop[0] / 2 - cx + dx / 2); + cx = Math.max(Math.min(0, cx), dx); + + var dy = maxh - crop[1]; + var cy = size[1] * center[1] - offset[1]; + cy = Math.round(crop[1] / 2 - cy + dy / 2); + cy = Math.max(Math.min(0, cy), dy); + + x.eimg.setStyle('background-position', Math.round(cx * sr) + 'px ' + Math.round(cy * sr) + 'px'); + + // border styles + var classes = ['cut-left', 'cut-right', 'cut-top', 'cut-bottom']; + classes.each(function(c) { x.ethumb.removeClass(c); }); + + var wx = Math.round(size[0] * cutrt); + if((offset[0] - cx) > wx) x.ethumb.addClass('cut-left'); + if((cx - offset[0] + size[0] - maxw) > wx) x.ethumb.addClass('cut-right'); + + var wy = Math.round(size[1] * cutrt); + if((offset[1] - cy) > wy) x.ethumb.addClass('cut-top'); + if((cy - offset[1] + size[1] - maxh) > wy) x.ethumb.addClass('cut-bottom'); + }); + + // resize thumbnail list + if(layout == 'horizontal') + { + elist.setStyles( + { + 'top': 0, + 'left': 'auto', + 'right': 0, + 'bottom': 0, + 'overflow-y': 'scroll', + 'overflow-x': 'hidden', + 'white-space': 'pre-line' + }); + } + else + { + elist.setStyles( + { + 'top': 'auto', + 'left': 0, + 'right': 0, + 'bottom': 0, + 'overflow-y': 'hidden', + 'overflow-x': 'scroll', + 'white-space': 'nowrap' + }); + } + + elist.setStyle('display', 'block'); +} + +function resizeMainImg(img) +{ + var contSize = econt.getSize(); + var listSize = elist.getSize(); + var thumbWidth = (clayout == 'horizontal'? listSize.x: listSize.y); + var data = imgs.data[img.idx].img; + var width = data[1][0]; + var height = data[1][1]; + var imgrt = width / height; + var pad = padding * 2; + + if(imgrt > (contSize.x / contSize.y)) + { + img.width = Math.max(thumbWidth + pad, contSize.x - pad); + img.height = img.width / imgrt; + } + else + { + img.height = Math.max(thumbWidth + pad, contSize.y - pad); + img.width = img.height * imgrt; + } + if(width * height <= minupscale && img.width > width) + { + img.width = width; + img.height = height; + } + + img.setStyles( + { + 'position': 'absolute', + 'top': contSize.y / 2 - img.height / 2, + 'left': contSize.x / 2 - img.width / 2 + }); +} + +function ts() +{ + var date = new Date(); + return date.getTime(); +} + +function detectSlowness(start) +{ + var end = ts(); + var delta = end - start; + if(delta > duration * 2) + duration = 0; +} + +function centerThumb(duration) +{ + var thumbPos = cthumb.getPosition(); + var thumbSize = cthumb.getSize(); + var listSize = elist.getSize(); + var listScroll = elist.getScroll(); + + var x = thumbPos.x + listScroll.x - listSize.x / 2 + thumbSize.x / 2; + var y = thumbPos.y + listScroll.y - listSize.y / 2 + thumbSize.y / 2; + + if(fscr) fscr.cancel(); + fscr = new Fx.Scroll(elist, { duration: duration }).start(x, y); +} + +function onMainReady() +{ + resizeMainImg(eimg); + eimg.setStyle('opacity', 0); + eimg.addClass('current'); + eimg.inject(ebuff); + + // setup header + var dsc = []; + if(imgs.index) + dsc.push(""); + if(imgs.data[eidx].file) + { + var img = imgs.data[eidx].file[0]; + dsc.push(""); + eimg.addEvent('click', function() { window.location = img; }); + eimg.setStyle('cursor', 'pointer'); // fallback + eimg.setStyle('cursor', 'zoom-in'); + } + if(imgs.download) + dsc.push(""); + if(imgs.data[eidx].date) + dsc.push("Date: " + imgs.data[eidx].date); + ehdr.set('html', dsc.join(' ')); + ehdr.setStyle('display', (dsc.length? 'block': 'none')); + + // complete thumbnails + var d = duration; + if(first !== false) + { + first = false; + loadAllThumbs(); + d = 0; + } + + // start animations + if(oimg) + { + oimg.removeClass('current'); + var fx = oimg.get('tween'); + fx.cancel(); + fx.duration = d; + fx.removeEvents('complete'); + fx.addEvent('complete', function(x) { x.destroy(); }); + fx.start('opacity', 0); + oimg = undefined; + } + + var fx = new Fx.Tween(eimg, { duration: d }); + if(d) + { + var now = ts(); + fx.addEvent('complete', function() + { + detectSlowness(now); + }); + } + eimg.set('tween', fx); + fx.start('opacity', 1); + + var rp = Math.floor(Math.random() * 100); + eback.src = imgs.data[eidx].blur; + enoise.setStyle('background-position', rp + 'px ' + rp + 'px'); + + clearTimeout(tthr); + idle.start(); + showHdr(); + centerThumb(d); + + // prefetch next image + if(prefetch && eidx != imgs.data.length - 1) + { + var data = imgs.data[eidx + 1]; + Asset.images([data.img[0], data.blur]); + } +} + +function showThrobber() +{ + var img = new Element('img', { id: 'throbber' }); + img.src = "throbber.gif"; + ehdr.empty(); + img.inject(ehdr); + ehdr.setStyle('display', 'block'); + idle.stop(); + showHdr(); +} + +function hideHdr() +{ + if(idle.started && ehdr.getStyle('opacity') !== 0) + ehdr.tween('opacity', [1, 0], { link: 'ignore' }); +} + +function hideNav() +{ + emain.addClass('no-cursor'); + eleft.tween('opacity', [1, 0], { link: 'ignore' }); + eright.tween('opacity', [1, 0], { link: 'ignore' }); +} + +function showHdr() +{ + ehdr.get('tween').cancel(); + ehdr.fade('show'); +} + +function showNav() +{ + emain.removeClass('no-cursor'); + eleft.get('tween').cancel(); + eleft.fade('show'); + eright.get('tween').cancel(); + eright.fade('show'); +} + +function flash() +{ + eflash.setStyle('display', 'block'); + eflash.tween('opacity', [1, 0]); +} + +function prev() +{ + if(eidx != 0) + switchTo(eidx - 1); + else + { + flash(); + switchTo(imgs.data.length - 1); + } +} + +function next() +{ + if(eidx != imgs.data.length - 1) + switchTo(eidx + 1); + else + { + flash(); + switchTo(0); + } +} + +function switchTo(i) +{ + window.location.replace("#" + i); +} + +function load(i) +{ + if(i == eidx) return; + + var data = imgs.data[i]; + var assets = Asset.images([data.img[0], data.blur], + { + onComplete: function() { if(i == eidx) onMainReady(); } + }); + + if(!oimg) oimg = eimg; + eimg = assets[0]; + eimg.idx = eidx = i; + + if(cthumb) cthumb.removeClass('current'); + cthumb = imgs.data[eidx].ethumb; + cthumb.addClass('current'); + + clearTimeout(tthr); + tthr = showThrobber.delay(thrdelay); +} + +function getLocationIndex() +{ + var hash = window.location.hash; + var idx = parseInt(!hash.indexOf('#')? hash.substr(1): hash); + if(isNaN(idx) || idx < 0) + idx = 0; + else if(idx >= imgs.data.length) + idx = imgs.data.length - 1; + return idx; +} + +function change() +{ + load(getLocationIndex()); +} + +function loadThumb(i) +{ + var x = imgs.data[i]; + x.eimg.setStyle('background-image', 'url(' + encodeURI(x.thumb[0]) + ')'); +} + +function loadAllThumbs() +{ + mthumbs.each(loadThumb); + mthumbs = []; +} + +function loadNextThumb() +{ + if(mthumbs.length) + { + var i = mthumbs.shift(); + Asset.image(imgs.data[i].thumb[0], + { + onLoad: function() + { + loadThumb(i); + loadNextThumb(); + } + }); + } +} + +function initGallery(data) +{ + imgs = data; + emain = $('gallery'); + emain.setStyle('display', 'none'); + + eback = new Element('img', { id: 'background' }); + eback.inject(emain); + + enoise = new Element('div', { id: 'noise' }); + enoise.inject(emain); + + econt = new Element('div', { id: 'content' }); + econt.inject(emain); + + ebuff = new Element('div'); + ebuff.inject(econt); + + eflash = new Element('div', { id: 'flash' }); + eflash.setStyles({ 'opacity': 0, 'display': 'none' }); + eflash.set('tween', + { + duration: duration, + link: 'cancel', + onComplete: function() { eflash.setStyle('display', 'none'); } + }); + eflash.inject(econt); + + eleft = new Element('a', { id: 'left' }); + eleft.adopt((new Element('div')).adopt(new Element('img', { 'src': 'left.png' }))); + eleft.inject(econt); + + eright = new Element('a', { id: 'right' }); + eright.adopt((new Element('div')).adopt(new Element('img', { 'src': 'right.png' }))); + eright.inject(econt); + + ehdr = new Element('div', { id: 'header' }); + ehdr.inject(econt); + + elist = new Element('div', { id: 'list' }); + elist.inject(emain); + + imgs.data.each(function(x, i) + { + var ethumb = new Element('div', { 'class': 'thumb' }); + x.ethumb = ethumb; + + var a = new Element('a'); + a.addEvent('click', function() { switchTo(i); }); + a.href = "#" + i; + + var img = new Element('div', { 'class': 'img' }); + x.eimg = img; + img.inject(a); + + var ovr = new Element('div', { 'class': 'ovr' }); + ovr.inject(a); + + a.inject(ethumb); + ethumb.inject(elist); + elist.appendText("\n"); + }); + + emain.setStyles( + { + 'display': 'block', + 'visibility': 'hidden', + 'min-width': imgs.thumb.min[0] + padding * 2, + 'min-height': imgs.thumb.min[1] + padding * 2 + }); + + // events and navigation shortcuts + eleft.addEvent('click', prev); + eright.addEvent('click', next); + window.addEvent('resize', resize); + window.addEvent('hashchange', change); + + window.addEvent('keydown', function(ev) + { + if(ev.key == 'up' || ev.key == 'left') + { + ev.stop(); + prev(); + } + else if(ev.key == 'down' || ev.key == 'right' || ev.key == 'space') + { + ev.stop(); + next(); + } + }); + + econt.addEvent('mousewheel', function(ev) + { + if(ev.alt || ev.control || ev.meta || ev.shift) + return; + + ev.stop(); + if(ev.wheel > 0) + prev(); + else + next(); + }); + + new MooSwipe(econt, + { + onSwipeleft: next, + onSwipedown: next, + onSwiperight: prev, + onSwipeup: prev + }); + + // setup an idle callback for mouse movement only + var idleTmp = new IdleTimer(window, { + timeout: hidedelay, + events: ['mousemove', 'mousedown', 'mousewheel'] + }).start(); + idleTmp.addEvent('idle', hideNav); + idleTmp.addEvent('active', function() { showNav(); showHdr(); }); + + // general idle callback + idle = new IdleTimer(window, { timeout: hidedelay }).start(); + idle.addEvent('idle', hideHdr); + + // prepare first image + first = getLocationIndex(); + resize(); + load(first); + centerThumb(0); + if(imgs.name) document.title = imgs.name; + + // setup thumbnail loading sequence + mthumbs = []; + if(first < 5) + { + // optimize common initial case (viewing from the beginning) + for(var i = 0; i != imgs.data.length; ++i) + mthumbs.push(i); + } + else for(var i = 0; i != imgs.data.length; ++i) + { + // distance from current + var d = (i / 2 >> 0); + var k = first + (i % 2? d + 1: -d); + if(k < 0) + k = imgs.data.length + k; + else if(k >= imgs.data.length) + k = k - imgs.data.length; + mthumbs.push(k); + } + loadNextThumb(); + + emain.setStyle('visibility', 'visible'); +} + +function initFailure() +{ + emain = $('gallery'); + emain.set('html', "

Cannot load gallery data :'(

"); + emain.setStyles( + { + 'background': 'inherit', + 'display': 'block' + }); +} + +function init() +{ + if(!("devicePixelRatio" in window)) + window.devicePixelRatio = 1; + + // read the data + new Request.JSON( + { + url: datafile, + onRequest: function() + { + if(this.xhr.overrideMimeType) + this.xhr.overrideMimeType('application/json'); + }, + isSuccess: function() + { + return (!this.status || (this.status >= 200 && this.status < 300)); + }, + onSuccess: initGallery, + onFailure: initFailure + }).get(); + + // preload some resources + Asset.images(['throbber.gif', + 'left.png', 'right.png', + 'eye.png', 'download.png', 'back.png', + 'cut-left.png', 'cut-right.png', + 'cut-top.png', 'cut-mov.png']); +} + +window.addEvent('domready', init); diff --git a/examples/fgallery/output/left.png b/examples/fgallery/output/left.png new file mode 100644 index 0000000..c4a66f0 Binary files /dev/null and b/examples/fgallery/output/left.png differ diff --git a/examples/fgallery/output/mootools-core-1.4.js b/examples/fgallery/output/mootools-core-1.4.js new file mode 100644 index 0000000..569473d --- /dev/null +++ b/examples/fgallery/output/mootools-core-1.4.js @@ -0,0 +1,491 @@ +/* +--- +MooTools: the javascript framework + +web build: + - http://mootools.net/core/76bf47062d6c1983d66ce47ad66aa0e0 + +packager build: + - packager build Core/Core Core/Array Core/String Core/Number Core/Function Core/Object Core/Event Core/Browser Core/Class Core/Class.Extras Core/Slick.Parser Core/Slick.Finder Core/Element Core/Element.Style Core/Element.Event Core/Element.Delegation Core/Element.Dimensions Core/Fx Core/Fx.CSS Core/Fx.Tween Core/Fx.Morph Core/Fx.Transitions Core/Request Core/Request.HTML Core/Request.JSON Core/Cookie Core/JSON Core/DOMReady Core/Swiff + +copyrights: + - [MooTools](http://mootools.net) + +licenses: + - [MIT License](http://mootools.net/license.txt) +... +*/ + +(function(){this.MooTools={version:"1.4.5",build:"ab8ea8824dc3b24b6666867a2c4ed58ebb762cf0"};var o=this.typeOf=function(i){if(i==null){return"null";}if(i.$family!=null){return i.$family(); +}if(i.nodeName){if(i.nodeType==1){return"element";}if(i.nodeType==3){return(/\S/).test(i.nodeValue)?"textnode":"whitespace";}}else{if(typeof i.length=="number"){if(i.callee){return"arguments"; +}if("item" in i){return"collection";}}}return typeof i;};var j=this.instanceOf=function(t,i){if(t==null){return false;}var s=t.$constructor||t.constructor; +while(s){if(s===i){return true;}s=s.parent;}if(!t.hasOwnProperty){return false;}return t instanceof i;};var f=this.Function;var p=true;for(var k in {toString:1}){p=null; +}if(p){p=["hasOwnProperty","valueOf","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","constructor"];}f.prototype.overloadSetter=function(s){var i=this; +return function(u,t){if(u==null){return this;}if(s||typeof u!="string"){for(var v in u){i.call(this,v,u[v]);}if(p){for(var w=p.length;w--;){v=p[w];if(u.hasOwnProperty(v)){i.call(this,v,u[v]); +}}}}else{i.call(this,u,t);}return this;};};f.prototype.overloadGetter=function(s){var i=this;return function(u){var v,t;if(typeof u!="string"){v=u;}else{if(arguments.length>1){v=arguments; +}else{if(s){v=[u];}}}if(v){t={};for(var w=0;w>>0; +b>>0;b>>0;for(var a=(d<0)?Math.max(0,b+d):d||0;a>>0,b=Array(d);for(var a=0;a>>0; +b-1:String(this).indexOf(a)>-1;},trim:function(){return String(this).replace(/^\s+|\s+$/g,""); +},clean:function(){return String(this).replace(/\s+/g," ").trim();},camelCase:function(){return String(this).replace(/-\D/g,function(a){return a.charAt(1).toUpperCase(); +});},hyphenate:function(){return String(this).replace(/[A-Z]/g,function(a){return("-"+a.charAt(0).toLowerCase());});},capitalize:function(){return String(this).replace(/\b[a-z]/g,function(a){return a.toUpperCase(); +});},escapeRegExp:function(){return String(this).replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1");},toInt:function(a){return parseInt(this,a||10);},toFloat:function(){return parseFloat(this); +},hexToRgb:function(b){var a=String(this).match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);return(a)?a.slice(1).hexToRgb(b):null;},rgbToHex:function(b){var a=String(this).match(/\d{1,3}/g); +return(a)?a.rgbToHex(b):null;},substitute:function(a,b){return String(this).replace(b||(/\\?\{([^{}]+)\}/g),function(d,c){if(d.charAt(0)=="\\"){return d.slice(1); +}return(a[c]!=null)?a[c]:"";});}});Number.implement({limit:function(b,a){return Math.min(a,Math.max(b,this));},round:function(a){a=Math.pow(10,a||0).toFixed(a<0?-a:0); +return Math.round(this*a)/a;},times:function(b,c){for(var a=0;a1?Array.slice(arguments,1):null,d=function(){};var c=function(){var g=e,h=arguments.length;if(this instanceof c){d.prototype=a.prototype; +g=new d;}var f=(!b&&!h)?a.call(g):a.apply(g,b&&h?b.concat(Array.slice(arguments)):b||arguments);return g==e?f:g;};return c;},pass:function(b,c){var a=this; +if(b!=null){b=Array.from(b);}return function(){return a.apply(c,b||arguments);};},delay:function(b,c,a){return setTimeout(this.pass((a==null?[]:a),c),b); +},periodical:function(c,b,a){return setInterval(this.pass((a==null?[]:a),b),c);}});(function(){var a=Object.prototype.hasOwnProperty;Object.extend({subset:function(d,g){var f={}; +for(var e=0,b=g.length;e]*>([\s\S]*?)<\/script>/gi,function(q,r){e+=r+"\n"; +return"";});if(o===true){n.exec(e);}else{if(typeOf(o)=="function"){o(e,p);}}return p;});n.extend({Document:this.Document,Window:this.Window,Element:this.Element,Event:this.Event}); +this.Window=this.$constructor=new Type("Window",function(){});this.$family=Function.from("window").hide();Window.mirror(function(e,o){g[e]=o;});this.Document=j.$constructor=new Type("Document",function(){}); +j.$family=Function.from("document").hide();Document.mirror(function(e,o){j[e]=o;});j.html=j.documentElement;if(!j.head){j.head=j.getElementsByTagName("head")[0]; +}if(j.execCommand){try{j.execCommand("BackgroundImageCache",false,true);}catch(f){}}if(this.attachEvent&&!this.addEventListener){var c=function(){this.detachEvent("onunload",c); +j.head=j.html=j.window=null;};this.attachEvent("onunload",c);}var l=Array.from;try{l(j.html.childNodes);}catch(f){Array.from=function(o){if(typeof o!="string"&&Type.isEnumerable(o)&&typeOf(o)!="array"){var e=o.length,p=new Array(e); +while(e--){p[e]=o[e];}return p;}return l(o);};var k=Array.prototype,m=k.slice;["pop","push","reverse","shift","sort","splice","unshift","concat","join","slice"].each(function(e){var o=k[e]; +Array[e]=function(p){return o.apply(Array.from(p),m.call(arguments,1));};});}})();(function(){var b={};var a=this.DOMEvent=new Type("DOMEvent",function(c,g){if(!g){g=window; +}c=c||g.event;if(c.$extended){return c;}this.event=c;this.$extended=true;this.shift=c.shiftKey;this.control=c.ctrlKey;this.alt=c.altKey;this.meta=c.metaKey; +var i=this.type=c.type;var h=c.target||c.srcElement;while(h&&h.nodeType==3){h=h.parentNode;}this.target=document.id(h);if(i.indexOf("key")==0){var d=this.code=(c.which||c.keyCode); +this.key=b[d];if(i=="keydown"){if(d>111&&d<124){this.key="f"+(d-111);}else{if(d>95&&d<106){this.key=d-96;}}}if(this.key==null){this.key=String.fromCharCode(d).toLowerCase(); +}}else{if(i=="click"||i=="dblclick"||i=="contextmenu"||i=="DOMMouseScroll"||i.indexOf("mouse")==0){var j=g.document;j=(!j.compatMode||j.compatMode=="CSS1Compat")?j.html:j.body; +this.page={x:(c.pageX!=null)?c.pageX:c.clientX+j.scrollLeft,y:(c.pageY!=null)?c.pageY:c.clientY+j.scrollTop};this.client={x:(c.pageX!=null)?c.pageX-g.pageXOffset:c.clientX,y:(c.pageY!=null)?c.pageY-g.pageYOffset:c.clientY}; +if(i=="DOMMouseScroll"||i=="mousewheel"){this.wheel=(c.wheelDelta)?c.wheelDelta/120:-(c.detail||0)/3;}this.rightClick=(c.which==3||c.button==2);if(i=="mouseover"||i=="mouseout"){var k=c.relatedTarget||c[(i=="mouseover"?"from":"to")+"Element"]; +while(k&&k.nodeType==3){k=k.parentNode;}this.relatedTarget=document.id(k);}}else{if(i.indexOf("touch")==0||i.indexOf("gesture")==0){this.rotation=c.rotation; +this.scale=c.scale;this.targetTouches=c.targetTouches;this.changedTouches=c.changedTouches;var f=this.touches=c.touches;if(f&&f[0]){var e=f[0];this.page={x:e.pageX,y:e.pageY}; +this.client={x:e.clientX,y:e.clientY};}}}}if(!this.client){this.client={};}if(!this.page){this.page={};}});a.implement({stop:function(){return this.preventDefault().stopPropagation(); +},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation();}else{this.event.cancelBubble=true;}return this;},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault(); +}else{this.event.returnValue=false;}return this;}});a.defineKey=function(d,c){b[d]=c;return this;};a.defineKeys=a.defineKey.overloadSetter(true);a.defineKeys({"38":"up","40":"down","37":"left","39":"right","27":"esc","32":"space","8":"backspace","9":"tab","46":"delete","13":"enter"}); +})();(function(){var a=this.Class=new Type("Class",function(h){if(instanceOf(h,Function)){h={initialize:h};}var g=function(){e(this);if(g.$prototyping){return this; +}this.$caller=null;var i=(this.initialize)?this.initialize.apply(this,arguments):this;this.$caller=this.caller=null;return i;}.extend(this).implement(h); +g.$constructor=a;g.prototype.$constructor=g;g.prototype.parent=c;return g;});var c=function(){if(!this.$caller){throw new Error('The method "parent" cannot be called.'); +}var g=this.$caller.$name,h=this.$caller.$owner.parent,i=(h)?h.prototype[g]:null;if(!i){throw new Error('The method "'+g+'" has no parent.');}return i.apply(this,arguments); +};var e=function(g){for(var h in g){var j=g[h];switch(typeOf(j)){case"object":var i=function(){};i.prototype=j;g[h]=e(new i);break;case"array":g[h]=j.clone(); +break;}}return g;};var b=function(g,h,j){if(j.$origin){j=j.$origin;}var i=function(){if(j.$protected&&this.$caller==null){throw new Error('The method "'+h+'" cannot be called.'); +}var l=this.caller,m=this.$caller;this.caller=m;this.$caller=i;var k=j.apply(this,arguments);this.$caller=m;this.caller=l;return k;}.extend({$owner:g,$origin:j,$name:h}); +return i;};var f=function(h,i,g){if(a.Mutators.hasOwnProperty(h)){i=a.Mutators[h].call(this,i);if(i==null){return this;}}if(typeOf(i)=="function"){if(i.$hidden){return this; +}this.prototype[h]=(g)?i:b(this,h,i);}else{Object.merge(this.prototype,h,i);}return this;};var d=function(g){g.$prototyping=true;var h=new g;delete g.$prototyping; +return h;};a.implement("implement",f.overloadSetter());a.Mutators={Extends:function(g){this.parent=g;this.prototype=d(g);},Implements:function(g){Array.from(g).each(function(j){var h=new j; +for(var i in h){f.call(this,i,h[i],true);}},this);}};})();(function(){this.Chain=new Class({$chain:[],chain:function(){this.$chain.append(Array.flatten(arguments)); +return this;},callChain:function(){return(this.$chain.length)?this.$chain.shift().apply(this,arguments):false;},clearChain:function(){this.$chain.empty(); +return this;}});var a=function(b){return b.replace(/^on([A-Z])/,function(c,d){return d.toLowerCase();});};this.Events=new Class({$events:{},addEvent:function(d,c,b){d=a(d); +this.$events[d]=(this.$events[d]||[]).include(c);if(b){c.internal=true;}return this;},addEvents:function(b){for(var c in b){this.addEvent(c,b[c]);}return this; +},fireEvent:function(e,c,b){e=a(e);var d=this.$events[e];if(!d){return this;}c=Array.from(c);d.each(function(f){if(b){f.delay(b,this,c);}else{f.apply(this,c); +}},this);return this;},removeEvent:function(e,d){e=a(e);var c=this.$events[e];if(c&&!d.internal){var b=c.indexOf(d);if(b!=-1){delete c[b];}}return this; +},removeEvents:function(d){var e;if(typeOf(d)=="object"){for(e in d){this.removeEvent(e,d[e]);}return this;}if(d){d=a(d);}for(e in this.$events){if(d&&d!=e){continue; +}var c=this.$events[e];for(var b=c.length;b--;){if(b in c){this.removeEvent(e,c[b]);}}}return this;}});this.Options=new Class({setOptions:function(){var b=this.options=Object.merge.apply(null,[{},this.options].append(arguments)); +if(this.addEvent){for(var c in b){if(typeOf(b[c])!="function"||!(/^on[A-Z]/).test(c)){continue;}this.addEvent(c,b[c]);delete b[c];}}return this;}});})(); +(function(){var k,n,l,g,a={},c={},m=/\\/g;var e=function(q,p){if(q==null){return null;}if(q.Slick===true){return q;}q=(""+q).replace(/^\s+|\s+$/g,"");g=!!p; +var o=(g)?c:a;if(o[q]){return o[q];}k={Slick:true,expressions:[],raw:q,reverse:function(){return e(this.raw,true);}};n=-1;while(q!=(q=q.replace(j,b))){}k.length=k.expressions.length; +return o[k.raw]=(g)?h(k):k;};var i=function(o){if(o==="!"){return" ";}else{if(o===" "){return"!";}else{if((/^!/).test(o)){return o.replace(/^!/,"");}else{return"!"+o; +}}}};var h=function(u){var r=u.expressions;for(var p=0;p+)\\s*|(\\s+)|(+|\\*)|\\#(+)|\\.(+)|\\[\\s*(+)(?:\\s*([*^$!~|]?=)(?:\\s*(?:([\"']?)(.*?)\\9)))?\\s*\\](?!\\])|(:+)(+)(?:\\((?:(?:([\"'])([^\\13]*)\\13)|((?:\\([^)]+\\)|[^()]*)+))\\))?)".replace(//,"["+f(">+~`!@$%^&={}\\;/g,"(?:[\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])").replace(//g,"(?:[:\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])")); +function b(x,s,D,z,r,C,q,B,A,y,u,F,G,v,p,w){if(s||n===-1){k.expressions[++n]=[];l=-1;if(s){return"";}}if(D||z||l===-1){D=D||" ";var t=k.expressions[n]; +if(g&&t[l]){t[l].reverseCombinator=i(D);}t[++l]={combinator:D,tag:"*"};}var o=k.expressions[n][l];if(r){o.tag=r.replace(m,"");}else{if(C){o.id=C.replace(m,""); +}else{if(q){q=q.replace(m,"");if(!o.classList){o.classList=[];}if(!o.classes){o.classes=[];}o.classList.push(q);o.classes.push({value:q,regexp:new RegExp("(^|\\s)"+f(q)+"(\\s|$)")}); +}else{if(G){w=w||p;w=w?w.replace(m,""):null;if(!o.pseudos){o.pseudos=[];}o.pseudos.push({key:G.replace(m,""),value:w,type:F.length==1?"class":"element"}); +}else{if(B){B=B.replace(m,"");u=(u||"").replace(m,"");var E,H;switch(A){case"^=":H=new RegExp("^"+f(u));break;case"$=":H=new RegExp(f(u)+"$");break;case"~=":H=new RegExp("(^|\\s)"+f(u)+"(\\s|$)"); +break;case"|=":H=new RegExp("^"+f(u)+"(-|$)");break;case"=":E=function(I){return u==I;};break;case"*=":E=function(I){return I&&I.indexOf(u)>-1;};break; +case"!=":E=function(I){return u!=I;};break;default:E=function(I){return !!I;};}if(u==""&&(/^[*$^]=$/).test(A)){E=function(){return false;};}if(!E){E=function(I){return I&&H.test(I); +};}if(!o.attributes){o.attributes=[];}o.attributes.push({key:B,operator:A,value:u,test:E});}}}}}return"";}var d=(this.Slick||{});d.parse=function(o){return e(o); +};d.escapeRegExp=f;if(!this.Slick){this.Slick=d;}}).apply((typeof exports!="undefined")?exports:this);(function(){var k={},m={},d=Object.prototype.toString; +k.isNativeCode=function(c){return(/\{\s*\[native code\]\s*\}/).test(""+c);};k.isXML=function(c){return(!!c.xmlVersion)||(!!c.xml)||(d.call(c)=="[object XMLDocument]")||(c.nodeType==9&&c.documentElement.nodeName!="HTML"); +};k.setDocument=function(w){var p=w.nodeType;if(p==9){}else{if(p){w=w.ownerDocument;}else{if(w.navigator){w=w.document;}else{return;}}}if(this.document===w){return; +}this.document=w;var A=w.documentElement,o=this.getUIDXML(A),s=m[o],r;if(s){for(r in s){this[r]=s[r];}return;}s=m[o]={};s.root=A;s.isXMLDocument=this.isXML(w); +s.brokenStarGEBTN=s.starSelectsClosedQSA=s.idGetsName=s.brokenMixedCaseQSA=s.brokenGEBCN=s.brokenCheckedQSA=s.brokenEmptyAttributeQSA=s.isHTMLDocument=s.nativeMatchesSelector=false; +var q,u,y,z,t;var x,v="slick_uniqueid";var c=w.createElement("div");var n=w.body||w.getElementsByTagName("body")[0]||A;n.appendChild(c);try{c.innerHTML=''; +s.isHTMLDocument=!!w.getElementById(v);}catch(C){}if(s.isHTMLDocument){c.style.display="none";c.appendChild(w.createComment(""));u=(c.getElementsByTagName("*").length>1); +try{c.innerHTML="foo";x=c.getElementsByTagName("*");q=(x&&!!x.length&&x[0].nodeName.charAt(0)=="/");}catch(C){}s.brokenStarGEBTN=u||q;try{c.innerHTML=''; +s.idGetsName=w.getElementById(v)===c.firstChild;}catch(C){}if(c.getElementsByClassName){try{c.innerHTML='';c.getElementsByClassName("b").length; +c.firstChild.className="b";z=(c.getElementsByClassName("b").length!=2);}catch(C){}try{c.innerHTML='';y=(c.getElementsByClassName("a").length!=2); +}catch(C){}s.brokenGEBCN=z||y;}if(c.querySelectorAll){try{c.innerHTML="foo";x=c.querySelectorAll("*");s.starSelectsClosedQSA=(x&&!!x.length&&x[0].nodeName.charAt(0)=="/"); +}catch(C){}try{c.innerHTML='';s.brokenMixedCaseQSA=!c.querySelectorAll(".MiX").length;}catch(C){}try{c.innerHTML=''; +s.brokenCheckedQSA=(c.querySelectorAll(":checked").length==0);}catch(C){}try{c.innerHTML='';s.brokenEmptyAttributeQSA=(c.querySelectorAll('[class*=""]').length!=0); +}catch(C){}}try{c.innerHTML='
';t=(c.firstChild.getAttribute("action")!="s");}catch(C){}s.nativeMatchesSelector=A.matchesSelector||A.mozMatchesSelector||A.webkitMatchesSelector; +if(s.nativeMatchesSelector){try{s.nativeMatchesSelector.call(A,":slick");s.nativeMatchesSelector=null;}catch(C){}}}try{A.slick_expando=1;delete A.slick_expando; +s.getUID=this.getUIDHTML;}catch(C){s.getUID=this.getUIDXML;}n.removeChild(c);c=x=n=null;s.getAttribute=(s.isHTMLDocument&&t)?function(G,E){var H=this.attributeGetters[E]; +if(H){return H.call(G);}var F=G.getAttributeNode(E);return(F)?F.nodeValue:null;}:function(F,E){var G=this.attributeGetters[E];return(G)?G.call(F):F.getAttribute(E); +};s.hasAttribute=(A&&this.isNativeCode(A.hasAttribute))?function(F,E){return F.hasAttribute(E);}:function(F,E){F=F.getAttributeNode(E);return !!(F&&(F.specified||F.nodeValue)); +};var D=A&&this.isNativeCode(A.contains),B=w&&this.isNativeCode(w.contains);s.contains=(D&&B)?function(E,F){return E.contains(F);}:(D&&!B)?function(E,F){return E===F||((E===w)?w.documentElement:E).contains(F); +}:(A&&A.compareDocumentPosition)?function(E,F){return E===F||!!(E.compareDocumentPosition(F)&16);}:function(E,F){if(F){do{if(F===E){return true;}}while((F=F.parentNode)); +}return false;};s.documentSorter=(A.compareDocumentPosition)?function(F,E){if(!F.compareDocumentPosition||!E.compareDocumentPosition){return 0;}return F.compareDocumentPosition(E)&4?-1:F===E?0:1; +}:("sourceIndex" in A)?function(F,E){if(!F.sourceIndex||!E.sourceIndex){return 0;}return F.sourceIndex-E.sourceIndex;}:(w.createRange)?function(H,F){if(!H.ownerDocument||!F.ownerDocument){return 0; +}var G=H.ownerDocument.createRange(),E=F.ownerDocument.createRange();G.setStart(H,0);G.setEnd(H,0);E.setStart(F,0);E.setEnd(F,0);return G.compareBoundaryPoints(Range.START_TO_END,E); +}:null;A=null;for(r in s){this[r]=s[r];}};var f=/^([#.]?)((?:[\w-]+|\*))$/,h=/\[.+[*$^]=(?:""|'')?\]/,g={};k.search=function(U,z,H,s){var p=this.found=(s)?null:(H||[]); +if(!U){return p;}else{if(U.navigator){U=U.document;}else{if(!U.nodeType){return p;}}}var F,O,V=this.uniques={},I=!!(H&&H.length),y=(U.nodeType==9);if(this.document!==(y?U:U.ownerDocument)){this.setDocument(U); +}if(I){for(O=p.length;O--;){V[this.getUID(p[O])]=true;}}if(typeof z=="string"){var r=z.match(f);simpleSelectors:if(r){var u=r[1],v=r[2],A,E;if(!u){if(v=="*"&&this.brokenStarGEBTN){break simpleSelectors; +}E=U.getElementsByTagName(v);if(s){return E[0]||null;}for(O=0;A=E[O++];){if(!(I&&V[this.getUID(A)])){p.push(A);}}}else{if(u=="#"){if(!this.isHTMLDocument||!y){break simpleSelectors; +}A=U.getElementById(v);if(!A){return p;}if(this.idGetsName&&A.getAttributeNode("id").nodeValue!=v){break simpleSelectors;}if(s){return A||null;}if(!(I&&V[this.getUID(A)])){p.push(A); +}}else{if(u=="."){if(!this.isHTMLDocument||((!U.getElementsByClassName||this.brokenGEBCN)&&U.querySelectorAll)){break simpleSelectors;}if(U.getElementsByClassName&&!this.brokenGEBCN){E=U.getElementsByClassName(v); +if(s){return E[0]||null;}for(O=0;A=E[O++];){if(!(I&&V[this.getUID(A)])){p.push(A);}}}else{var T=new RegExp("(^|\\s)"+e.escapeRegExp(v)+"(\\s|$)");E=U.getElementsByTagName("*"); +for(O=0;A=E[O++];){className=A.className;if(!(className&&T.test(className))){continue;}if(s){return A;}if(!(I&&V[this.getUID(A)])){p.push(A);}}}}}}if(I){this.sort(p); +}return(s)?null:p;}querySelector:if(U.querySelectorAll){if(!this.isHTMLDocument||g[z]||this.brokenMixedCaseQSA||(this.brokenCheckedQSA&&z.indexOf(":checked")>-1)||(this.brokenEmptyAttributeQSA&&h.test(z))||(!y&&z.indexOf(",")>-1)||e.disableQSA){break querySelector; +}var S=z,x=U;if(!y){var C=x.getAttribute("id"),t="slickid__";x.setAttribute("id",t);S="#"+t+" "+S;U=x.parentNode;}try{if(s){return U.querySelector(S)||null; +}else{E=U.querySelectorAll(S);}}catch(Q){g[z]=1;break querySelector;}finally{if(!y){if(C){x.setAttribute("id",C);}else{x.removeAttribute("id");}U=x;}}if(this.starSelectsClosedQSA){for(O=0; +A=E[O++];){if(A.nodeName>"@"&&!(I&&V[this.getUID(A)])){p.push(A);}}}else{for(O=0;A=E[O++];){if(!(I&&V[this.getUID(A)])){p.push(A);}}}if(I){this.sort(p); +}return p;}F=this.Slick.parse(z);if(!F.length){return p;}}else{if(z==null){return p;}else{if(z.Slick){F=z;}else{if(this.contains(U.documentElement||U,z)){(p)?p.push(z):p=z; +return p;}else{return p;}}}}this.posNTH={};this.posNTHLast={};this.posNTHType={};this.posNTHTypeLast={};this.push=(!I&&(s||(F.length==1&&F.expressions[0].length==1)))?this.pushArray:this.pushUID; +if(p==null){p=[];}var M,L,K;var B,J,D,c,q,G,W;var N,P,o,w,R=F.expressions;search:for(O=0;(P=R[O]);O++){for(M=0;(o=P[M]);M++){B="combinator:"+o.combinator; +if(!this[B]){continue search;}J=(this.isXMLDocument)?o.tag:o.tag.toUpperCase();D=o.id;c=o.classList;q=o.classes;G=o.attributes;W=o.pseudos;w=(M===(P.length-1)); +this.bitUniques={};if(w){this.uniques=V;this.found=p;}else{this.uniques={};this.found=[];}if(M===0){this[B](U,J,D,q,G,W,c);if(s&&w&&p.length){break search; +}}else{if(s&&w){for(L=0,K=N.length;L1)){this.sort(p);}return(s)?(p[0]||null):p;};k.uidx=1;k.uidk="slick-uniqueid";k.getUIDXML=function(n){var c=n.getAttribute(this.uidk); +if(!c){c=this.uidx++;n.setAttribute(this.uidk,c);}return c;};k.getUIDHTML=function(c){return c.uniqueNumber||(c.uniqueNumber=this.uidx++);};k.sort=function(c){if(!this.documentSorter){return c; +}c.sort(this.documentSorter);return c;};k.cacheNTH={};k.matchNTH=/^([+-]?\d*)?([a-z]+)?([+-]\d+)?$/;k.parseNTHArgument=function(q){var o=q.match(this.matchNTH); +if(!o){return false;}var p=o[2]||false;var n=o[1]||1;if(n=="-"){n=-1;}var c=+o[3]||0;o=(p=="n")?{a:n,b:c}:(p=="odd")?{a:2,b:1}:(p=="even")?{a:2,b:0}:{a:0,b:n}; +return(this.cacheNTH[q]=o);};k.createNTHPseudo=function(p,n,c,o){return function(s,q){var u=this.getUID(s);if(!this[c][u]){var A=s.parentNode;if(!A){return false; +}var r=A[p],t=1;if(o){var z=s.nodeName;do{if(r.nodeName!=z){continue;}this[c][this.getUID(r)]=t++;}while((r=r[n]));}else{do{if(r.nodeType!=1){continue; +}this[c][this.getUID(r)]=t++;}while((r=r[n]));}}q=q||"n";var v=this.cacheNTH[q]||this.parseNTHArgument(q);if(!v){return false;}var y=v.a,x=v.b,w=this[c][u]; +if(y==0){return x==w;}if(y>0){if(w":function(p,c,r,o,n,q){if((p=p.firstChild)){do{if(p.nodeType==1){this.push(p,c,r,o,n,q); +}}while((p=p.nextSibling));}},"+":function(p,c,r,o,n,q){while((p=p.nextSibling)){if(p.nodeType==1){this.push(p,c,r,o,n,q);break;}}},"^":function(p,c,r,o,n,q){p=p.firstChild; +if(p){if(p.nodeType==1){this.push(p,c,r,o,n,q);}else{this["combinator:+"](p,c,r,o,n,q);}}},"~":function(q,c,s,p,n,r){while((q=q.nextSibling)){if(q.nodeType!=1){continue; +}var o=this.getUID(q);if(this.bitUniques[o]){break;}this.bitUniques[o]=true;this.push(q,c,s,p,n,r);}},"++":function(p,c,r,o,n,q){this["combinator:+"](p,c,r,o,n,q); +this["combinator:!+"](p,c,r,o,n,q);},"~~":function(p,c,r,o,n,q){this["combinator:~"](p,c,r,o,n,q);this["combinator:!~"](p,c,r,o,n,q);},"!":function(p,c,r,o,n,q){while((p=p.parentNode)){if(p!==this.document){this.push(p,c,r,o,n,q); +}}},"!>":function(p,c,r,o,n,q){p=p.parentNode;if(p!==this.document){this.push(p,c,r,o,n,q);}},"!+":function(p,c,r,o,n,q){while((p=p.previousSibling)){if(p.nodeType==1){this.push(p,c,r,o,n,q); +break;}}},"!^":function(p,c,r,o,n,q){p=p.lastChild;if(p){if(p.nodeType==1){this.push(p,c,r,o,n,q);}else{this["combinator:!+"](p,c,r,o,n,q);}}},"!~":function(q,c,s,p,n,r){while((q=q.previousSibling)){if(q.nodeType!=1){continue; +}var o=this.getUID(q);if(this.bitUniques[o]){break;}this.bitUniques[o]=true;this.push(q,c,s,p,n,r);}}};for(var i in j){k["combinator:"+i]=j[i];}var l={empty:function(c){var n=c.firstChild; +return !(n&&n.nodeType==1)&&!(c.innerText||c.textContent||"").length;},not:function(c,n){return !this.matchNode(c,n);},contains:function(c,n){return(c.innerText||c.textContent||"").indexOf(n)>-1; +},"first-child":function(c){while((c=c.previousSibling)){if(c.nodeType==1){return false;}}return true;},"last-child":function(c){while((c=c.nextSibling)){if(c.nodeType==1){return false; +}}return true;},"only-child":function(o){var n=o;while((n=n.previousSibling)){if(n.nodeType==1){return false;}}var c=o;while((c=c.nextSibling)){if(c.nodeType==1){return false; +}}return true;},"nth-child":k.createNTHPseudo("firstChild","nextSibling","posNTH"),"nth-last-child":k.createNTHPseudo("lastChild","previousSibling","posNTHLast"),"nth-of-type":k.createNTHPseudo("firstChild","nextSibling","posNTHType",true),"nth-last-of-type":k.createNTHPseudo("lastChild","previousSibling","posNTHTypeLast",true),index:function(n,c){return this["pseudo:nth-child"](n,""+(c+1)); +},even:function(c){return this["pseudo:nth-child"](c,"2n");},odd:function(c){return this["pseudo:nth-child"](c,"2n+1");},"first-of-type":function(c){var n=c.nodeName; +while((c=c.previousSibling)){if(c.nodeName==n){return false;}}return true;},"last-of-type":function(c){var n=c.nodeName;while((c=c.nextSibling)){if(c.nodeName==n){return false; +}}return true;},"only-of-type":function(o){var n=o,p=o.nodeName;while((n=n.previousSibling)){if(n.nodeName==p){return false;}}var c=o;while((c=c.nextSibling)){if(c.nodeName==p){return false; +}}return true;},enabled:function(c){return !c.disabled;},disabled:function(c){return c.disabled;},checked:function(c){return c.checked||c.selected;},focus:function(c){return this.isHTMLDocument&&this.document.activeElement===c&&(c.href||c.type||this.hasAttribute(c,"tabindex")); +},root:function(c){return(c===this.root);},selected:function(c){return c.selected;}};for(var b in l){k["pseudo:"+b]=l[b];}var a=k.attributeGetters={"for":function(){return("htmlFor" in this)?this.htmlFor:this.getAttribute("for"); +},href:function(){return("href" in this)?this.getAttribute("href",2):this.getAttribute("href");},style:function(){return(this.style)?this.style.cssText:this.getAttribute("style"); +},tabindex:function(){var c=this.getAttributeNode("tabindex");return(c&&c.specified)?c.nodeValue:null;},type:function(){return this.getAttribute("type"); +},maxlength:function(){var c=this.getAttributeNode("maxLength");return(c&&c.specified)?c.nodeValue:null;}};a.MAXLENGTH=a.maxLength=a.maxlength;var e=k.Slick=(this.Slick||{}); +e.version="1.1.7";e.search=function(n,o,c){return k.search(n,o,c);};e.find=function(c,n){return k.search(c,n,null,true);};e.contains=function(c,n){k.setDocument(c); +return k.contains(c,n);};e.getAttribute=function(n,c){k.setDocument(n);return k.getAttribute(n,c);};e.hasAttribute=function(n,c){k.setDocument(n);return k.hasAttribute(n,c); +};e.match=function(n,c){if(!(n&&c)){return false;}if(!c||c===n){return true;}k.setDocument(n);return k.matchNode(n,c);};e.defineAttributeGetter=function(c,n){k.attributeGetters[c]=n; +return this;};e.lookupAttributeGetter=function(c){return k.attributeGetters[c];};e.definePseudo=function(c,n){k["pseudo:"+c]=function(p,o){return n.call(p,o); +};return this;};e.lookupPseudo=function(c){var n=k["pseudo:"+c];if(n){return function(o){return n.call(this,o);};}return null;};e.override=function(n,c){k.override(n,c); +return this;};e.isXML=k.isXML;e.uidOf=function(c){return k.getUIDHTML(c);};if(!this.Slick){this.Slick=e;}}).apply((typeof exports!="undefined")?exports:this); +var Element=function(b,g){var h=Element.Constructors[b];if(h){return h(g);}if(typeof b!="string"){return document.id(b).set(g);}if(!g){g={};}if(!(/^[\w-]+$/).test(b)){var e=Slick.parse(b).expressions[0][0]; +b=(e.tag=="*")?"div":e.tag;if(e.id&&g.id==null){g.id=e.id;}var d=e.attributes;if(d){for(var a,f=0,c=d.length;f=this.length){delete this[g--]; +}return e;}.protect());}Array.forEachMethod(function(g,e){Elements.implement(e,g);});Array.mirror(Elements);var d;try{d=(document.createElement("").name=="x"); +}catch(b){}var c=function(e){return(""+e).replace(/&/g,"&").replace(/"/g,""");};Document.implement({newElement:function(e,g){if(g&&g.checked!=null){g.defaultChecked=g.checked; +}if(d&&g){e="<"+e;if(g.name){e+=' name="'+c(g.name)+'"';}if(g.type){e+=' type="'+c(g.type)+'"';}e+=">";delete g.name;delete g.type;}return this.id(this.createElement(e)).set(g); +}});})();(function(){Slick.uidOf(window);Slick.uidOf(document);Document.implement({newTextNode:function(e){return this.createTextNode(e);},getDocument:function(){return this; +},getWindow:function(){return this.window;},id:(function(){var e={string:function(E,D,l){E=Slick.find(l,"#"+E.replace(/(\W)/g,"\\$1"));return(E)?e.element(E,D):null; +},element:function(D,E){Slick.uidOf(D);if(!E&&!D.$family&&!(/^(?:object|embed)$/i).test(D.tagName)){var l=D.fireEvent;D._fireEvent=function(F,G){return l(F,G); +};Object.append(D,Element.Prototype);}return D;},object:function(D,E,l){if(D.toElement){return e.element(D.toElement(l),E);}return null;}};e.textnode=e.whitespace=e.window=e.document=function(l){return l; +};return function(D,F,E){if(D&&D.$family&&D.uniqueNumber){return D;}var l=typeOf(D);return(e[l])?e[l](D,F,E||document):null;};})()});if(window.$==null){Window.implement("$",function(e,l){return document.id(e,l,this.document); +});}Window.implement({getDocument:function(){return this.document;},getWindow:function(){return this;}});[Document,Element].invoke("implement",{getElements:function(e){return Slick.search(this,e,new Elements); +},getElement:function(e){return document.id(Slick.find(this,e));}});var m={contains:function(e){return Slick.contains(this,e);}};if(!document.contains){Document.implement(m); +}if(!document.createElement("div").contains){Element.implement(m);}var r=function(E,D){if(!E){return D;}E=Object.clone(Slick.parse(E));var l=E.expressions; +for(var e=l.length;e--;){l[e][0].combinator=D;}return E;};Object.forEach({getNext:"~",getPrevious:"!~",getParent:"!"},function(e,l){Element.implement(l,function(D){return this.getElement(r(D,e)); +});});Object.forEach({getAllNext:"~",getAllPrevious:"!~",getSiblings:"~~",getChildren:">",getParents:"!"},function(e,l){Element.implement(l,function(D){return this.getElements(r(D,e)); +});});Element.implement({getFirst:function(e){return document.id(Slick.search(this,r(e,">"))[0]);},getLast:function(e){return document.id(Slick.search(this,r(e,">")).getLast()); +},getWindow:function(){return this.ownerDocument.window;},getDocument:function(){return this.ownerDocument;},getElementById:function(e){return document.id(Slick.find(this,"#"+(""+e).replace(/(\W)/g,"\\$1"))); +},match:function(e){return !e||Slick.match(this,e);}});if(window.$$==null){Window.implement("$$",function(e){if(arguments.length==1){if(typeof e=="string"){return Slick.search(this.document,e,new Elements); +}else{if(Type.isEnumerable(e)){return new Elements(e);}}}return new Elements(arguments);});}var w={before:function(l,e){var D=e.parentNode;if(D){D.insertBefore(l,e); +}},after:function(l,e){var D=e.parentNode;if(D){D.insertBefore(l,e.nextSibling);}},bottom:function(l,e){e.appendChild(l);},top:function(l,e){e.insertBefore(l,e.firstChild); +}};w.inside=w.bottom;var j={},d={};var k={};Array.forEach(["type","value","defaultValue","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","rowSpan","tabIndex","useMap"],function(e){k[e.toLowerCase()]=e; +});k.html="innerHTML";k.text=(document.createElement("div").textContent==null)?"innerText":"textContent";Object.forEach(k,function(l,e){d[e]=function(D,E){D[l]=E; +};j[e]=function(D){return D[l];};});var x=["compact","nowrap","ismap","declare","noshade","checked","disabled","readOnly","multiple","selected","noresize","defer","defaultChecked","autofocus","controls","autoplay","loop"]; +var h={};Array.forEach(x,function(e){var l=e.toLowerCase();h[l]=e;d[l]=function(D,E){D[e]=!!E;};j[l]=function(D){return !!D[e];};});Object.append(d,{"class":function(e,l){("className" in e)?e.className=(l||""):e.setAttribute("class",l); +},"for":function(e,l){("htmlFor" in e)?e.htmlFor=l:e.setAttribute("for",l);},style:function(e,l){(e.style)?e.style.cssText=l:e.setAttribute("style",l); +},value:function(e,l){e.value=(l!=null)?l:"";}});j["class"]=function(e){return("className" in e)?e.className||null:e.getAttribute("class");};var f=document.createElement("button"); +try{f.type="button";}catch(z){}if(f.type!="button"){d.type=function(e,l){e.setAttribute("type",l);};}f=null;var p=document.createElement("input");p.value="t"; +p.type="submit";if(p.value!="t"){d.type=function(l,e){var D=l.value;l.type=e;l.value=D;};}p=null;var q=(function(e){e.random="attribute";return(e.getAttribute("random")=="attribute"); +})(document.createElement("div"));Element.implement({setProperty:function(l,D){var E=d[l.toLowerCase()];if(E){E(this,D);}else{if(q){var e=this.retrieve("$attributeWhiteList",{}); +}if(D==null){this.removeAttribute(l);if(q){delete e[l];}}else{this.setAttribute(l,""+D);if(q){e[l]=true;}}}return this;},setProperties:function(e){for(var l in e){this.setProperty(l,e[l]); +}return this;},getProperty:function(F){var D=j[F.toLowerCase()];if(D){return D(this);}if(q){var l=this.getAttributeNode(F),E=this.retrieve("$attributeWhiteList",{}); +if(!l){return null;}if(l.expando&&!E[F]){var G=this.outerHTML;if(G.substr(0,G.search(/\/?['"]?>(?![^<]*<['"])/)).indexOf(F)<0){return null;}E[F]=true;}}var e=Slick.getAttribute(this,F); +return(!e&&!Slick.hasAttribute(this,F))?null:e;},getProperties:function(){var e=Array.from(arguments);return e.map(this.getProperty,this).associate(e); +},removeProperty:function(e){return this.setProperty(e,null);},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this;},set:function(D,l){var e=Element.Properties[D]; +(e&&e.set)?e.set.call(this,l):this.setProperty(D,l);}.overloadSetter(),get:function(l){var e=Element.Properties[l];return(e&&e.get)?e.get.apply(this):this.getProperty(l); +}.overloadGetter(),erase:function(l){var e=Element.Properties[l];(e&&e.erase)?e.erase.apply(this):this.removeProperty(l);return this;},hasClass:function(e){return this.className.clean().contains(e," "); +},addClass:function(e){if(!this.hasClass(e)){this.className=(this.className+" "+e).clean();}return this;},removeClass:function(e){this.className=this.className.replace(new RegExp("(^|\\s)"+e+"(?:\\s|$)"),"$1"); +return this;},toggleClass:function(e,l){if(l==null){l=!this.hasClass(e);}return(l)?this.addClass(e):this.removeClass(e);},adopt:function(){var E=this,e,G=Array.flatten(arguments),F=G.length; +if(F>1){E=e=document.createDocumentFragment();}for(var D=0;D"; +var a=(t.childNodes.length==1);if(!a){var s="abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video".split(" "),b=document.createDocumentFragment(),u=s.length; +while(u--){b.createElement(s[u]);}}t=null;var g=Function.attempt(function(){var e=document.createElement("table");e.innerHTML="";return true; +});var c=document.createElement("tr"),o="";c.innerHTML=o;var y=(c.innerHTML==o);c=null;if(!g||!y||!a){Element.Properties.html.set=(function(l){var e={table:[1,"","
"],select:[1,""],tbody:[2,"","
"],tr:[3,"","
"]}; +e.thead=e.tfoot=e.tbody;return function(D){var E=e[this.get("tag")];if(!E&&!a){E=[0,"",""];}if(!E){return l.call(this,D);}var H=E[0],G=document.createElement("div"),F=G; +if(!a){b.appendChild(G);}G.innerHTML=[E[1],D,E[2]].flatten().join("");while(H--){F=F.firstChild;}this.empty().adopt(F.childNodes);if(!a){b.removeChild(G); +}G=null;};})(Element.Properties.html.set);}var n=document.createElement("form");n.innerHTML="";if(n.firstChild.value!="s"){Element.Properties.value={set:function(G){var l=this.get("tag"); +if(l!="select"){return this.setProperty("value",G);}var D=this.getElements("option");for(var E=0;E0||k==null?"visible":"hidden";};var f=(h?function(l,k){l.style.opacity=k;}:(e?function(l,k){var n=l.style; +if(!l.currentStyle||!l.currentStyle.hasLayout){n.zoom=1;}if(k==null||k==1){k="";}else{k="alpha(opacity="+(k*100).limit(0,100).round()+")";}var m=n.filter||l.getComputedStyle("filter")||""; +n.filter=j.test(m)?m.replace(j,k):m+k;if(!n.filter){n.removeAttribute("filter");}}:a));var g=(h?function(l){var k=l.style.opacity||l.getComputedStyle("opacity"); +return(k=="")?1:k.toFloat();}:(e?function(l){var m=(l.style.filter||l.getComputedStyle("filter")),k;if(m){k=m.match(j);}return(k==null||m==null)?1:(k[1]/100); +}:function(l){var k=l.retrieve("$opacity");if(k==null){k=(l.style.visibility=="hidden"?0:1);}return k;}));var b=(i.style.cssFloat==null)?"styleFloat":"cssFloat"; +Element.implement({getComputedStyle:function(m){if(this.currentStyle){return this.currentStyle[m.camelCase()];}var l=Element.getDocument(this).defaultView,k=l?l.getComputedStyle(this,null):null; +return(k)?k.getPropertyValue((m==b)?"float":m.hyphenate()):null;},setStyle:function(l,k){if(l=="opacity"){if(k!=null){k=parseFloat(k);}f(this,k);return this; +}l=(l=="float"?b:l).camelCase();if(typeOf(k)!="string"){var m=(Element.Styles[l]||"@").split(" ");k=Array.from(k).map(function(o,n){if(!m[n]){return""; +}return(typeOf(o)=="number")?m[n].replace("@",Math.round(o)):o;}).join(" ");}else{if(k==String(Number(k))){k=Math.round(k);}}this.style[l]=k;if((k==""||k==null)&&c&&this.style.removeAttribute){this.style.removeAttribute(l); +}return this;},getStyle:function(q){if(q=="opacity"){return g(this);}q=(q=="float"?b:q).camelCase();var k=this.style[q];if(!k||q=="zIndex"){k=[];for(var p in Element.ShortStyles){if(q!=p){continue; +}for(var o in Element.ShortStyles[p]){k.push(this.getStyle(o));}return k.join(" ");}k=this.getComputedStyle(q);}if(k){k=String(k);var m=k.match(/rgba?\([\d\s,]+\)/); +if(m){k=k.replace(m[0],m[0].rgbToHex());}}if(Browser.opera||Browser.ie){if((/^(height|width)$/).test(q)&&!(/px$/.test(k))){var l=(q=="width")?["left","right"]:["top","bottom"],n=0; +l.each(function(r){n+=this.getStyle("border-"+r+"-width").toInt()+this.getStyle("padding-"+r).toInt();},this);return this["offset"+q.capitalize()]-n+"px"; +}if(Browser.ie&&(/^border(.+)Width|margin|padding/).test(q)&&isNaN(parseFloat(k))){return"0px";}}return k;},setStyles:function(l){for(var k in l){this.setStyle(k,l[k]); +}return this;},getStyles:function(){var k={};Array.flatten(arguments).each(function(l){k[l]=this.getStyle(l);},this);return k;}});Element.Styles={left:"@px",top:"@px",bottom:"@px",right:"@px",width:"@px",height:"@px",maxWidth:"@px",maxHeight:"@px",minWidth:"@px",minHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"}; +Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};["Top","Right","Bottom","Left"].each(function(q){var p=Element.ShortStyles; +var l=Element.Styles;["margin","padding"].each(function(r){var s=r+q;p[r][s]=l[s]="@px";});var o="border"+q;p.border[o]=l[o]="@px @ rgb(@, @, @)";var n=o+"Width",k=o+"Style",m=o+"Color"; +p[o]={};p.borderWidth[n]=p[o][n]=l[n]="@px";p.borderStyle[k]=p[o][k]=l[k]="@";p.borderColor[m]=p[o][m]=l[m]="rgb(@, @, @)";});})();(function(){Element.Properties.events={set:function(b){this.addEvents(b); +}};[Element,Window,Document].invoke("implement",{addEvent:function(f,h){var i=this.retrieve("events",{});if(!i[f]){i[f]={keys:[],values:[]};}if(i[f].keys.contains(h)){return this; +}i[f].keys.push(h);var g=f,b=Element.Events[f],d=h,j=this;if(b){if(b.onAdd){b.onAdd.call(this,h,f);}if(b.condition){d=function(k){if(b.condition.call(this,k,f)){return h.call(this,k); +}return true;};}if(b.base){g=Function.from(b.base).call(this,f);}}var e=function(){return h.call(j);};var c=Element.NativeEvents[g];if(c){if(c==2){e=function(k){k=new DOMEvent(k,j.getWindow()); +if(d.call(j,k)===false){k.stop();}};}this.addListener(g,e,arguments[2]);}i[f].values.push(e);return this;},removeEvent:function(e,d){var c=this.retrieve("events"); +if(!c||!c[e]){return this;}var h=c[e];var b=h.keys.indexOf(d);if(b==-1){return this;}var g=h.values[b];delete h.keys[b];delete h.values[b];var f=Element.Events[e]; +if(f){if(f.onRemove){f.onRemove.call(this,d,e);}if(f.base){e=Function.from(f.base).call(this,e);}}return(Element.NativeEvents[e])?this.removeListener(e,g,arguments[2]):this; +},addEvents:function(b){for(var c in b){this.addEvent(c,b[c]);}return this;},removeEvents:function(b){var d;if(typeOf(b)=="object"){for(d in b){this.removeEvent(d,b[d]); +}return this;}var c=this.retrieve("events");if(!c){return this;}if(!b){for(d in c){this.removeEvents(d);}this.eliminate("events");}else{if(c[b]){c[b].keys.each(function(e){this.removeEvent(b,e); +},this);delete c[b];}}return this;},fireEvent:function(e,c,b){var d=this.retrieve("events");if(!d||!d[e]){return this;}c=Array.from(c);d[e].keys.each(function(f){if(b){f.delay(b,this,c); +}else{f.apply(this,c);}},this);return this;},cloneEvents:function(e,d){e=document.id(e);var c=e.retrieve("events");if(!c){return this;}if(!d){for(var b in c){this.cloneEvents(e,b); +}}else{if(c[d]){c[d].keys.each(function(f){this.addEvent(d,f);},this);}}return this;}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,orientationchange:2,touchstart:2,touchmove:2,touchend:2,touchcancel:2,gesturestart:2,gesturechange:2,gestureend:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,paste:2,input:2,load:2,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1}; +Element.Events={mousewheel:{base:(Browser.firefox)?"DOMMouseScroll":"mousewheel"}};if("onmouseenter" in document.documentElement){Element.NativeEvents.mouseenter=Element.NativeEvents.mouseleave=2; +}else{var a=function(b){var c=b.relatedTarget;if(c==null){return true;}if(!c){return false;}return(c!=this&&c.prefix!="xul"&&typeOf(this)!="document"&&!this.contains(c)); +};Element.Events.mouseenter={base:"mouseover",condition:a};Element.Events.mouseleave={base:"mouseout",condition:a};}if(!window.addEventListener){Element.NativeEvents.propertychange=2; +Element.Events.change={base:function(){var b=this.type;return(this.get("tag")=="input"&&(b=="radio"||b=="checkbox"))?"propertychange":"change";},condition:function(b){return this.type!="radio"||(b.event.propertyName=="checked"&&this.checked); +}};}})();(function(){var c=!!window.addEventListener;Element.NativeEvents.focusin=Element.NativeEvents.focusout=2;var k=function(l,m,n,o,p){while(p&&p!=l){if(m(p,o)){return n.call(p,o,p); +}p=document.id(p.parentNode);}};var a={mouseenter:{base:"mouseover"},mouseleave:{base:"mouseout"},focus:{base:"focus"+(c?"":"in"),capture:true},blur:{base:c?"blur":"focusout",capture:true}}; +var b="$delegation:";var i=function(l){return{base:"focusin",remove:function(m,o){var p=m.retrieve(b+l+"listeners",{})[o];if(p&&p.forms){for(var n=p.forms.length; +n--;){p.forms[n].removeEvent(l,p.fns[n]);}}},listen:function(x,r,v,n,t,s){var o=(t.get("tag")=="form")?t:n.target.getParent("form");if(!o){return;}var u=x.retrieve(b+l+"listeners",{}),p=u[s]||{forms:[],fns:[]},m=p.forms,w=p.fns; +if(m.indexOf(o)!=-1){return;}m.push(o);var q=function(y){k(x,r,v,y,t);};o.addEvent(l,q);w.push(q);u[s]=p;x.store(b+l+"listeners",u);}};};var d=function(l){return{base:"focusin",listen:function(m,n,p,q,r){var o={blur:function(){this.removeEvents(o); +}};o[l]=function(s){k(m,n,p,s,r);};q.target.addEvents(o);}};};if(!c){Object.append(a,{submit:i("submit"),reset:i("reset"),change:d("change"),select:d("select")}); +}var h=Element.prototype,f=h.addEvent,j=h.removeEvent;var e=function(l,m){return function(r,q,n){if(r.indexOf(":relay")==-1){return l.call(this,r,q,n); +}var o=Slick.parse(r).expressions[0][0];if(o.pseudos[0].key!="relay"){return l.call(this,r,q,n);}var p=o.tag;o.pseudos.slice(1).each(function(s){p+=":"+s.key+(s.value?"("+s.value+")":""); +});l.call(this,r,q);return m.call(this,p,o.pseudos[0].value,q);};};var g={addEvent:function(v,q,x){var t=this.retrieve("$delegates",{}),r=t[v];if(r){for(var y in r){if(r[y].fn==x&&r[y].match==q){return this; +}}}var p=v,u=q,o=x,n=a[v]||{};v=n.base||p;q=function(B){return Slick.match(B,u);};var w=Element.Events[p];if(w&&w.condition){var l=q,m=w.condition;q=function(C,B){return l(C,B)&&m.call(C,B,v); +};}var z=this,s=String.uniqueID();var A=n.listen?function(B,C){if(!C&&B&&B.target){C=B.target;}if(C){n.listen(z,q,x,B,C,s);}}:function(B,C){if(!C&&B&&B.target){C=B.target; +}if(C){k(z,q,x,B,C);}};if(!r){r={};}r[s]={match:u,fn:o,delegator:A};t[p]=r;return f.call(this,v,A,n.capture);},removeEvent:function(r,n,t,u){var q=this.retrieve("$delegates",{}),p=q[r]; +if(!p){return this;}if(u){var m=r,w=p[u].delegator,l=a[r]||{};r=l.base||m;if(l.remove){l.remove(this,u);}delete p[u];q[m]=p;return j.call(this,r,w);}var o,v; +if(t){for(o in p){v=p[o];if(v.match==n&&v.fn==t){return g.removeEvent.call(this,r,n,t,o);}}}else{for(o in p){v=p[o];if(v.match==n){g.removeEvent.call(this,r,n,v.fn,o); +}}}return this;}};[Element,Window,Document].invoke("implement",{addEvent:e(f,g.addEvent),removeEvent:e(j,g.removeEvent)});})();(function(){var h=document.createElement("div"),e=document.createElement("div"); +h.style.height="0";h.appendChild(e);var d=(e.offsetParent===h);h=e=null;var l=function(m){return k(m,"position")!="static"||a(m);};var i=function(m){return l(m)||(/^(?:table|td|th)$/i).test(m.tagName); +};Element.implement({scrollTo:function(m,n){if(a(this)){this.getWindow().scrollTo(m,n);}else{this.scrollLeft=m;this.scrollTop=n;}return this;},getSize:function(){if(a(this)){return this.getWindow().getSize(); +}return{x:this.offsetWidth,y:this.offsetHeight};},getScrollSize:function(){if(a(this)){return this.getWindow().getScrollSize();}return{x:this.scrollWidth,y:this.scrollHeight}; +},getScroll:function(){if(a(this)){return this.getWindow().getScroll();}return{x:this.scrollLeft,y:this.scrollTop};},getScrolls:function(){var n=this.parentNode,m={x:0,y:0}; +while(n&&!a(n)){m.x+=n.scrollLeft;m.y+=n.scrollTop;n=n.parentNode;}return m;},getOffsetParent:d?function(){var m=this;if(a(m)||k(m,"position")=="fixed"){return null; +}var n=(k(m,"position")=="static")?i:l;while((m=m.parentNode)){if(n(m)){return m;}}return null;}:function(){var m=this;if(a(m)||k(m,"position")=="fixed"){return null; +}try{return m.offsetParent;}catch(n){}return null;},getOffsets:function(){if(this.getBoundingClientRect&&!Browser.Platform.ios){var r=this.getBoundingClientRect(),o=document.id(this.getDocument().documentElement),q=o.getScroll(),t=this.getScrolls(),s=(k(this,"position")=="fixed"); +return{x:r.left.toInt()+t.x+((s)?0:q.x)-o.clientLeft,y:r.top.toInt()+t.y+((s)?0:q.y)-o.clientTop};}var n=this,m={x:0,y:0};if(a(this)){return m;}while(n&&!a(n)){m.x+=n.offsetLeft; +m.y+=n.offsetTop;if(Browser.firefox){if(!c(n)){m.x+=b(n);m.y+=g(n);}var p=n.parentNode;if(p&&k(p,"overflow")!="visible"){m.x+=b(p);m.y+=g(p);}}else{if(n!=this&&Browser.safari){m.x+=b(n); +m.y+=g(n);}}n=n.offsetParent;}if(Browser.firefox&&!c(this)){m.x-=b(this);m.y-=g(this);}return m;},getPosition:function(p){var q=this.getOffsets(),n=this.getScrolls(); +var m={x:q.x-n.x,y:q.y-n.y};if(p&&(p=document.id(p))){var o=p.getPosition();return{x:m.x-o.x-b(p),y:m.y-o.y-g(p)};}return m;},getCoordinates:function(o){if(a(this)){return this.getWindow().getCoordinates(); +}var m=this.getPosition(o),n=this.getSize();var p={left:m.x,top:m.y,width:n.x,height:n.y};p.right=p.left+p.width;p.bottom=p.top+p.height;return p;},computePosition:function(m){return{left:m.x-j(this,"margin-left"),top:m.y-j(this,"margin-top")}; +},setPosition:function(m){return this.setStyles(this.computePosition(m));}});[Document,Window].invoke("implement",{getSize:function(){var m=f(this);return{x:m.clientWidth,y:m.clientHeight}; +},getScroll:function(){var n=this.getWindow(),m=f(this);return{x:n.pageXOffset||m.scrollLeft,y:n.pageYOffset||m.scrollTop};},getScrollSize:function(){var o=f(this),n=this.getSize(),m=this.getDocument().body; +return{x:Math.max(o.scrollWidth,m.scrollWidth,n.x),y:Math.max(o.scrollHeight,m.scrollHeight,n.y)};},getPosition:function(){return{x:0,y:0};},getCoordinates:function(){var m=this.getSize(); +return{top:0,left:0,bottom:m.y,right:m.x,height:m.y,width:m.x};}});var k=Element.getComputedStyle;function j(m,n){return k(m,n).toInt()||0;}function c(m){return k(m,"-moz-box-sizing")=="border-box"; +}function g(m){return j(m,"border-top-width");}function b(m){return j(m,"border-left-width");}function a(m){return(/^(?:body|html)$/i).test(m.tagName); +}function f(m){var n=m.getDocument();return(!n.compatMode||n.compatMode=="CSS1Compat")?n.html:n.body;}})();Element.alias({position:"setPosition"});[Window,Document,Element].invoke("implement",{getHeight:function(){return this.getSize().y; +},getWidth:function(){return this.getSize().x;},getScrollTop:function(){return this.getScroll().y;},getScrollLeft:function(){return this.getScroll().x; +},getScrollHeight:function(){return this.getScrollSize().y;},getScrollWidth:function(){return this.getScrollSize().x;},getTop:function(){return this.getPosition().y; +},getLeft:function(){return this.getPosition().x;}});(function(){var f=this.Fx=new Class({Implements:[Chain,Events,Options],options:{fps:60,unit:false,duration:500,frames:null,frameSkip:true,link:"ignore"},initialize:function(g){this.subject=this.subject||this; +this.setOptions(g);},getTransition:function(){return function(g){return -(Math.cos(Math.PI*g)-1)/2;};},step:function(g){if(this.options.frameSkip){var h=(this.time!=null)?(g-this.time):0,i=h/this.frameInterval; +this.time=g;this.frame+=i;}else{this.frame++;}if(this.frame=(7-4*d)/11){e=c*c-Math.pow((11-6*d-11*f)/4,2);break;}}return e; +},Elastic:function(b,a){return Math.pow(2,10*--b)*Math.cos(20*b*Math.PI*(a&&a[0]||1)/3);}});["Quad","Cubic","Quart","Quint"].each(function(b,a){Fx.Transitions[b]=new Fx.Transition(function(c){return Math.pow(c,a+2); +});});(function(){var d=function(){},a=("onprogress" in new Browser.Request);var c=this.Request=new Class({Implements:[Chain,Events,Options],options:{url:"",data:"",headers:{"X-Requested-With":"XMLHttpRequest",Accept:"text/javascript, text/html, application/xml, text/xml, */*"},async:true,format:false,method:"post",link:"ignore",isSuccess:null,emulation:true,urlEncoded:true,encoding:"utf-8",evalScripts:false,evalResponse:false,timeout:0,noCache:false},initialize:function(e){this.xhr=new Browser.Request(); +this.setOptions(e);this.headers=this.options.headers;},onStateChange:function(){var e=this.xhr;if(e.readyState!=4||!this.running){return;}this.running=false; +this.status=0;Function.attempt(function(){var f=e.status;this.status=(f==1223)?204:f;}.bind(this));e.onreadystatechange=d;if(a){e.onprogress=e.onloadstart=d; +}clearTimeout(this.timer);this.response={text:this.xhr.responseText||"",xml:this.xhr.responseXML};if(this.options.isSuccess.call(this,this.status)){this.success(this.response.text,this.response.xml); +}else{this.failure();}},isSuccess:function(){var e=this.status;return(e>=200&&e<300);},isRunning:function(){return !!this.running;},processScripts:function(e){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return Browser.exec(e); +}return e.stripScripts(this.options.evalScripts);},success:function(f,e){this.onSuccess(this.processScripts(f),e);},onSuccess:function(){this.fireEvent("complete",arguments).fireEvent("success",arguments).callChain(); +},failure:function(){this.onFailure();},onFailure:function(){this.fireEvent("complete").fireEvent("failure",this.xhr);},loadstart:function(e){this.fireEvent("loadstart",[e,this.xhr]); +},progress:function(e){this.fireEvent("progress",[e,this.xhr]);},timeout:function(){this.fireEvent("timeout",this.xhr);},setHeader:function(e,f){this.headers[e]=f; +return this;},getHeader:function(e){return Function.attempt(function(){return this.xhr.getResponseHeader(e);}.bind(this));},check:function(){if(!this.running){return true; +}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.caller.pass(arguments,this));return false;}return false;},send:function(o){if(!this.check(o)){return this; +}this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.running=true;var l=typeOf(o);if(l=="string"||l=="element"){o={data:o};}var h=this.options; +o=Object.append({data:h.data,url:h.url,method:h.method},o);var j=o.data,f=String(o.url),e=o.method.toLowerCase();switch(typeOf(j)){case"element":j=document.id(j).toQueryString(); +break;case"object":case"hash":j=Object.toQueryString(j);}if(this.options.format){var m="format="+this.options.format;j=(j)?m+"&"+j:m;}if(this.options.emulation&&!["get","post"].contains(e)){var k="_method="+e; +j=(j)?k+"&"+j:k;e="post";}if(this.options.urlEncoded&&["post","put"].contains(e)){var g=(this.options.encoding)?"; charset="+this.options.encoding:"";this.headers["Content-type"]="application/x-www-form-urlencoded"+g; +}if(!f){f=document.location.pathname;}var i=f.lastIndexOf("/");if(i>-1&&(i=f.indexOf("#"))>-1){f=f.substr(0,i);}if(this.options.noCache){f+=(f.contains("?")?"&":"?")+String.uniqueID(); +}if(j&&e=="get"){f+=(f.contains("?")?"&":"?")+j;j=null;}var n=this.xhr;if(a){n.onloadstart=this.loadstart.bind(this);n.onprogress=this.progress.bind(this); +}n.open(e.toUpperCase(),f,this.options.async,this.options.user,this.options.password);if(this.options.user&&"withCredentials" in n){n.withCredentials=true; +}n.onreadystatechange=this.onStateChange.bind(this);Object.each(this.headers,function(q,p){try{n.setRequestHeader(p,q);}catch(r){this.fireEvent("exception",[p,q]); +}},this);this.fireEvent("request");n.send(j);if(!this.options.async){this.onStateChange();}else{if(this.options.timeout){this.timer=this.timeout.delay(this.options.timeout,this); +}}return this;},cancel:function(){if(!this.running){return this;}this.running=false;var e=this.xhr;e.abort();clearTimeout(this.timer);e.onreadystatechange=d; +if(a){e.onprogress=e.onloadstart=d;}this.xhr=new Browser.Request();this.fireEvent("cancel");return this;}});var b={};["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(e){b[e]=function(g){var f={method:e}; +if(g!=null){f.data=g;}return this.send(f);};});c.implement(b);Element.Properties.send={set:function(e){var f=this.get("send").cancel();f.setOptions(e); +return this;},get:function(){var e=this.retrieve("send");if(!e){e=new c({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")}); +this.store("send",e);}return e;}};Element.implement({send:function(e){var f=this.get("send");f.send({data:this,url:e||f.options.url});return this;}});})(); +Request.HTML=new Class({Extends:Request,options:{update:false,append:false,evalScripts:true,filter:false,headers:{Accept:"text/html, application/xml, text/xml, */*"}},success:function(f){var e=this.options,c=this.response; +c.html=f.stripScripts(function(h){c.javascript=h;});var d=c.html.match(/]*>([\s\S]*?)<\/body>/i);if(d){c.html=d[1];}var b=new Element("div").set("html",c.html); +c.tree=b.childNodes;c.elements=b.getElements(e.filter||"*");if(e.filter){c.tree=c.elements;}if(e.update){var g=document.id(e.update).empty();if(e.filter){g.adopt(c.elements); +}else{g.set("html",c.html);}}else{if(e.append){var a=document.id(e.append);if(e.filter){c.elements.reverse().inject(a);}else{a.adopt(b.getChildren());}}}if(e.evalScripts){Browser.exec(c.javascript); +}this.onSuccess(c.tree,c.elements,c.html,c.javascript);}});Element.Properties.load={set:function(a){var b=this.get("load").cancel();b.setOptions(a);return this; +},get:function(){var a=this.retrieve("load");if(!a){a=new Request.HTML({data:this,link:"cancel",update:this,method:"get"});this.store("load",a);}return a; +}};Element.implement({load:function(){this.get("load").send(Array.link(arguments,{data:Type.isObject,url:Type.isString}));return this;}});if(typeof JSON=="undefined"){this.JSON={}; +}(function(){var special={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};var escape=function(chr){return special[chr]||"\\u"+("0000"+chr.charCodeAt(0).toString(16)).slice(-4); +};JSON.validate=function(string){string=string.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""); +return(/^[\],:{}\s]*$/).test(string);};JSON.encode=JSON.stringify?function(obj){return JSON.stringify(obj);}:function(obj){if(obj&&obj.toJSON){obj=obj.toJSON(); +}switch(typeOf(obj)){case"string":return'"'+obj.replace(/[\x00-\x1f\\"]/g,escape)+'"';case"array":return"["+obj.map(JSON.encode).clean()+"]";case"object":case"hash":var string=[]; +Object.each(obj,function(value,key){var json=JSON.encode(value);if(json){string.push(JSON.encode(key)+":"+json);}});return"{"+string+"}";case"number":case"boolean":return""+obj; +case"null":return"null";}return null;};JSON.decode=function(string,secure){if(!string||typeOf(string)!="string"){return null;}if(secure||JSON.secure){if(JSON.parse){return JSON.parse(string); +}if(!JSON.validate(string)){throw new Error("JSON could not decode the input; security is enabled and the value is not secure.");}}return eval("("+string+")"); +};})();Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(a){this.parent(a);Object.append(this.headers,{Accept:"application/json","X-Request":"JSON"}); +},success:function(c){var b;try{b=this.response.json=JSON.decode(c,this.options.secure);}catch(a){this.fireEvent("error",[c,a]);return;}if(b==null){this.onFailure(); +}else{this.onSuccess(b,c);}}});var Cookie=new Class({Implements:Options,options:{path:"/",domain:false,duration:false,secure:false,document:document,encode:true},initialize:function(b,a){this.key=b; +this.setOptions(a);},write:function(b){if(this.options.encode){b=encodeURIComponent(b);}if(this.options.domain){b+="; domain="+this.options.domain;}if(this.options.path){b+="; path="+this.options.path; +}if(this.options.duration){var a=new Date();a.setTime(a.getTime()+this.options.duration*24*60*60*1000);b+="; expires="+a.toGMTString();}if(this.options.secure){b+="; secure"; +}this.options.document.cookie=this.key+"="+b;return this;},read:function(){var a=this.options.document.cookie.match("(?:^|;)\\s*"+this.key.escapeRegExp()+"=([^;]*)"); +return(a)?decodeURIComponent(a[1]):null;},dispose:function(){new Cookie(this.key,Object.merge({},this.options,{duration:-1})).write("");return this;}}); +Cookie.write=function(b,c,a){return new Cookie(b,a).write(c);};Cookie.read=function(a){return new Cookie(a).read();};Cookie.dispose=function(b,a){return new Cookie(b,a).dispose(); +};(function(i,k){var l,f,e=[],c,b,d=k.createElement("div");var g=function(){clearTimeout(b);if(l){return;}Browser.loaded=l=true;k.removeListener("DOMContentLoaded",g).removeListener("readystatechange",a); +k.fireEvent("domready");i.fireEvent("domready");};var a=function(){for(var m=e.length;m--;){if(e[m]()){g();return true;}}return false;};var j=function(){clearTimeout(b); +if(!a()){b=setTimeout(j,10);}};k.addListener("DOMContentLoaded",g);var h=function(){try{d.doScroll();return true;}catch(m){}return false;};if(d.doScroll&&!h()){e.push(h); +c=true;}if(k.readyState){e.push(function(){var m=k.readyState;return(m=="loaded"||m=="complete");});}if("onreadystatechange" in k){k.addListener("readystatechange",a); +}else{c=true;}if(c){j();}Element.Events.domready={onAdd:function(m){if(l){m.call(this);}}};Element.Events.load={base:"load",onAdd:function(m){if(f&&this==i){m.call(this); +}},condition:function(){if(this==i){g();delete Element.Events.load;}return true;}};i.addEvent("load",function(){f=true;});})(window,document);(function(){var Swiff=this.Swiff=new Class({Implements:Options,options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:"high",allowScriptAccess:"always",wMode:"window",swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object; +},initialize:function(path,options){this.instance="Swiff_"+String.uniqueID();this.setOptions(options);options=this.options;var id=this.id=options.id||this.instance; +var container=document.id(options.container);Swiff.CallBacks[this.instance]={};var params=options.params,vars=options.vars,callBacks=options.callBacks; +var properties=Object.append({height:options.height,width:options.width},options.properties);var self=this;for(var callBack in callBacks){Swiff.CallBacks[this.instance][callBack]=(function(option){return function(){return option.apply(self.object,arguments); +};})(callBacks[callBack]);vars[callBack]="Swiff.CallBacks."+this.instance+"."+callBack;}params.flashVars=Object.toQueryString(vars);if(Browser.ie){properties.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"; +params.movie=path;}else{properties.type="application/x-shockwave-flash";}properties.data=path;var build='';}}build+="";this.object=((container)?container.empty():new Element("div")).set("html",build).firstChild; +},replaces:function(element){element=document.id(element,true);element.parentNode.replaceChild(this.toElement(),element);return this;},inject:function(element){document.id(element,true).appendChild(this.toElement()); +return this;},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].append(arguments));}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction(''+__flash__argumentsToXML(arguments,2)+""); +return eval(rs);};})(); \ No newline at end of file diff --git a/examples/fgallery/output/mootools-idle.js b/examples/fgallery/output/mootools-idle.js new file mode 100644 index 0000000..eb4651c --- /dev/null +++ b/examples/fgallery/output/mootools-idle.js @@ -0,0 +1,198 @@ +/* +--- +description: Determines when the user is idle (not interacting with the page) so that you can respond appropriately. + +license: +- MIT-style license + +authors: +- Espen 'Rexxars' Hovlandsdal (http://rexxars.com/) + +requires: +core/1.2.4: +- Class.Extras +- Element.Event + +provides: +- IdleTimer + +inspiration: +- Inspired by Nicholas C. Zakas' Idle Timer (http://yuilibrary.com/gallery/show/idletimer) Copyright (c) 2009 Nicholas C. Zakas, [YUI BSD](http://developer.yahoo.com/yui/license.html) +- Also inspired by Paul Irish's jQuery idleTimer (http://paulirish.com/2009/jquery-idletimer-plugin/) Copyright (c) 2009 Paul Irish, [MIT License](http://opensource.org/licenses/mit-license.php) +... +*/ + +IdleTimer = new Class({ + + Implements: [Events, Options], + + options: { + /* + onStart: function(){}, + onStop: function(){}, + onIdle: function(){}, + onActive: function(){}, + onTimeoutChanged: function(){}, + */ + timeout: 60000, + events: ['mousemove', 'keydown', 'mousewheel', 'mousedown', 'touchstart', 'touchmove'] + }, + + initialize: function(element, options) { + this.setOptions(options); + this.element = document.id(element); + this.activeBound = this.active.bind(this); + this.isIdle = false; + this.started = false; + this.lastPos = false; + }, + + /** + * Stops any existing timeouts and removes the bound events + */ + stop: function() { + clearTimeout(this.timer); + + // Remove bound events + for(var i = 0; i < this.options.events.length; i++) { + this.element.removeEvent(this.options.events[i], this.activeBound); + } + this.bound = false; + this.started = false; + this.lastPos = false; + this.fireEvent('stop'); + return this; + }, + + /** + * Triggered when the user becomes active. May also be launched manually by scripts + * if implementing some sort of custom events etc. An example would be flash files + * which does not trigger the documents onmousemove event, you could have the flash + * call this method to prevent the idle event from being triggered. + */ + active: function(e) { + if(e.event.type == 'mousemove') + { + // Fix https://code.google.com/p/chromium/issues/detail?id=103041 + var pos = [e.event.clientX, e.event.clientY]; + if(this.lastPos === false || + (this.lastPos[0] != pos[0] && this.lastPos[1] != pos[1])) + this.lastPos = pos; + else + return; + } + clearTimeout(this.timer); + if(this.isIdle) this.fireEvent('active'); + this.isIdle = false; + this.start(); + }, + + /** + * Fired when the user becomes idle + */ + idle: function() { + if(this.timer) clearTimeout(this.timer); // If called manually, timer will have to be removed + this.isIdle = true; + this.fireEvent('idle'); + }, + + /** + * Starts the timer which eventually will reach idle() if the user is inactive + */ + start: function() { + if(this.timer) clearTimeout(this.timer); // If called twice, timer will have to be removed + this.timer = this.idle.delay(this.options.timeout, this); + this.lastActive = Date.now(); + if(!this.bound) this.bind(); + this.started = true; + return this; + }, + + /** + * Bind events to the element + */ + bind: function() { + for(var i = 0; i < this.options.events.length; i++) { + this.element.addEvent(this.options.events[i], this.activeBound); + } + this.bound = true; + this.fireEvent('start'); + }, + + /** + * Returns how many seconds/milliseconds have passed since the user was last idle + */ + getIdleTime: function(returnSeconds) { + return returnSeconds ? Math.round((Date.now() - this.lastActive) / 1000) : Date.now() - this.lastActive; + }, + + /** + * Sets the number of milliseconds is concidered "idle". + * Will also attempt to fix any difference in the old and new timeout values, + * unless you pass true as whenActive - in this case the new timeout will be + * in play the next time the user is active again. + */ + setTimeout: function(newTime, whenActive) { + var old = this.options.timeout; + this.options.timeout = newTime; + + if(whenActive) return this; // The developer wants to wait until the next time the user is active before setting the new timeout + + // In all cases, we need a new timer + clearTimeout(this.timer); + + // Fire a new timeout event + this.fireEvent('timeoutChanged', newTime); + + // How much time has ellapsed since we were last active? + var elapsed = this.getIdleTime(); + + if(elapsed < newTime && this.isIdle) { + // Set as active, cause the new "idle" time has not been reached + this.fireEvent('active'); + this.isIdle = false; + } else if(elapsed >= newTime) { + // We've not reached the limit before, but with the new timeout, we now have. + this.idle(); + return this; + } + + // Set new timer + this.timer = this.idle.delay(newTime - elapsed, this); + return this; + } + +}); + +Element.Properties.idle = { + + set: function(options) { + var idle = this.retrieve('idle'); + if (idle) idle.stop(); + return this.eliminate('idle').store('idle:options', options); + }, + + get: function(options) { + if (options || !this.retrieve('idle')) { + if (options || !this.retrieve('idle:options')) this.set('idle', options); + this.store('idle', new IdleTimer(this, this.retrieve('idle:options'))); + } + return this.retrieve('idle'); + } + +}; + +Element.Events.idle = { + onAdd: function(fn) { + var global = this.get ? false : true; + var idler = global ? window.idleTimer : this.get('idle'); + if(global && !idler) { idler = window.idleTimer = new IdleTimer(Browser.ie ? document : this); } + if(!idler.started) idler.start(); + idler.addEvent('idle', fn); + } +}; +Element.Events.active = { + onAdd: function(fn) { + (this.get ? this.get('idle') : window.idleTimer).addEvent('active', fn); + } +}; diff --git a/examples/fgallery/output/mootools-mooswipe.js b/examples/fgallery/output/mootools-mooswipe.js new file mode 100644 index 0000000..7d3f76e --- /dev/null +++ b/examples/fgallery/output/mootools-mooswipe.js @@ -0,0 +1,77 @@ +/* +--- +description: Swipe events for touch devices. + +license: MIT-style. + +authors: +- Caleb Troughton + +requires: + core/1.2.4: + - Element.Event + - Class + - Class.Extras + +provides: + MooSwipe +*/ +var MooSwipe = MooSwipe || new Class({ + Implements: [Options, Events], + + options: { + //onSwipeleft: $empty, + //onSwiperight: $empty, + //onSwipeup: $empty, + //onSwipedown: $empty, + tolerance: 50, + preventDefaults: true + }, + + element: null, + startX: null, + startY: null, + isMoving: false, + + initialize: function(el, options) { + this.setOptions(options); + this.element = $(el); + this.element.addListener('touchstart', this.onTouchStart.bind(this)); + }, + + cancelTouch: function() { + this.element.removeListener('touchmove', this.onTouchMove); + this.startX = null; + this.startY = null; + this.isMoving = false; + }, + + onTouchMove: function(e) { + if (e.touches.length == 1) { + this.options.preventDefaults && e.preventDefault(); + if (this.isMoving) { + var dx = this.startX - e.touches[0].pageX; + var dy = this.startY - e.touches[0].pageY; + if (Math.abs(dx) >= this.options.tolerance) { + this.cancelTouch(); + this.fireEvent(dx > 0 ? 'swipeleft' : 'swiperight'); + } else if (Math.abs(dy) >= this.options.tolerance) { + this.cancelTouch(); + this.fireEvent(dy > 0 ? 'swipedown' : 'swipeup'); + } + } + } + else if (this.isMoving) { + this.cancelTouch(); + } + }, + + onTouchStart: function(e) { + if (e.touches.length == 1) { + this.startX = e.touches[0].pageX; + this.startY = e.touches[0].pageY; + this.isMoving = true; + this.element.addListener('touchmove', this.onTouchMove.bind(this)); + } + } +}); diff --git a/examples/fgallery/output/mootools-more-1.4.js b/examples/fgallery/output/mootools-more-1.4.js new file mode 100644 index 0000000..43394a7 --- /dev/null +++ b/examples/fgallery/output/mootools-more-1.4.js @@ -0,0 +1,45 @@ +// MooTools: the javascript framework. +// Load this file's selection again by visiting: http://mootools.net/more/79cd71c11847ba8e70a662f66829987d +// Or build this file again with packager using: packager build More/Element.Measure More/Fx.Scroll More/Assets +/* +--- +copyrights: + - [MooTools](http://mootools.net) + +licenses: + - [MIT License](http://mootools.net/license.txt) +... +*/ +MooTools.More={version:"1.4.0.1",build:"a4244edf2aa97ac8a196fc96082dd35af1abab87"};(function(){var b=function(e,d){var f=[];Object.each(d,function(g){Object.each(g,function(h){e.each(function(i){f.push(i+"-"+h+(i=="border"?"-width":"")); +});});});return f;};var c=function(f,e){var d=0;Object.each(e,function(h,g){if(g.test(f)){d=d+h.toInt();}});return d;};var a=function(d){return !!(!d||d.offsetHeight||d.offsetWidth); +};Element.implement({measure:function(h){if(a(this)){return h.call(this);}var g=this.getParent(),e=[];while(!a(g)&&g!=document.body){e.push(g.expose()); +g=g.getParent();}var f=this.expose(),d=h.call(this);f();e.each(function(i){i();});return d;},expose:function(){if(this.getStyle("display")!="none"){return function(){}; +}var d=this.style.cssText;this.setStyles({display:"block",position:"absolute",visibility:"hidden"});return function(){this.style.cssText=d;}.bind(this); +},getDimensions:function(d){d=Object.merge({computeSize:false},d);var i={x:0,y:0};var h=function(j,e){return(e.computeSize)?j.getComputedSize(e):j.getSize(); +};var f=this.getParent("body");if(f&&this.getStyle("display")=="none"){i=this.measure(function(){return h(this,d);});}else{if(f){try{i=h(this,d);}catch(g){}}}return Object.append(i,(i.x||i.x===0)?{width:i.x,height:i.y}:{x:i.width,y:i.height}); +},getComputedSize:function(d){d=Object.merge({styles:["padding","border"],planes:{height:["top","bottom"],width:["left","right"]},mode:"both"},d);var g={},e={width:0,height:0},f; +if(d.mode=="vertical"){delete e.width;delete d.planes.width;}else{if(d.mode=="horizontal"){delete e.height;delete d.planes.height;}}b(d.styles,d.planes).each(function(h){g[h]=this.getStyle(h).toInt(); +},this);Object.each(d.planes,function(i,h){var k=h.capitalize(),j=this.getStyle(h);if(j=="auto"&&!f){f=this.getDimensions();}j=g[h]=(j=="auto")?f[h]:j.toInt(); +e["total"+k]=j;i.each(function(m){var l=c(m,g);e["computed"+m.capitalize()]=l;e["total"+k]+=l;});},this);return Object.append(e,g);}});})();(function(){Fx.Scroll=new Class({Extends:Fx,options:{offset:{x:0,y:0},wheelStops:true},initialize:function(c,b){this.element=this.subject=document.id(c); +this.parent(b);if(typeOf(this.element)!="element"){this.element=document.id(this.element.getDocument().body);}if(this.options.wheelStops){var d=this.element,e=this.cancel.pass(false,this); +this.addEvent("start",function(){d.addEvent("mousewheel",e);},true);this.addEvent("complete",function(){d.removeEvent("mousewheel",e);},true);}},set:function(){var b=Array.flatten(arguments); +if(Browser.firefox){b=[Math.round(b[0]),Math.round(b[1])];}this.element.scrollTo(b[0],b[1]);return this;},compute:function(d,c,b){return[0,1].map(function(e){return Fx.compute(d[e],c[e],b); +});},start:function(c,d){if(!this.check(c,d)){return this;}var b=this.element.getScroll();return this.parent([b.x,b.y],[c,d]);},calculateScroll:function(g,f){var d=this.element,b=d.getScrollSize(),h=d.getScroll(),j=d.getSize(),c=this.options.offset,i={x:g,y:f}; +for(var e in i){if(!i[e]&&i[e]!==0){i[e]=h[e];}if(typeOf(i[e])!="number"){i[e]=b[e]-j[e];}i[e]+=c[e];}return[i.x,i.y];},toTop:function(){return this.start.apply(this,this.calculateScroll(false,0)); +},toLeft:function(){return this.start.apply(this,this.calculateScroll(0,false));},toRight:function(){return this.start.apply(this,this.calculateScroll("right",false)); +},toBottom:function(){return this.start.apply(this,this.calculateScroll(false,"bottom"));},toElement:function(d,e){e=e?Array.from(e):["x","y"];var c=a(this.element)?{x:0,y:0}:this.element.getScroll(); +var b=Object.map(document.id(d).getPosition(this.element),function(g,f){return e.contains(f)?g+c[f]:false;});return this.start.apply(this,this.calculateScroll(b.x,b.y)); +},toElementEdge:function(d,g,e){g=g?Array.from(g):["x","y"];d=document.id(d);var i={},f=d.getPosition(this.element),j=d.getSize(),h=this.element.getScroll(),b=this.element.getSize(),c={x:f.x+j.x,y:f.y+j.y}; +["x","y"].each(function(k){if(g.contains(k)){if(c[k]>h[k]+b[k]){i[k]=c[k]-b[k];}if(f[k]