397 Commits
Author SHA1 Message Date
photonstorm f1f42e4d41 New Examples area finished, README updated. Getting closer to 1.1 release. 2013-10-23 04:15:44 +01:00
photonstorm cab3b53cf0 SideView example viewer finished. 2013-10-23 02:14:51 +01:00
photonstorm e5c3ca27c5 Making dependancies local for offline access to examples. 2013-10-22 21:29:58 +01:00
Richard Davey 84b837f56c View 2013-10-22 16:38:40 +01:00
photonstorm 77fd15bf3c Preparing new static examples viewer. 2013-10-22 14:59:43 +01:00
photonstorm 07724e5001 Revamping the examples area. 2013-10-22 03:58:20 +01:00
Richard Davey 82df8c9f54 Merge pull request #108 from alvinsight/dev
All the names now fit
2013-10-18 08:36:13 -07:00
Webeled 97423a9d8d All the names now fit 2013-10-18 16:27:55 +01:00
photonstorm 8ed783802e New examples page 2013-10-18 15:12:32 +01:00
photonstorm dabda516c2 Compiled build. 2013-10-17 22:56:20 +01:00
photonstorm 7e8b79adf4 Tilemap painting example and other smaller updates. 2013-10-17 21:10:00 +01:00
photonstorm 275fa4641e Added Text.destroy and BitmapText.destroy. 2013-10-17 15:40:44 +01:00
photonstorm 4b2ac6c6c6 More tilemap examples 2013-10-16 21:25:51 +01:00
photonstorm 9c1fdb371c Nearly finished Tilemap integration into the core. 2013-10-16 06:33:39 +01:00
photonstorm 31018b9295 Star Struck game back and working again, plus finished the level design. 2013-10-16 03:37:15 +01:00
photonstorm a97f271de7 Fixed Animation index 0 issue and hooked TilemapLayer to camera. 2013-10-16 02:09:12 +01:00
photonstorm fd5eeb9088 Fixed Rectangle intersection issue and tilemap collision is working again. Win! 2013-10-15 15:24:07 +01:00
photonstorm f3ea68aad3 Extracting the correct area from a layer, debug displaying it and preparing for collision. 2013-10-15 05:41:42 +01:00
photonstorm dd695e066f More tilemap tweaks. 2013-10-14 19:37:52 +01:00
Richard Davey 6147e07a5f Merge pull request #104 from alvinsight/dev
Loads of new examples, some more bug fixes, all of them work beautifully
2013-10-14 11:37:18 -07:00
Webeled 969fa46484 Loads of new examples, some more bug fixes, all of them work beautifully 2013-10-14 19:32:07 +01:00
Richard Davey faf432bdb0 Merge pull request #102 from alvinsight/dev
Well, almost every example works with 1.0.7 except multiple anims, plus some funky tweens examples, and renamed a lot of files
2013-10-14 05:47:38 -07:00
Webeled 44613f7140 Should resolve the conflict 2013-10-14 13:40:02 +01:00
photonstorm 78dbb1aa59 Tidying up the repo. 2013-10-14 13:20:52 +01:00
photonstorm c6bf67c392 Group.alpha exposed and instance returns added to Loader functions. 2013-10-13 20:28:06 +01:00
photonstorm e98aa205ea Sprite.destroy is back in business. 2013-10-13 01:29:57 +01:00
Webeled 786aa2900e Final commit of the day 2013-10-11 22:49:51 +01:00
Webeled eb98998046 Testing 2013-10-11 22:29:50 +01:00
Webeled 3acdad92cb First commi using the new software 2013-10-11 22:26:27 +01:00
photonstorm 574f4f351b Github Issue #101 fixed. Plus more Tilemap updates. 2013-10-11 20:02:12 +01:00
photonstorm 0201baef11 And Tilemaps are rendering again - and much better than ever before :) Just one final optimisation pass to do and then it's on to collision. 2013-10-11 18:18:27 +01:00
photonstorm cf414394c3 Tileset working, map coming next. 2013-10-11 06:30:28 +01:00
photonstorm b868c2cb1b Started revamp of the Tilemap system. Also removed old 'Advanced Physics' and dropped in p2.js which is what I hope we'll eventually use. 2013-10-11 04:42:11 +01:00
photonstorm a7230aa769 Sprite.loadTexture added. 2013-10-10 09:03:38 +01:00
photonstorm f10f9324ad Animation.killOnComplete added and fixed a few issues in the Tanks game. 2013-10-09 13:36:57 +01:00
photonstorm 29acf7fb4b Enemy tanks, now firing. 2013-10-09 07:11:36 +01:00
photonstorm ca9321ef42 Updated physics body to use localTransform. Updated tanks demo. 2013-10-09 05:13:38 +01:00
photonstorm 83a00862be Lots of new examples and updates. 2013-10-09 04:31:08 +01:00
Richard Davey 1c577d3674 Fixed RandomDataGenerator.sow 2013-10-08 22:55:27 +01:00
photonstorm f5584bdfe5 Lots of fixes and updates to ArcadePhysics and Group, plus more examples. 2013-10-08 21:09:46 +01:00
photonstorm ebc4e5dc3d New examples HTML page added. 2013-10-08 12:52:20 +01:00
photonstorm fa692653e3 Final commit before rebuilding the Tilemap system. 2013-10-08 10:52:15 +01:00
photonstorm c307f79102 Added Sprite.fixedToCamera, fixed Angular Velocity and Acceleration, fixed jittery Camera, added skipQuadTree flag and created lots more examples. 2013-10-08 00:58:20 +01:00
photonstorm 1bc6ac25fa Preparing to merge new examples. 2013-10-07 22:15:28 +01:00
Richard Davey d4149a8f9a Setting up for this weeks work. 2013-10-07 22:15:28 +01:00
Richard Davey 9ed2dc8e89 Merge pull request #93 from alvinsight/dev
Changed all the examples I could so most of them now work with 1.0.7, and removed the self executing anonymous functions
2013-10-07 14:15:00 -07:00
Webeled 1a522ea786 Removed the self-executing functions 2013-10-07 21:32:34 +01:00
Webeled 77b553ac2a Test 2013-10-07 20:56:44 +01:00
Richard Davey 664c512a99 Fixed small typo. 2013-10-06 16:27:39 +01:00
Richard Davey 47e1b1b54b Sprite optimisations. 2013-10-04 19:00:55 +01:00
Richard Davey 455b18b7ec Sprite optimisations :) 2013-10-04 18:09:56 +01:00
Richard Davey c00bf96603 World and Camera updates nearly complete. 2013-10-04 16:51:24 +01:00
Richard Davey e8bed83ac3 Making some major changes to Camera and World. 2013-10-04 14:41:15 +01:00
Richard Davey 54f073e5cb Testing some new Camera tricks. 2013-10-03 23:20:24 +01:00
Richard Davey c8760b4341 Docs update. 2013-10-03 04:17:44 +01:00
Richard Davey 96da57cac0 Fixed up the namespace in the documentation and finished off all sections other than Game Objects and Physics (yuck). 2013-10-03 02:38:35 +01:00
Richard Davey f832bacfd6 More Docs! 2013-10-03 01:21:08 +01:00
Richard Davey e85643abf4 Yet more documentation done. 2013-10-02 20:18:24 +01:00
Richard Davey 868ae81bab Input, Loader and Math docs tidied up. 2013-10-02 15:05:55 +01:00
Richard Davey 1a2dc05609 Input and keyboard docs. 2013-10-02 13:18:58 +01:00
Richard Davey 852e82d0ca More docs. 2013-10-02 12:11:22 +01:00
Richard Davey 2a01fbb0e8 Merge pull request #87 from STuFF/patch-1
fix typo
2013-10-02 03:23:53 -07:00
Richard Davey 6ce6330f50 More docs. 2013-10-02 11:22:48 +01:00
Nicolas Challeil d2bd2e1600 fix typo
small contribution is small :)
2013-10-02 09:46:42 +02:00
Richard Davey 82325ecc8a Finished Group documentation. 2013-10-02 01:51:30 +01:00
Richard Davey e5b1faace6 Preparing more documentation. 2013-10-02 01:16:40 +01:00
Richard Davey 7c7cd8b01d More docs and quick patch to stop the body.allowRotation messing things up. 2013-10-01 16:56:47 +01:00
Richard Davey ca113b85aa More docs coming on. 2013-10-01 16:39:39 +01:00
Richard Davey a38ad2d1a9 Merge pull request #85 from onedayitwillmake/dev
Fixed accidentally overwroting remove function with a prepend function
2013-10-01 08:16:16 -07:00
Richard Davey 9b4b267e7a Working through building the docs. 2013-10-01 16:15:45 +01:00
Mario Gonzalez f593afd164 Fixed accidentally overwroting remove function with a prepend function 2013-10-01 10:08:09 -04:00
Richard Davey 0a98bb67d8 jsdoc blocks added to every file and tidied up. 2013-10-01 15:05:30 +01:00
Richard Davey 305b12d76b Adding docs. 2013-10-01 15:01:46 +01:00
Richard Davey fa15f8015d Fixed bug in LinkedList#remove that could cause first to point to a dead node 2013-10-01 11:28:57 +01:00
Richard Davey 3740ea05ee Merge pull request #84 from onedayitwillmake/dev
Fixed bug in LinkedList#remove that could cause first to point to a dead node
2013-10-01 03:01:38 -07:00
Mario Gonzalez fa8ad51c79 Fixed bug in LinkedList#remove that could cause first/tail to be have pointers to dead node 2013-09-30 22:06:48 -04:00
Richard Davey 480d90b009 * Removed the callbackContext parameter from Group.callAll because it's no longer needed.
* Updated Group.forEach, forEachAlive and forEachDead so you can now pass as many parameters as you want, which will all be given to the callback after the child.
* Updated build script so it can be run from the command-line and includes UMD wrappers (thanks iaincarsberg)
2013-10-01 02:19:08 +01:00
Richard Davey 8668b82ef6 * Fixed issue causing Keyboard.justPressed to always fire (thanks stemkoski)
* Added Keyboard.addKey() which creates a new Phaser.Key object that can be polled for updates, pressed states, etc. See the 2 new examples showing use.
2013-10-01 01:18:29 +01:00
Richard Davey fa1ed04aa8 Build 2013-09-30 19:54:43 +01:00
Richard Davey 83fc38344c Merge pull request #80 from webeled/dev
Tons of new examples
2013-09-30 11:53:55 -07:00
Webeled 5afce4bf8e Revert "Manual update"
This reverts commit 4b177e0a9b.
2013-09-30 19:18:33 +01:00
Webeled 933edb203f Final Commit of the day,
Final commit, the wip/examples folder can be removed,
2013-09-30 19:13:01 +01:00
Webeled bdc8edea9d Lots of new examples :)
Lots of new examples, the wip/examples folder can be destoryed I think
2013-09-30 17:31:03 +01:00
Richard Davey 16b1913de1 * Fixed issue in Sound.play where if you gave a missing marker it would play the whole sound sprite instead.
* Button.setFrames will set the current frame based on the button state immediately.
* InputHandler now creates the _pointerData array on creation and populates with one empty set of values, so pointerOver etc all work before a start call.
* Added Canvas.setUserSelect() to disable touchCallouts and user selections within the canvas.
* When the game boots it will now by default disable user-select and touch action events on the game canvas.
* Loaded.setPreloadSprite now rounds the width/height values and starts from 1. This fixes canvas draw errors in IE9/10 and Firefox.
2013-09-30 17:12:22 +01:00
Webeled 4b177e0a9b Manual update 2013-09-30 13:26:56 +01:00
Richard Davey 8d17e1f963 Sound duration fixes. 2013-09-30 12:17:21 +01:00
Richard Davey e846f3cbac Fix for incorrect new particle positioning (issue #73) 2013-09-30 12:17:21 +01:00
Richard Davey e3384b7ff7 Merge pull request #71 from webeled/dev
More examples migrated across.
2013-09-30 04:16:44 -07:00
Richard Davey c5d90a7722 Merge pull request #74 from cottonflop/dev
Fix for incorrect new particle positioning (issue #73)
2013-09-30 03:20:11 -07:00
Richard Davey b0a9c646c9 Merge pull request #76 from XekeDeath/dev
Fix for particles emitting in the wrong area when using emitter.width/height. And small change to make animation looping more robust.
2013-09-30 03:16:33 -07:00
Richard Davey 31bbf05ace * Fixed small bug stopping Tween.pause / resume from resuming correctly when called directly.
* Fixed an issue where Tweens.removeAll wasn't clearing tweens in the addition queue.
* Change: When you swap State all active tweens are now purged.
2013-09-30 11:15:50 +01:00
XekeDeath 62b5aa9bd9 Removed redundant assignment. 2013-09-30 13:28:17 +10:00
XekeDeath ce3e1708e0 Merge branch 'dev' of https://github.com/XekeDeath/phaser into dev 2013-09-30 13:04:29 +10:00
XekeDeath 80e80ddccb Make animation looping robust when skipping frames. 2013-09-30 13:04:22 +10:00
XekeDeath 29dbbcae52 Fix Particle Emitters when using Emitter width/height 2013-09-30 13:02:22 +10:00
Betsy Cottonflop 40b968028a Fix for incorrect new particle positioning 2013-09-28 16:52:37 -07:00
Webeled 8096dc67f5 Corrected few typos and added a keyboard exampl 2013-09-27 18:25:18 +01:00
Webeled efa01dcaa3 Final commit of the day more groups examples 2013-09-27 18:06:36 +01:00
Richard Davey 497d15b5bc Sprite.play 2013-09-27 13:47:22 +01:00
Webeled 903b11b730 Groups examples and some boolean checks corrected 2013-09-27 13:27:15 +01:00
Richard Davey 18c695e9dd PixiPatch and other 1.0.7 features 2013-09-27 09:57:08 +01:00
Richard Davey 6353d8c7ab Fixed some eases. 2013-09-26 15:22:49 +01:00
Richard Davey 3a369d5485 Added zwoptex Phaser template. 2013-09-26 11:25:43 +01:00
Richard Davey e77dba402c Beta warning added. 2013-09-24 16:02:58 +01:00
Richard Davey 891369b197 Preparing for 1.0.6 release, but moving physics changes to dev. 2013-09-24 15:28:29 +01:00
Richard Davey 51049128f5 Collision fixes for testing 2013-09-23 22:23:17 +01:00
Richard Davey 257cbe3be8 Much more stable collision, just need to refactor the Tilemap handling - see if I can optimise it a bit too. 2013-09-23 03:26:08 +01:00
Richard Davey bc02a1a05e Fixing collision issues 2013-09-23 01:06:09 +01:00
Richard Davey b69b3db486 1.0.6a 2013-09-22 23:07:12 +01:00
Richard Davey 093bf8343d Graphics fixes and other changes 2013-09-22 22:55:34 +01:00
Richard Davey 02723d4774 Merge pull request #62 from TheJare/fixbmtext
BitmapText fixes
2013-09-22 14:33:16 -07:00
Richard Davey 6b9484aa80 Merge pull request #60 from TheJare/master
Fix bug in StateManager...
2013-09-22 14:32:25 -07:00
Richard Davey f66e6326e3 Merge pull request #61 from powerfear/master
make tweens chainable with .to
2013-09-22 14:13:30 -07:00
Richard Davey 20f63c0af2 Fixed Graphics not working correctly. 2013-09-22 15:22:45 +01:00
Richard Davey 9479c79d79 Merge pull request #63 from luizbills/master
fix antialias bug
2013-09-22 02:14:15 -07:00
TheJare 557160c3c2 Fixes to math library 2013-09-22 03:43:10 +02:00
Luiz "Bills" 8132427870 fix antialias bug 2013-09-21 21:40:36 -03:00
TheJare 15ad941908 Alternative way to specify tile size in spritesheets: negative means how many tiles there are 2013-09-21 19:23:25 +02:00
Richard Davey d1ea96fd83 Input updates 2013-09-21 13:07:06 +01:00
powerfear c36543a261 make tweens chain loopable 2013-09-20 21:47:58 -04:00
TheJare e4595d2a41 Fix box dimensions in PIXI.BitmapText. Support anchor in Phaser.BitmapText 2013-09-21 02:29:14 +02:00
TheJare a4bc69c2f7 Fix box dimensions in PIXI.BitmapText. Support anchor in Phaser.BitmapText 2013-09-21 01:03:19 +01:00
powerfear f31d56584d make tweens chainable with .to
Allow successive .to calls to chain tweens, and an example using it.
2013-09-20 19:14:50 -04:00
Richard Davey 45426be0bc Assets update 2013-09-20 23:21:12 +01:00
TheJare 4b6147d3e3 Fix bug in StateManager where a state's update function might not get called if it has an empty preload function 2013-09-20 22:42:04 +01:00
Richard Davey 8452fa0fd4 Missing assets merged back in! 2013-09-20 17:13:26 +01:00
Richard Davey 68f45709d8 Merge pull request #56 from cocoademon/master
Some small animation fixes
2013-09-20 08:56:49 -07:00
Richard Davey 8c41b3253c 1.0.5 package 2013-09-20 14:00:49 +01:00
Richard Davey a415e779d1 Final 1.0.5 release. 2013-09-20 13:55:33 +01:00
Cameron Foale 61b9e119cb Incorrect input array in FrameData.getFrames 2013-09-20 17:48:38 +10:00
Cameron Foale ec3fc8f307 Fixes numeric frame indexes on animations 2013-09-20 17:39:02 +10:00
Richard Davey 9e88da5c66 Multiple animation fixes in place. 2013-09-19 23:47:50 +01:00
Richard Davey e938e41c73 Merge pull request #54 from webeled/master
Lots of JSDdocs done, and some camera examples
2013-09-19 12:15:26 -07:00
Webeled 1b5c1f18fe More camera examples 2013-09-19 17:47:12 +02:00
Webeled 26a595cd44 JSDocs update ;) 2013-09-19 16:34:48 +02:00
Richard Davey 3f1cafe21f Put the famous idnetityMatrix typo back in so it doesn't break Pixi 2013-09-19 13:33:51 +01:00
Richard Davey 7dd63df087 Merge pull request #52 from cocoademon/master
Make Phaser.Text play nicely with scrolling, by using an explicit x, y
2013-09-19 05:26:22 -07:00
Webeled 78a062dfb6 Updated my files and the documentation checklist 2013-09-19 13:17:49 +02:00
Webeled 6e4631a849 First commit of the day 2013-09-19 10:36:15 +02:00
Cameron Foale 6fde862f61 Make Phaser.Text play nicely with scrolling, by using an explicit x, y 2013-09-19 16:57:19 +10:00
Cameron FoaleandCameron Foale 4f969901da Fixed typo 'indetityMatrix' in RenderTexture 2013-09-19 16:41:34 +10:00
Richard Davey c5fc5e3394 Fixed various issues in the TweenManager, added length property to Group and improved the build script. 2013-09-19 04:45:08 +01:00
Richard Davey cf26f68693 Added Math.numberArray 2013-09-18 14:08:26 +01:00
Richard Davey 47834ad478 Fixed issue in FrameData.getFrameIndexes where the input array was being ignored. 2013-09-18 14:02:31 +01:00
Richard Davey 91c07ea37d Animation delay put back to normal 2013-09-18 06:41:41 +01:00
Richard Davey d9a49797c4 1.0.4 release 2013-09-18 06:34:56 +01:00
Richard Davey a102859622 Added some links to the readme. 2013-09-17 16:59:04 +01:00
Richard Davey a899d24d4c Small readme update 2013-09-17 16:54:46 +01:00
Richard Davey 3c5ea01e09 1.0.3 release - fixed Text and Bitmap Fonts, Animation documentation and more examples 2013-09-17 16:50:47 +01:00
Richard Davey f4734b1143 Merge pull request #46 from webeled/master
jsdocs update plus some audio, button and camera examples.
2013-09-16 13:25:17 -07:00
Webeled bb9761aaf4 It loops but still problems on the constructor 2013-09-16 17:40:56 +02:00
Webeled fc584cf6bc Examples (audio, button,camera), and docs
Created some examples (audio, button,camera), and documented the source
code along the way
2013-09-16 16:37:30 +02:00
Richard Davey 17e208a95e 1.0.2 build 2013-09-16 01:53:53 +01:00
Richard Davey e3869ff3ac * Fixed a bug in the AnimationManager where useNumericIndex was always set to true
* Added in lots of Particle examples
* Added in the start of a Breakout game
* Added in the start of a Platformer game
2013-09-16 01:52:15 +01:00
Richard Davey e705509d29 Added lots of particles examples. 2013-09-16 01:08:06 +01:00
Richard Davey 8c9a7c8bc7 Adding more examples in. 2013-09-15 20:45:00 +01:00
Richard Davey f069107e55 1.0.1 release - fixes issues in tile map collision, additional Animation stop checks and updated package license. 2013-09-15 03:58:38 +01:00
Richard Davey 49a6ba2c02 Updated Group to fix some issues with not checking children 2013-09-15 00:14:45 +01:00
Richard Davey 1bf838a4c4 Final 1.0 push 2013-09-13 18:00:59 +01:00
Richard Davey 48161f5c24 1.0 release versions ready. 2013-09-13 17:52:01 +01:00
Richard Davey 70233b7508 Updating examples with new runner and menu system. 2013-09-13 17:48:47 +01:00
Richard Davey ad0d32b7aa Formatting updates. 2013-09-13 16:42:33 +01:00
Richard Davey 505e808318 Updated README. 2013-09-13 16:34:11 +01:00
Richard Davey 07298c8fcd More tidying up. 2013-09-13 16:24:01 +01:00
Richard Davey f664a4971b Tidying up for 1.0 release push to master. 2013-09-13 16:16:48 +01:00
Richard Davey 7c6e6df91a State swap example done and working. 2013-09-13 05:44:04 +01:00
Richard Davey fd0a071cb3 Added Sprite.centerOn(x,y) and fixed the InputHander snap as a result. 2013-09-13 04:37:06 +01:00
Richard Davey 62d77e7038 Small new demo and refactored collision list - now far less comparisons to perform! 2013-09-13 04:22:12 +01:00
Richard Davey 0a42269479 Group vs. Group collision working - also fixed a bug in the Body.reset function that was causing some lovely physics errors :) 2013-09-13 03:52:05 +01:00
Richard Davey ecc91fb4e0 More collision test cases and fixing a few issues as I go :) 2013-09-13 03:07:39 +01:00
Richard Davey f812b92b8a Creating test cases. 2013-09-13 02:07:58 +01:00
Richard Davey a1450680a4 Part way through re-factoring the collision handler 2013-09-13 00:53:03 +01:00
Richard Davey 9f687b4f8a Adding Type support for collision checks. 2013-09-12 21:54:41 +01:00
Richard Davey 79dc3566f4 Fixed some issues in Tilemap collision, updated the Emitter so x/y controls the point of emission (to stop collision getting out of whack) and fixed the postUpdate in body. 2013-09-12 20:59:56 +01:00
Richard Davey 336de314a1 Fixed an issue where the Tile.physicsElapsed would go insane if the game has been paused for a long time. 2013-09-12 16:18:44 +01:00
Richard Davey 92e86494e3 Tilemap Collision in and working :) Needs testing against Groups now. 2013-09-12 15:39:52 +01:00
Richard Davey d211cf669c Some maps :) 2013-09-12 04:56:33 +01:00
Richard Davey dbaf7269e9 Promoted the Tilemap to a DisplayObject and vastly simplified the load process. 2013-09-12 04:24:01 +01:00
Richard Davey 3d22d0e169 Fixed a bug in the tilemap rendering so the tile offsets were wrong. Now renders perfectly :) Also fixed issue that would cause the World to resize smaller than the game size (not allowed for rendering reasons). 2013-09-12 02:18:23 +01:00
Richard Davey 89b00db103 Tilemap Rendering is working :) 2013-09-12 00:55:27 +01:00
Richard Davey 95374339b9 Added a Sample Plugin and tested out the Plugin Manager. Working great :) 2013-09-11 17:32:53 +01:00
Richard Davey fba731e740 Added optional "pixel perfect" input checks and tested against static sprites, animated sprites, physics sprites and sprites positioned outside the screen (needing camera shift to appear). 2013-09-11 16:25:46 +01:00
Richard Davey f260108433 Tidying up source code for release. Also refactored World to use a Group instance, rather tha duplicate functions. 2013-09-11 13:21:07 +01:00
Richard Davey 87858d6bbf Fixed a bug stopping legacy Audio from starting correctly. Also fixed an issue in the Loader causing it to not load the next file if an unsupported audio file was encountered. Fixed audio playback issues on Firefox/Waterfox as a result. 2013-09-11 11:33:27 +01:00
Richard Davey e79dd5856d Added the ability to crop a sprite with a custom Rectangle. 2013-09-11 03:55:53 +01:00
Richard Davey 48ed27dfcc Finished off RenderTexture. Sprites can now accept a RenderTexture or a key when you create them. RenderTextures are also now stored in the cache under their own key, making re-using them across other Sprites much easier. Also ported over all of the Tilemap classes, but need to get them rendering. 2013-09-11 02:57:36 +01:00
Richard Davey f885f7b023 Added CSS3Filters plugin. Also modified Sprite to contain preUpdate call, so that update can be over-ridden by custom Classes + added an example for this. 2013-09-11 00:35:21 +01:00
Richard Davey e2eddc8b24 Added Full Screen support and tested it. Also added in the BitmapText game object and custom XML loader. Game now sends a pause and resume signal, which the TweenManager listens to and handles correctly. 2013-09-10 23:51:35 +01:00
Richard Davey e41e35fd09 Fixed an error that stopped 2 tweens from being able to run on the same object. Also refactored a lot of the classes to remove prototype properties and move them to local instance properties. 2013-09-10 20:40:34 +01:00
Richard Davey a486bf6b4a Phaser now running on iOS. Also fixed a legacy bug where a pending sound wouldn't play once it was touch unlocked. Also fixed Input not working on WebGL contexts. Added WebGL texture updates to the Group/World swap functions. 2013-09-10 16:46:39 +01:00
Richard Davey 5da0e42be4 Added in the Color Utils and removed the less important functions into ColorHarmony plugin. Updated Stage so backgroundColor can be a string or integer now. 2013-09-10 14:00:46 +01:00
Richard Davey 15fe5ed6c8 Fixed the Bring to Top bug and also fixed Group/World.swap when the child was a tail node. Also improved Group.dump significantly. Fixed Phaser.Utils namespace clash too. 2013-09-10 12:46:14 +01:00
Richard Davey 609ea7ec8f Added ability to Scale particles when emitted. 2013-09-10 11:18:50 +01:00
Richard Davey 4f950ae801 Fixed a fantastic FrameData bug. Also added support to the Emitter to handle multiple image keys and/or frames. 2013-09-10 11:09:25 +01:00
Richard Davey 5d3fe891cd Particle Emitter in and working. Nice and fast, and a lot more flexible than before. 2013-09-10 01:26:50 +01:00
Richard Davey 2ba6b4ff67 Added support for Pointer Lock API. 2013-09-09 19:59:31 +01:00
Richard Davey 60f0e8967f Added Phaser.Graphics and fixed the Out of World Bounds call. 2013-09-09 17:01:59 +01:00
Richard Davey 30fc4099c6 Out of bounds and Sprite events hooked up 2013-09-09 13:29:33 +01:00
Richard Davey ee007cd28e Added in the game scaling handler and updated Stage 2013-09-09 12:35:20 +01:00
Richard Davey c904475ae6 Added in the game scaling handler and updated Stage 2013-09-09 12:35:09 +01:00
Richard Davey 13d6ab512b Fixed the Button frame issue and Down states now work properly 2013-09-09 10:30:01 +01:00
Richard Davey 9b6c819e0e Input Component done and new Button object done and included. Also finished the build script. 2013-09-09 00:30:44 +01:00
Richard Davey 50624c1552 Input Handler working. Dragging, sliding, click detection, multi-touch. Appears to be an issue with bringToTop but it's most likely a problem with the swapChild function rather than Input. 2013-09-08 22:58:15 +01:00
Richard Davey ebda1f99e3 Input Handler 90% there. 2013-09-08 22:38:19 +01:00
Richard Davey abe344b408 More work on the pointer handlers, nearly there! 2013-09-08 17:39:23 +01:00
Richard Davey 90b1946c25 Input Handler mostly restored 2013-09-08 13:23:21 +01:00
Richard Davey 78598ae54a Implemented my own LinkedList class to make the new Input Handler easier to work with. And also just generally useful to have too. 2013-09-08 11:24:41 +01:00
Richard Davey fe6664eac7 Fixed the Body collide issues and optimised the process at the same time. Now the QuadTree appears to work perfectly as a result. Bonus! 2013-09-08 01:24:59 +01:00
Richard Davey bb5d8ca170 a 2013-09-07 21:12:47 +01:00
Richard Davey eb7af3d2a2 Group nearly done. Sprite.anchor appears to be broken though, must fix. 2013-09-06 20:20:58 +01:00
Richard Davey 822a2df289 Lots of work on Group and also resolved the issue of the core game loop structure not being quite right. 2013-09-06 15:00:05 +01:00
Richard Davey 0c97e8e151 Starting work on Group. 2013-09-05 21:07:44 +01:00
Richard Davey b2fa345c9d console banner maker 2013-09-05 03:35:12 +01:00
Richard Davey c552d86639 Added swapChildren to Phaser.World 2013-09-05 02:11:54 +01:00
Richard Davey 4d4f7d3d56 Now working across child sets too :) 2013-09-05 01:57:28 +01:00
Richard Davey aa0d8ff238 Swap Child appears to be working. Time to tested a deeply nested set. 2013-09-05 01:34:22 +01:00
Richard Davey 87d52bd85e Linked List node swap 2013-09-05 01:12:34 +01:00
Richard Davey 912d6e46aa ... 2013-09-05 00:24:01 +01:00
Richard Davey 55cf10a085 LL work 2013-09-04 22:53:13 +01:00
Richard Davey ca0d1eb8af More node manipulations .. nearly there! 2013-09-04 21:34:07 +01:00
Richard Davey f4dab1847e Working on Linked List node swapping. 2013-09-04 21:03:39 +01:00
Richard Davey 10bc22b717 Motion helper functions added to the ArcadePhysics class. 2013-09-04 16:12:58 +01:00
Richard Davey 128bdccd79 Sorted out the QuadTree issues and resolved a small but vital bug in separateX, also re-organised the collision flags in Body. 2013-09-04 13:54:55 +01:00
Richard Davey d44261b191 sublime 2013-09-04 04:59:29 +01:00
Richard Davey b2263c16c6 Patched the QuadTree, now working a whole lot better but am worried it's still working out too many collisions. 2013-09-04 04:54:43 +01:00
Richard Davey 3f3b6bfd35 Brand new highly optimised QuadTree added, populated by the game loop and world ready to be queried as often as you want in your game loop, without creating hundreds of new QuadTrees each frame. 2013-09-04 03:48:15 +01:00
Richard Davey 2a353a0327 Flixel physics optimised about as much as it can be. Also added world and local gravity support and flag to toggle it on / off. 2013-09-04 01:10:01 +01:00
Richard Davey 0f438d5221 separateX up and working sweet with gc spike removal too 2013-09-03 19:34:38 +01:00
Richard Davey a27f6d6562 Forces working, collision half way there. 2013-09-03 17:28:12 +01:00
Richard Davey 2fe8a3a0a7 Physics integration and a fix to Tween that stopped the repeat/yoyo from working. 2013-09-03 17:07:05 +01:00
Richard Davey bdc1c2ceb9 Sorted out the bounds for when sprites are in trimmed texture atlases to stop the physics checks going insane. Also bundled in Advanced Physics lib, although not hooked up yet. 2013-09-03 15:35:40 +01:00
Richard Davey 923c2504ba One more text demo just for fun :) 2013-09-03 06:35:59 +01:00
Richard Davey 8a90a87492 Text converted and a couple of examples created. Using new extend system, so much smaller classes now. 2013-09-03 06:02:47 +01:00
Richard Davey 5acb4e9f1b Borrowed the 'extends' system from jQuery and now the codebase will be considerably smaller :) TileSprite already updated to new format. 2013-09-03 04:58:30 +01:00
Richard Davey e28cdbeb6a Moving to using a small extend / mixin method to avoid code repeating now we're extending Pixi display objects. 2013-09-03 04:43:26 +01:00
Richard Davey 66e86e7d82 Tiling Sprite added 2013-09-03 03:19:42 +01:00
Richard Davey c18de53bab SoundManager converted and playing audio :) 2013-09-03 01:24:16 +01:00
Richard Davey ed13283f0f Tided up the cull / bounds demo. 2013-09-03 00:42:17 +01:00
Richard Davey 7c597999d4 Camera culling now in and working, although you need to enable it on a per sprite basis. Also fixed a few small bugs in the Animation Manager. 2013-09-02 23:22:24 +01:00
Richard Davey 6235f25184 LL 2013-09-01 22:02:42 +01:00
Richard Davey d31777972c Camera culling 2013-09-01 19:52:50 +01:00
Richard Davey 7bdcbf5c2a getBounds update. 2013-09-01 13:17:44 +01:00
Richard Davey 71b4cc532f Added Sprite.getBounds function 2013-09-01 11:15:13 +01:00
Richard Davey d54a92310d Optimised sprite a tiny bit more and created a couple of fun demos :) 2013-09-01 06:21:39 +01:00
Richard Davey fef28c6a6a Optimised update loop to reduce calculations if the transform doesn't change. 2013-09-01 05:50:47 +01:00
Richard Davey 6ef89826df Phew.. lots of transform matrix math over and I can finally get all 4 points of a Sprite, regardless of rotation, translation or scale of itself or any of its parents. 2013-09-01 05:29:53 +01:00
Richard Davey 12e5d2aceb ... 2013-09-01 05:22:08 +01:00
Richard Davey 801c2af9d4 Updated world so the update run uses the linked list. Sprite.getLocalPosition now almost working, but falls over for children. 2013-09-01 03:57:24 +01:00
Richard Davey 188d6239a3 Edge points in and working. 2013-09-01 03:15:27 +01:00
Richard Davey b742439db8 Now handles scaling and rotation. Time to get the offset. 2013-09-01 02:39:26 +01:00
Richard Davey 99e0934244 More late-night math. 2013-09-01 02:28:51 +01:00
Richard Davey 5d4da0ce66 Working out culling 2013-09-01 00:35:29 +01:00
Richard Davey 22847f6ade DebugUtils converted, re-name spaced the Input classes and started on Camera culling. 2013-08-31 21:50:34 +01:00
Richard Davey 70ee753859 The complete Phaser Input Manager suite is now ported across. Not tested in earnest yet, but all the grunt work is at least done. 2013-08-31 13:54:59 +01:00
Richard Davey f9aa7f7339 Fixed small bug in Game where AUTO didn't detect the lack of WebGL properly. Tidied up Math a bit more. 2013-08-30 20:05:29 +01:00
Richard Davey 54d98944e4 Mummy attack :) 2013-08-30 18:56:10 +01:00
Richard Davey e77f5da2cd Fixed the TweenManager and added support to GameObjectFactory, so you can create tweens easily now all hooked in to the internal game clock. Also added the AnimationManager into Sprite, so you can create and play animations directly from sprites nice and easily. 2013-08-30 17:09:43 +01:00
Richard Davey 936118bd91 AnimationManager done and in, need to fix texture update bug, otherwise finished. 2013-08-30 04:20:14 +01:00
Richard Davey a81a8effb4 Sprite Sheets now parse and render correctly too. 2013-08-30 02:18:00 +01:00
Richard Davey 1e59bc69fb Fixed bug in RequestAnimationFrame where the time wasn't being updated properly. 2013-08-30 02:00:30 +01:00
Richard Davey 559d75eba1 When Phaser loads images they are now added to the PIXI.BaseTextureCache. Also when it loads atlas data (regardless of the 3 formats) they are converted into PIXI TextureCache entries using UUIDs to avoid name clashes and to support index based atlases. 2013-08-30 01:50:17 +01:00
Richard Davey 4c1dacfa02 Loader can now parse both JSON Hash and JSON Array formated texture atlas files. 2013-08-29 22:53:55 +01:00
Richard Davey 5b036557c0 The start of World, also moved Game/Stage into core. 2013-08-29 21:57:36 +01:00
Richard Davey 6bf7bab917 Fixed some errors in Rectangle and more Pixi hooks added, now creating the Stage properly and rendering sprites. 2013-08-29 19:20:04 +01:00
Richard Davey 19483bafed Canvas and Stage added and starting to merge in Pixi deeply. 2013-08-29 17:20:59 +01:00
Richard Davey 16749edf20 More state swapping features and optimised Game.loop. 2013-08-29 15:14:56 +01:00
Richard Davey 3d4783980e StateManager improving in leaps and bounds. 2013-08-29 14:38:51 +01:00
Richard Davey 4bbcc380c5 State handling done. Refactored the Game constructor a LOT. Now works from within closures, outside of them, with Phaser.State objects or normal Objects with the right functions inside. Also fixed some small bugs in PluginManager and various scope issues with RAF. 2013-08-29 07:06:16 +01:00
Richard Davey 3c8cd20b70 RequestAnimationFrame done and optimised massively. PluginManager added (but needs testing). Game now fleshed out with all the state changing and core loop, also optimised heavily. Also Pixi integration started and the basics are working well :) 2013-08-29 03:52:59 +01:00
Richard Davey b8d3a61c97 Added the TweenManager 2013-08-29 00:09:12 +01:00
Richard Davey d323404676 Starting integration of tween.js 2013-08-28 21:29:25 +01:00
Richard Davey 8a09469798 Final methods added. 2013-08-28 19:18:34 +01:00
Richard Davey 9289f690eb Rectangle mostly done, needs the prototype functions adding and some test cases made. 2013-08-28 17:19:13 +01:00
Richard Davey 89fe2855e4 Fixed a few things in Circle and added the Point object. 2013-08-28 15:58:37 +01:00
Richard Davey 0f58945212 Circle and Math converted 2013-08-28 15:27:22 +01:00
Richard Davey 09def364c3 Farewell TypeScript, see you on the other side. 2013-08-28 07:02:57 +01:00
Richard Davey 0e55e644a9 Doc updates 2013-08-26 17:45:02 +01:00
Richard Davey 8a85155c08 Fixed the tilemap pre/post update hooks. 2013-08-25 10:35:58 +01:00
Richard Davey ecf61fc80c Updated Game.switchState to accept state objects and fixed the OrientationScreen. 2013-08-25 09:59:23 +01:00
Richard Davey c2745bec35 Pre-vacation push 2013-08-16 23:44:06 +01:00
Richard Davey c884bab7ec Fixed instance check issue in Game and tidied up the stageScaleMode inner loop. 2013-08-16 02:18:12 +01:00
Richard Davey f76ba6840f Animation and Input related fixes 2013-08-16 00:14:57 +01:00
Richard Davey 619b8415ed Reverting back to the only version of TypeScript that really works :( 2013-08-13 04:22:24 +01:00
Richard Davey 91dc7a4acf Tidying up and trying to fix more stupid TypeScript errors. 2013-08-12 04:08:15 +01:00
Richard Davey e74114f384 Docs 2013-08-12 00:52:35 +01:00
Richard Davey 142348f70b Updates 2013-08-11 21:31:35 +01:00
Richard Davey 7aa82a1cb0 All physics projections added. 2013-08-11 19:02:10 +01:00
Richard Davey c2d7fb7fab Merged N+ physics in and tidied up the Docs folder and logos. 2013-08-11 12:15:53 +01:00
Richard Davey aff7d99a8a Fixed bug where children of Groups wouldn't have their preUpdate methods called. 2013-08-09 20:03:36 +01:00
Richard Davey 0b1bcaf270 Set the default camera to direct itself to the Stage. 2013-08-09 18:44:45 +01:00
Richard Davey f9776f30fc Added the CanvasUtils class and moved some stuff out of Stage into it. 2013-08-09 17:47:08 +01:00
Richard Davey 8b2f1cca51 Various small fixes 2013-08-09 17:02:47 +01:00
Richard Davey e002827a20 Fixed load add 2013-08-09 16:56:38 +01:00
Richard Davey c2f0128797 Added types 2013-08-09 16:54:46 +01:00
Richard Davey 2d49a31ecd yuidoc scripts added. Tidied up the Docs folder. Added back in the Emitter and fixed the Tests that weren't compiling. 2013-08-09 05:08:54 +01:00
Richard Davey 9bf7d070f5 Added in the JS source files for doc generation and the definitions to csproj XML script. 2013-08-09 03:12:33 +01:00
Richard Davey 1248a6c06e Whole codebase updated to TypeScript 0.9.1, phew! 2013-08-08 19:16:47 +01:00
Richard Davey df32190db8 Updating for TypeScript 0.9.1, part 1. 2013-08-08 11:34:33 +01:00
Richard Davey 73745e5720 Fixed a few things in Tilemap and optimised the renderer a little bit. 2013-08-08 06:29:21 +01:00
Richard Davey 48f6d850c8 Fixed bug where a Tween with both yoyo and loop enabled would get out of sync. 2013-08-08 06:08:53 +01:00
Richard Davey ab7e55ef27 Added ability for the TimeManager to monitor the pause duration. This is then applied to tweens and other game services, meaning the tweens now restart properly after a pause resumes. 2013-08-08 05:43:22 +01:00
Richard Davey 5768336150 Tidied up the Loader so it now starts automatically, added required Signals and removed the old-style callbacks. 2013-08-08 04:35:13 +01:00
Richard Davey 04dcb29c88 WorldView now takes camera placement into account, so Buttons now work across multiple camera set-ups. 2013-08-08 03:24:26 +01:00
Richard Davey a174bbc6b3 Vastly optimised InputManager and Pointer is now aware of which camera it is over. 2013-08-08 03:05:59 +01:00
Richard Davey bc77c3f84e Updated Renderer system, now much easier to expand and maintain. 2013-08-08 01:07:22 +01:00
Richard Davey d7205992a5 Fixed some issues in dragging sprites with snap-to-center and world coordinates. 2013-08-07 00:00:12 +01:00
Richard Davey 77cc3858d9 Fixed the world drag issue across Sprite and Button. 2013-08-06 04:34:52 +01:00
Richard Davey a7873a3b74 Removed the FX project as it's no longer needed and tidied up the build folder. 2013-08-06 03:43:53 +01:00
Richard Davey 11954812c6 Clearing down the To Do list. 2013-08-06 03:14:48 +01:00
Richard Davey d1da4cbdef Fixed Firefox audio issue with the Loader and added defined functions for anonymous callbacks 2013-08-05 03:43:20 +01:00
Richard Davey 84ef32e62a Fixed Camera FX: Mirror and Scanlines and updated the tests. 2013-08-02 20:03:53 +01:00
Richard Davey f3dcd3e831 Plugin Support added and CameraFX re-enabled 2013-08-02 19:37:43 +01:00
Richard Davey 982faeedb8 Updating and fixing tests 2013-08-02 18:32:26 +01:00
Richard Davey 4c9c50584e Tidying up the physics libraries 2013-08-02 12:38:56 +01:00
Richard Davey 955909979d Preparing for 1.0 branch 2013-08-01 22:21:29 +01:00
Richard Davey ce27acd3ca Merge pull request #41 from pixelpicosean/097
Add typescript files for previous tests and 2 newly created tests.
2013-08-01 14:20:08 -07:00
Richard Davey 4f2c26df77 Fixed issue with Pointer speed not resetting and moved some more render methods to the Debug class. 2013-07-29 00:43:10 +01:00
Richard Davey 3038f6fcf8 Added optimised point in circle test to CircleUtils 2013-07-27 10:57:54 +01:00
Sean d4781a19d9 Add 2 more tests (rectangle utils). 2013-07-27 10:06:10 +08:00
Sean 7cae283a4c Add typescript source for the 46 tests added last time. 2013-07-27 09:59:27 +08:00
Sean 04106b1388 Merge branch 'photonstorm/097' 2013-07-20 10:13:31 +08:00
Richard Davey d80467a08a Some new filter tests added 2013-07-19 17:58:00 +01:00
Richard Davey c8d6fe6c01 Merge branch '097' of https://github.com/pixelpicosean/phaser into pixelpicosean-097 2013-07-19 17:38:55 +01:00
Richard Davey a5343b4bc0 Quick commit before I merge the new tests 2013-07-19 16:53:47 +01:00
Richard Davey 3c123293ba New CSS3 Filters component and Net class. 2013-07-19 04:57:14 +01:00
Richard Davey 9827e7522f Multiple fixes to remove the use of reserved words, making the YUI compressor work again. 2013-07-19 02:59:23 +01:00
Sean 727a06cd9b Merge branch 'photonstorm/097' 2013-07-18 19:25:32 +08:00
Sean 9f30f656bc 46 tests with assets and javascript code. 2013-07-18 15:13:58 +08:00
Richard Davey a2c756e37f Added ability for full Audio tag playback and iOS touch lock load support. 2013-07-16 23:32:47 +01:00
Richard Davey 72eb22128f SoundManager overhaul nearly finished. Proper Web Audio / Audio tag split, working across desktop and mobile. Includes iOS touch unlock restriction handling, auto decoding, global volume management, audio sprite support (for both web audio and audio tags) and playhead monitoring. 2013-07-16 14:45:08 +01:00
Richard Davey d0e886259d Getting ready to overhaul the sound manager. 2013-07-15 21:45:26 +01:00
Sean d620fc7796 Camera tests, some of them not finished because of bugs. 2013-07-13 22:47:32 +08:00
Richard Davey b3fff37faf Added todo items to repo 2013-07-13 12:38:59 +01:00
Sean 08fb303801 Merge remote-tracking branch 'photonstorm/097' into 097 2013-07-13 08:43:28 +08:00
Sean 945c9c1a0d Add assets and code template of camera fx tests. 2013-07-13 08:43:08 +08:00
Sean 6d21d39b19 Fix scrollfactor test for using new component based sprite. 2013-07-13 08:41:05 +08:00
Richard Davey dcce99ec60 Added the new Button game object and various other input and tilemap fixes. 2013-07-12 03:28:46 +01:00
Sean b0d3f6e192 Merge branch 'photonstorm/097' 2013-07-03 07:52:36 +08:00
Richard Davey c81cf0c882 Lots of Tilemap updates, moved the renderer out, added components and new tests. 2013-07-02 23:41:25 +01:00
Sean 4695f62d1d Merge branch 'photonstorm/097' 2013-06-28 06:55:26 +08:00
Richard Davey c647792c12 Physics updates 2013-06-26 14:18:48 +01:00
Richard Davey d19ad4976d Merged Advanced Physics with core. 2013-06-26 05:44:56 +01:00
Richard Davey 0591c7f2bd Doing one final commit before the task of merging physics with core. 2013-06-25 15:35:45 +01:00
Sean 6648cb3812 Merge branch 'photonstorm/097' 2013-06-22 07:42:09 +08:00
Richard Davey ec845155eb After hours and hours of debugging, polygon to polygon collision is now working perfectly :) 2013-06-21 23:39:29 +01:00
Richard Davey 829a1b00e4 Brand new physics system finally (mostly) working. Some poly issues to resolve, but it's running well. 2013-06-18 19:37:09 +01:00
Sean 80f5c0a67d Merge branch 'photonstorm/097' 2013-06-16 09:39:13 +08:00
Richard Davey 0a7513240a Refactor completed. Now to tie the physics and sprites together. 2013-06-14 18:54:12 +01:00
Richard Davey 533a4c2e30 Commiting before a small refactor of Shapes and Joints 2013-06-14 17:55:07 +01:00
Richard Davey dd8962d4b5 After a mammoth debugging session we now have advanced physics colliding and responding accurately :) 2013-06-14 15:18:41 +01:00
Richard Davey 114d1d2fbf Compiling, but not yet running correctly. Need to add body renderer next. 2013-06-14 04:13:00 +01:00
Richard Davey 232c96cc54 Space and Joints interface added. 2013-06-14 03:20:47 +01:00
Richard Davey 461f7ee54d Added lots more classes into the Advanced Physics package 2013-06-14 02:42:51 +01:00
Sean d848fa089d Merge branch 'photonstorm/097' 2013-06-14 08:41:39 +08:00
Sean 1bcbf91398 Add assets for tests and a simple camera scroll test. 2013-06-14 08:36:20 +08:00
Sean 7b6beddc0c Fix assets path. 2013-06-14 08:36:07 +08:00
Richard Davey 038cb213e8 Starting merge of the Advanced Physics classes and splitting off Flixel physics into ArcadePhysics. 2013-06-13 17:15:16 +01:00
Richard Davey 7dac2b6506 Added Group.bringToTop and updated Input component to use sprite getXY handler. 2013-06-13 01:55:32 +01:00
Richard Davey 2389c6c231 Added ability to detect if a given point is within a sprite or not, taking rotation and scaling into account. 2013-06-12 19:53:48 +01:00
Richard Davey c2533d1146 Finally a fully working bounding box that respects scale and rotation - the "in camera" check is now 100% accurate :) 2013-06-11 23:30:35 +01:00
Richard Davey c5f6817c4c Working sprite bounds / vertices regardless of scale or rotation 2013-06-11 21:30:15 +01:00
Richard Davey 1f8c809f53 cameraView working for center rotated sprites, just need to handle any point of rotation. 2013-06-07 19:18:39 +01:00
Richard Davey 3b9386727e Small refactoring and massively optimised the canvas renderer, also added new Mat3 class. 2013-06-07 16:27:33 +01:00
Richard Davey a30762ed8c Fixed world drag support and other input modifications. 2013-06-07 07:35:28 +01:00
Richard Davey 730594835a New Texture and Transform components which are now used by Sprite, Group and Camera. 2013-06-06 02:47:08 +01:00
Richard Davey 2f03f5fc43 Updated Loader component and fixed a few Pointer issues. 2013-06-05 02:58:16 +01:00
Richard Davey d42f396ba0 Lots of tweaks and fixes to the orientation and fullscreen classes 2013-06-05 01:49:08 +01:00
Richard Davey 82d4ba4538 Re-done the pointer handler so it respects the top-most rendered sprite in priority to anything below it, for both mouse over and click events. 2013-06-03 12:03:34 +01:00
Richard Davey 1c37cd1a96 Created DebugUtils class and started moving renderInfo methods to it. 2013-06-03 03:08:24 +01:00
Richard Davey 2de70d07a5 Fixed issue in Camera.inCamera check where it wouldn't take into consideration the Sprites scrollFactor. 2013-06-03 02:38:08 +01:00
Richard Davey b951b02de8 Input priority IDs working properly for drag events. 2013-06-03 01:22:14 +01:00
Richard Davey 2270da2479 Fixed drag sprite + offsets and center locking 2013-06-02 21:41:00 +01:00
Richard Davey f9f17ad353 Multi point input handler working 2013-06-02 14:19:12 +01:00
Richard Davey 49fe5ee65f Added Group IDs and references to Sprites, Group sorting, z-index values and child swapping. Also added all of the drag and bounds methods to Input. 2013-06-02 03:47:54 +01:00
Richard Davey 59f7a59312 Updated docs 2013-06-01 19:59:20 +01:00
Richard Davey 5b532ab2e4 Sprite.Input component added and working nicely. 2013-06-01 02:49:41 +01:00
Richard Davey b20a6ff85a Working my way through putting all the Tests back in and fixing issues as I go. 2013-06-01 01:30:36 +01:00
Richard Davey 31c4d8cb14 Adding in missing tests and fixing as we go 2013-05-31 19:28:16 +01:00
Richard Davey d510b785b1 Putting everything back together again :) 2013-05-31 18:21:32 +01:00
Richard Davey fe372af453 Commit before tidying up redundant files 2013-05-31 15:13:03 +01:00
Richard Davey 23ec3816db Added circleToRect intersection check. 2013-05-31 05:28:36 +01:00
Richard Davey 39e7b84cd9 Flixel level separation merged with the new Physics shapes. 2013-05-31 04:20:49 +01:00
Richard Davey 3e53c0671d About to start re-doing collideShapes 2013-05-30 23:03:56 +01:00
Richard Davey 498725c078 Moved the collision out into separateX and separateY 2013-05-30 13:25:48 +01:00
Richard Davey ce1523585f ScrollZone back in under the new renderer with new demos 2013-05-30 05:34:35 +01:00
Richard Davey f2054f8a2a Physics shape offset now finally working 2013-05-30 03:54:51 +01:00
Richard Davey 0fad46e04b Merged updateMotion with new PhysicsManager 2013-05-30 01:09:27 +01:00
Richard Davey c1eafe865a First pass at integrating the new physics system. 2013-05-29 21:39:08 +01:00
Richard Davey f3c9049e76 Camera updates, scrollFix check and some new pictures and tests. 2013-05-29 17:31:57 +01:00
Richard Davey 7b4374cabf Added loop and yoyo properties to Tweens 2013-05-29 15:45:34 +01:00
Richard Davey b1d836dfaf Scale tweaks 2013-05-29 12:24:25 +01:00
Richard Davey 2a26257caa Fixed scale, flippedX/Y and rotation so they all work from a single setTransform in any combination, taking the origin into account. Phew! 2013-05-29 11:40:05 +01:00
Richard Davey 09f57fa346 Preparing new tests 2013-05-29 02:58:56 +01:00
Richard Davey 3c0c349089 More refactoring for 1.0.0 2013-05-28 21:38:37 +01:00
Richard Davey 03b7467018 Tidying up before putting back together again 2013-05-28 09:37:32 +01:00
Richard Davey 4cef0d1d35 Tidying up 2013-05-25 11:17:11 +01:00
Richard Davey 204ec46b2b Refactoring ready for 1.0 release. 2013-05-25 04:21:24 +01:00
2042 changed files with 605245 additions and 137016 deletions
+6
View File
@@ -1 +1,7 @@
.DS_Store
.idea
Phaser OSX.sublime-project
Phaser OSX.sublime-workspace
Phaser.sublime-project
Phaser.sublime-workspace
node_modules
Binary file not shown.
+37
View File
@@ -0,0 +1,37 @@
<!DOCTYPE HTML>
<html>
<head>
<title>phaser - hello world</title>
<script src="phaser-min.js"></script>
</head>
<body>
<script type="text/javascript">
(function () {
var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });
function preload() {
game.load.image('logo', 'logo.png');
}
var logo;
function create() {
logo = game.add.sprite(0, 0, 'logo');
}
function update() {
}
})();
</script>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Before

Width:  |  Height:  |  Size: 809 B

After

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Before

Width:  |  Height:  |  Size: 612 KiB

After

Width:  |  Height:  |  Size: 612 KiB

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 KiB

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1021 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1022 KiB

+39
View File
@@ -0,0 +1,39 @@
{
"tags": {
"allowUnknownTags": true
},
"source": {
"include": [ "../src/Phaser.js", "../src/Intro.js", "../src/animation/", "../src/core/", "../src/geom/", "../src/input/", "../src/loader/", "../src/math/", "../src/net/", "../src/particles/", "../src/sound/", "../src/system/", "../src/time/", "../src/tween/", "../src/utils/" ],
"exclude": [],
"includePattern": ".+\\.js(doc)?$",
"excludePattern": "(^|\\/|\\\\)_"
},
"plugins" : ["plugins/markdown"],
"templates": {
"cleverLinks" : false,
"monospaceLinks" : false,
"default" : {
"outputSourceFiles" : true
},
"systemName" : "Phaser",
"footer" : "",
"copyright" : "Phaser Copyright © 2012-2013 Photon Storm Ltd.",
"navType" : "vertical",
"theme" : "cerulean",
"linenums" : true,
"collapseSymbols" : false,
"inverseNav" : true
},
"markdown" : {
"parser" : "gfm",
"hardwrap" : true
},
"opts": {
"template": "docstrap-master/template/",
"encoding": "utf8",
"destination": "./out/",
"recurse": true,
"private": false,
"lenient": true
}
}
+11
View File
@@ -0,0 +1,11 @@
node_modules*
components*
*.map
.idea*
ringojs-0.9*
dox*
testdocs*
themes*
+6
View File
@@ -0,0 +1,6 @@
node_modules*
components*
*.map
.idea*
npm-debug.log
+364
View File
@@ -0,0 +1,364 @@
"use strict";
/**
* @fileOverview Gruntfile tasks. These tasks are intended to help you when modifying the template. If you are
* just using the template, don't sweat this stuff. To use these tasks, you must install grunt, if you haven't already,
* and install the dependencies. All of this requires node.js, of course.
*
* Install grunt:
*
* npm install -g grunt-cli
*
* Then in the directory where you found this file:
*
* npm install
*
* And you are all set. See the individual tasks for details.
*
* @module Gruntfile
* @requires path
* @requires lodash
* @requires http
* @requires async
* @requires fs
*/
var path = require( "path" );
var sys = require( "lodash" );
var http = require( "http" );
var async = require( "async" );
var fs = require( "fs" );
// this rather odd arrangement of composing tasks like this to make sure this works on both
// windows and linux correctly. We can't depend on Grunt or Node to normalize
// paths for us because we shell out to make this work. So we gather up
// our relative paths here, normalize them later and then pass them into
// the shell to be run by JSDoc3.
/**
* The definition to run the development test files. This runs the files in `fixtures` with the
* project's `conf.json` file.
* @private
*/
var jsdocTestPages = {
src : ["./fixtures/*.js", "./README.md"],
dest : "./testdocs",
tutorials : "./fixtures/tutorials",
template : "./template",
config : "./template/jsdoc.conf.json",
options : " --lenient --verbose"
};
/**
* The definition to run the sample files. This runs the files in `fixtures` with the
* sample's `conf.json` file. No task directly exposes this configuration. The `fixtures` task
* modifies this for each swatch it finds and then run the docs command against it.
* @private
*/
var jsdocExamplePages = {
src : ["./fixtures/*.js", "./README.md"],
dest : "./themes",
tutorials : "",
template : "./template",
config : "./fixtures/example.conf.json",
options : " --lenient --verbose --recurse"
};
/**
* This definition provides the project's main, published documentation.
* @private
*/
var projectDocs = {
src : ["./Gruntfile*.js", "./README.md", "./template/publish.js"],
dest : "./dox",
tutorials : "",
template : "./template",
config : "./template/jsdoc.conf.json",
options : " --lenient --verbose --recurse --private"
};
/**
* Normalizes all paths from a JSDoc task definition and and returns an executable string that can be passed to the shell.
* @param {object} jsdoc A JSDoc definition
* @returns {string}
*/
function jsdocCommand( jsdoc ) {
var cmd = [];
cmd.unshift( jsdoc.options );
if ( jsdoc.tutorials.length > 0 ) {
cmd.push( "-u " + path.resolve( jsdoc.tutorials ) );
}
cmd.push( "-d " + path.resolve( jsdoc.dest ) );
cmd.push( "-t " + path.resolve( jsdoc.template ) );
cmd.push( "-c " + path.resolve( jsdoc.config ) );
sys.each( jsdoc.src, function ( src ) {
cmd.push( path.resolve( src ) );
} );
cmd.unshift( path.resolve( "./node_modules/jsdoc/jsdoc" ) );
return cmd.join( " " );
}
var tasks = {
shell : {
options : {
stdout : true,
stderr : true
},
/**
* TASK: Create the a documentation set for testing changes to the template
* @name shell:testdocs
* @memberOf module:Gruntfile
*/
testdocs : {
command : jsdocCommand( jsdocTestPages )
},
/**
* TASK: Create project documentation
* @name shell:dox
* @memberOf module:Gruntfile
*/
dox : {
command : jsdocCommand( projectDocs )
}
},
/**
* TASK: The less task creates the themed css file from main.less. The file is written to the template styles
* directory as site.[name of theme].css. Later the .conf file will look for the theme to apply based
* on this naming convention.
* @name less
* @memberOf module:Gruntfile
*/
less : {
dev : {
files : {
"template/static/styles/site.<%= jsdocConf.templates.theme %>.css" : "styles/main.less"
}
}
},
copy : {
docs : {
files : [
{expand : true, cwd : "dox/", src : ['**'], dest : '../docstrap-dox/'},
{expand : true, cwd : "themes/", src : ['**'], dest : '../docstrap-dox/themes'}
]
}
}
};
module.exports = function ( grunt ) {
tasks.jsdocConf = grunt.file.readJSON( 'template/jsdoc.conf.json' );
grunt.initConfig( tasks );
grunt.loadNpmTasks( 'grunt-contrib-less' );
grunt.loadNpmTasks( 'grunt-shell' );
grunt.loadNpmTasks( 'grunt-contrib-copy' );
grunt.registerTask( "default", ["docs"] );
/**
* Builds the project's documentation
* @name docs
* @memberof module:Gruntfile
*/
grunt.registerTask( "docs", "Create the project documentation", ["shell:dox"] );
/**
* Compile the CSS and create the project documentation
* @name dev
* @memberof module:Gruntfile
*/
grunt.registerTask( "dev", "Compile the CSS and create the project documentation", ["less","shell:dox"] );
/**
* TASK: Builds the main less file and then generates the test documents
* @name testdocs
* @memberof module:Gruntfile
*/
grunt.registerTask( "testdocs", "Builds the main less file and then generates the test documents", ["less:dev", "shell:testdocs"] );
/**
* TASK: Builds the whole shebang. Which means creating testdocs, the bootswatch fixtures and then resetting the
* styles directory.
* @name build
* @memberof module:Gruntfile
*/
grunt.registerTask( "build", "Builds the whole shebang. Which means creating testdocs, the bootswatch samples and then resetting the styles directory", ["testdocs", "shell:dox", "bootswatch", "examples", "apply", "copy"] );
/**
* TASK: Applies the theme in the conf file and applies it to the styles directory.
* @name apply
* @memberof module:Gruntfile
*/
grunt.registerTask( "apply", "Applies the theme in the conf file and applies it to the styles directory", function () {
var def = {
less : "http://bootswatch.com/" + tasks.jsdocConf.templates.theme + "/bootswatch.less",
lessVariables : "http://bootswatch.com/" + tasks.jsdocConf.templates.theme + "/variables.less"
};
grunt.registerTask( "swatch-apply", sys.partial( applyTheme, grunt, def ) );
grunt.task.run( ["swatch-apply"] );
} );
/**
* TASK: Grab all Bootswatch themes and create css from each one based on the main.less in the styles directory. NOTE that this will
* leave the last swatch downloaded in the styles directory, you will want to call "apply" afterwards
* @name bootswatch
* @memberof module:Gruntfile
*/
grunt.registerTask( "bootswatch", "Grab all Bootswatch themes and create css from each one based on the main.less in the styles directory", function () {
var toRun = [];
var done = this.async();
getBootSwatchList( function ( err, list ) {
if ( err ) {return done( err );}
sys.each( list.themes, function ( entry ) {
toRun.push( "swatch" + entry.name );
grunt.registerTask( "swatch" + entry.name, sys.partial( applyTheme, grunt, entry ) );
var key = "template/static/styles/site." + entry.name.toLowerCase() + ".css";
var def = {};
def[key] = "styles/main.less";
tasks.less["swatch" + entry.name] = {
files : def
};
toRun.push( "less:swatch" + entry.name );
} );
grunt.task.run( toRun );
done();
} );
} );
/**
* TASK:Create fixtures from the themes. The files must have been built first from the bootswatch task.
* @name examples
* @memberof module:Gruntfile
*/
grunt.registerTask( "examples", "Create samples from the themes", function () {
var toRun = [];
var done = this.async();
getBootSwatchList( function ( err, list ) {
if ( err ) {return done( err );}
sys.each( list.themes, function ( entry ) {
var conf = grunt.file.readJSON( './fixtures/example.conf.json' );
conf.templates.theme = entry.name.toLowerCase();
grunt.file.write( "tmp/example.conf." + conf.templates.theme + ".json", JSON.stringify( conf, null, 4 ) );
var jsdenv = sys.cloneDeep( jsdocExamplePages );
jsdenv.config = "./tmp/example.conf." + conf.templates.theme + ".json";
jsdenv.dest = "./themes/" + conf.templates.theme;
tasks.shell["example" + conf.templates.theme] = {
command : jsdocCommand( jsdenv )
};
toRun.push( "shell:example" + conf.templates.theme );
} );
grunt.registerTask( "cleanup", "", function () {
grunt.file["delete"]( "tmp/" );
} );
toRun.push( "cleanup" );
grunt.task.run( toRun );
done();
} );
} );
};
/**
* Applies one of the Bootswatch themes to the working `styles` directory. When you want to modify a particular theme, this where you
* get the basis for it. The files are written to `./styles/variables.less` and `./styles/bootswatch.less`. The `./styles/main.less`
* file includes them directly, so after you apply the theme, modify `main.less` to your heart's content and then run the `less` task
* as in
*
* grunt less
*
* @param {object} grunt The grunt object reference
* @param {object} definition The swatch definition files
* @param {string} definition.less The url to the `bootswatch.less` file
* @param {string} definition.lessVariables The url to the `variables.less` file
* @private
*/
function applyTheme( grunt, definition ) {
//noinspection JSHint
var done = this.async();
async.waterfall( [
function ( cb ) {
getBootSwatchComponent( definition.less, function ( err, swatch ) {
if ( err ) {return cb( err );}
var fullPath = path.join( __dirname, "styles/bootswatch.less" );
fs.writeFile( fullPath, swatch.replace("http://", "//"), cb );
} );
},
function ( cb ) {
getBootSwatchComponent( definition.lessVariables, function ( err, swatch ) {
if ( err ) {return cb( err );}
var fullPath = path.join( __dirname, "styles/variables.less" );
fs.writeFile( fullPath, swatch.replace("http://", "//"), cb );
} );
}
], done );
}
/**
* Gets the list of available Bootswatches from, well, Bootswatch.
*
* @see http://news.bootswatch.com/post/22193315172/bootswatch-api
* @param {function(err, responseBody)} done The callback when complete
* @param {?object} done.err If an error occurred, you will find it here.
* @param {object} done.responseBody This is a parsed edition of the bootswatch server's response. It's format it defined
* by the return message from [here](http://api.bootswatch.com/)
* @private
*/
function getBootSwatchList( done ) {
var options = {
hostname : 'api.bootswatch.com',
port : 80,
path : '/',
method : 'GET'
};
var body = "";
var req = http.request( options, function ( res ) {
res.setEncoding( 'utf8' );
res.on( 'data', function ( chunk ) {
body += chunk;
} );
res.on( 'end', function () {
done( null, JSON.parse( body ) );
} );
res.on( 'error', function ( e ) {
done( 'problem with response: ' + e.message );
} );
} );
req.on( 'error', function ( e ) {
done( 'problem with request: ' + e.message );
} );
req.end();
}
/**
* This method will get one of the components from Bootswatch, which is generally a `less` file or a `lessVariables` file.
*
* @see http://news.bootswatch.com/post/22193315172/bootswatch-api
* @param {string} url The url to retreive from
* @param {function(err, responseText)} done The callback when complete
* @param {?object} done.err If an error occurred, you will find it here.
* @param {string} done.responseText The body of whatever was returned
* @private
*/
function getBootSwatchComponent( url, done ) {
var body = "";
var req = http.request( url, function ( res ) {
res.setEncoding( 'utf8' );
res.on( 'data', function ( chunk ) {
body += chunk;
} );
res.on( 'end', function () {
done( null, body );
} );
res.on( 'error', function ( e ) {
done( 'problem with response: ' + e.message );
} );
} );
req.on( 'error', function ( e ) {
done( 'problem with request: ' + e.message );
} );
req.end();
}
+22
View File
@@ -0,0 +1,22 @@
Copyright (c) 2012-13 Terry Weiss. All rights reserved.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
+200
View File
@@ -0,0 +1,200 @@
# DocStrap #
DocStrap is [Bootstrap](http://twitter.github.io/bootstrap/index.html) based template for [JSDoc3](http://usejsdoc.org/).
In addition, it includes all of the themes from [Bootswatch](http://bootswatch.com/) giving you a great deal of look
and feel options for your documentation. Additionally, it adds some options to the conf.json file that gives
you even more flexibility to tweak the template to your needs. It will also make your teeth whiter.
## Features ##
* Fixed navigation at page top
* Right side TOC for navigation in pages
* Themed
* Customizable
### What It Looks Like ###
Here are examples of this template with the different Bootswatch themes:
+ [Amelia](http://terryweiss.github.io/docstrap/themes/amelia)
+ [Cerulean](http://terryweiss.github.io/docstrap/themes/cerulean)
+ [Cosmo](http://terryweiss.github.io/docstrap/themes/cosmo)
+ [Cyborg](http://terryweiss.github.io/docstrap/themes/cyborg)
+ [Flatly](http://terryweiss.github.io/docstrap/themes/flatly)
+ [Journal](http://terryweiss.github.io/docstrap/themes/journal)
+ [Readable](http://terryweiss.github.io/docstrap/themes/readable)
+ [Simplex](http://terryweiss.github.io/docstrap/themes/simplex)
+ [Slate](http://terryweiss.github.io/docstrap/themes/slate)
+ [Spacelab](http://terryweiss.github.io/docstrap/themes/spacelab)
+ [Spruce](http://terryweiss.github.io/docstrap/themes/spruce)
+ [Superhero](http://terryweiss.github.io/docstrap/themes/superhero)
+ [United](http://terryweiss.github.io/docstrap/themes/united)
To change your theme, just change it in the `conf.json` file. See below for details.
## Ooooh, I want it! How do I get it?##
First grab the [zip file from github.](https://github.com/terryweiss/docstrap/archive/master.zip) Unzip it
to your favorite hard drive and ask JSDoc to use it. Like so:
<path/to/jsdoc>/jsoc mysourcefiles/* -t <path.to.unzipped>/template -c <path.to.unzipped>/conf.json -d <path.to.output>/
Also take a gander at [JSDoc's command line options](http://usejsdoc.org/about-commandline.html).
## Configuring the template ##
DocStrap ships with a `conf.json` file in the template/ directory. It is just a regular old
[JSDoc configuration file](http://usejsdoc.org/about-configuring-jsdoc.html), but with the following new options:
```
"templates": {
"systemName" : "{string}",
"footer" : "{string}",
"copyright" : "{string}",
"navType" : "{vertical|inline}",
"theme" : "{theme}",
"linenums" : {boolean},
"collapseSymbols" : {boolean},
"inverseNav" : {boolean}
}
```
### Options ###
* __systemName__
The name of the system being documented. This will appear in the page title for each page
* __footer__
Any markup want to appear in the footer of each page. This is not processed at all, just printed exactly as you enter it
* __copyright__
You can add a copyright message below the _footer_ and above the JSDoc timestamp at the bottom of the page
* __navType__
The template uses top level navigation with dropdowns for the contents of each category. On large systems these dropdowns
can get large enough to expand beyond the page. To make the dropdowns render wider and stack the entries vertically, set this
option to `"inline"`. Otherwise set it to `"vertical"` to make them regular stacked dropdowns.
* __theme__
This is the name of the them you want to use **in all lowercase**. The valid options are
+ `amelia`
+ `cerulean`
+ `cosmo`
+ `cyborg`
+ `flatly`
+ `journal`
+ `readable`
+ `simplex`
+ `slate`
+ `spacelab`
+ `spruce`
+ `superhero`
+ `united`
* __linenums__
When true, line numbers will appear in the source code listing. If you have
[also turned that on](http://usejsdoc.org/about-configuring-jsdoc.html).
* __collapseSymbols__
If your pages have a large number of symbols, it can be easy to get lost in all the text. If you turn this to `true`
all of the symbols in the page will roll their contents up so that you just get a list of symbols that can be expanded
and collapsed.
* __inverseNav__
Bootstrap navbars come in two flavors, regular and inverse where inverse is generally higher contrast. Set this to `true` to
use the inverse header.
## Customizing DocStrap ##
No template can meet every need and customizing templates is a favorite pastime of....well, no-one, but you may need to anyway.
First make sure you have [bower](https://github.com/bower/bower) and [grunt-cli](https://github.com/gruntjs/grunt-cli) installed.
Fetch the source using `git` or grab the [zip file from github.](https://github.com/terryweiss/docstrap/archive/master.zip) and unzip
it somewhere. Everything that follows happens in the unzip directory.
Next, prepare the environment:
bower install
and
grunt install
When that is done, you have all of the tools to start modifying the template. The template, like Bootstrap, used [less](http://lesscss.org/).
The way it works is that `./styles/main.less` pulls in the bootstrap files uncompiled so that you have access to all of bootstraps mixins, colors,
etc, that you would want. There are two more files in that directory, `variables.less`, `bootswatch.less`. These are the
theme files and you can modify them, but keep in mind that if you apply a new theme (see below) those files will be overwritten. It is best
to keep your changes to the `main.less` file.
To compile your changes to `main.less` and any other files it loads up,
grunt less
The output is will be put in `./template/static/styles/site.<theme-name>.css`. The next time you create your documentation, it
will have the new css file included.
To apply a different template to the `styles` directory to modify, open up the `conf.json` in the template directory and
change the `theme` option to the theme you want. Then
grunt apply
And the new theme will be in `variables.less`, `bootswatch.less`. Don't forget to compile your changes using `grunt apply` to
get that change into the template.
**NOTE** that these steps are not necessary to just change the theme, this is only to modify the theme. If all you want to do is
change the theme, just update conf.json with the new theme and build your docs!
## Contributing ##
Yes! Contribute! Test! Share your ideas! Report Bugs!
## Roadmap ##
* Integrate Darkstrap
* Make plain old bootstrap an option (doh!)
* ~~Jump to source line numbers~~
* Document publish.js
## History ##
### v0.2.0 ###
* Added jump to source linenumers - still a problem scrolling with fixed header
* changed syntax highlighter to [sunlight](http://sunlightjs.com/)
* Modify incoming bootswatch files to make font calls without protocol.
### v0.1.0 ###
Initial release
## Notices ##
If you like DocStrap, be sure and check out these excellent projects and support them!
[JSDoc3 is licensed under the Apache License](https://github.com/jsdoc3/jsdoc/blob/master/LICENSE.md)
[So is Bootstrap](https://github.com/twitter/bootstrap/blob/master/LICENSE)
[And Bootswatch](https://github.com/thomaspark/bootswatch/blob/gh-pages/LICENSE)
[TOC is licensed under MIT](https://github.com/jgallen23/toc/blob/master/LICENSE)
[Grunt is also MIT](https://github.com/gruntjs/grunt-cli/blob/master/LICENSE-MIT)
DocStrap [is licensed under the MIT license.](https://github.com/terryweiss/docstrap/blob/master/LICENSE.md)
[Sunlight uses the WTFPL](http://sunlightjs.com/)
## License ##
DocStrap Copyright (c) 2012-2013Terry Weiss. All rights reserved.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
+12
View File
@@ -0,0 +1,12 @@
{
"name": "ink-docstrap",
"version": "0.1.0",
"dependencies": {
"bootstrap": "~2.3.1",
"jquery": "~2.0.0",
"darkstrap": "git://github.com/danneu/darkstrap.git#~0.9.2",
"toc": "~0.1.2",
"sunlight": "https://github.com/tmont/sunlight.git",
"jquery.localScroll": "~1.2.8"
}
}
+10
View File
@@ -0,0 +1,10 @@
{
"name": "ink-docstrap",
"version": "0.1.0",
"dependencies": {
"bootstrap": "~2.3.1",
"jquery": "~2.0.0",
"darkstrap": "git://github.com/danneu/darkstrap.git#~0.9.2",
"toc": "~0.1.2"
}
}
+45
View File
@@ -0,0 +1,45 @@
"use strict"
/**
@fileOverview Donec sed sapien enim. Duis elementum arcu id velit mattis sed tincidunt dolor posuere. Cras dapibus varius metus et sollicitudin. Quisque egestas placerat lacus, at lobortis mauris volutpat in. Morbi eleifend, sapien ut lobortis malesuada, nulla arcu blandit risus, quis fringilla nunc leo ac turpis. Donec vitae gravida dolor. Pellentesque accumsan, erat ac rutrum sodales, neque odio pellentesque est, vitae rutrum lorem mauris vitae justo. Sed blandit egestas mi at fringilla. Morbi at metus feugiat magna tempor vulputate. Duis dictum sagittis neque quis tempor. Morbi id est ac orci dictum porta. Phasellus tempus adipiscing convallis.
@module docstrap/car
@author Gloria Swanson
@requires lodash
*/
/**
* Integer quis ante ut nulla cursus vehicula id eu dolor. Phasellus ut facilisis felis. Praesent eget metus id massa pretium lobortis a et metus. Aliquam erat volutpat. Nulla ac tortor odio, quis facilisis augue. In hendrerit, lectus mollis elementum vestibulum, velit nisi aliquet orci, vitae luctus risus dui sed nisi. Donec aliquam pretium leo sed ultrices. Duis porttitor pharetra vulputate. Aenean sed neque sit amet arcu auctor placerat eget ac tellus. Proin porttitor fringilla eros quis scelerisque. Aliquam erat volutpat.
* @constructor
* @param {Boolean} hybrid Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
* @example
* // Duis elementum arcu id velit mattis sed tincidunt dolor posuere.
* if (!(key in this.visited)) {
this.visited[key] = true;
if (this.dependencies[key]) {
Object.keys(this.dependencies[key]).forEach(function(path) {
self.visit(path);
});
}
this.sorted.push(key);
}
*/
exports.Car = function (hybrid) {
/**
* Aenean commodo lorem nec sapien suscipit quis hendrerit dui feugiat. Curabitur pretium congue sollicitudin. Nam eleifend ultricies libero vel iaculis. Maecenas vel elit vel lorem lacinia pellentesque. Vestibulum posuere suscipit lacus, sit amet volutpat erat sagittis vitae. Ut eleifend pretium nulla vitae tempor.
* @type {string}
*/
this.color = null;
};
/**
* Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi congue viverra placerat. Mauris mi nibh, pulvinar ut placerat sit amet, aliquam a diam. Maecenas vitae suscipit nulla. Sed at justo nec ante lobortis fermentum. Quisque sodales libero suscipit mi malesuada pretium. Cras a lectus vitae risus semper sagittis. Sed ultrices aliquet tempus. Nulla id nisi metus, sit amet elementum tortor. Nunc tempor sem quis augue tempor sed posuere nulla volutpat. Phasellus fringilla pulvinar lorem quis venenatis.
* @param {integer} speed Phasellus ut facilisis felis.
*/
exports.Car.prototype.drive = function ( speed ) {
};
@@ -0,0 +1,22 @@
{
"tags": {
"allowUnknownTags": true
},
"plugins": ["plugins/markdown"],
"templates": {
"cleverLinks": false,
"monospaceLinks": false,
"default": {
"outputSourceFiles": true
},
"systemName": "DocStrap",
"footer": "",
"copyright": "Copyright &copy; 2012-2103 Terry Weiss, Eery Wrists. All rights reserved.",
"navType": "vertical",
"theme": "cerulean"
} ,
"markdown": {
"parser": "gfm",
"hardwrap": true
}
}
+50
View File
@@ -0,0 +1,50 @@
/**
* Suspendisse orci massa, hendrerit sagittis lacinia consectetur, sagittis vitae purus. Aliquam id eros diam, eget elementum turpis. Nullam tellus magna, mollis in molestie id, venenatis rhoncus est. Proin id diam justo. Nunc tempus gravida justo at lobortis. Nam vitae venenatis nisi. Donec vel odio massa. Quisque interdum metus sit amet est iaculis tincidunt. Donec bibendum blandit purus, id semper orci aliquam quis. Nam tincidunt dolor eu felis ultricies tempor. Nulla non consectetur erat.
*/
function drift() {
}
/**
* Suspendisse orci massa, hendrerit sagittis lacinia consectetur, sagittis vitae purus. Aliquam id eros diam, eget elementum turpis. Nullam tellus magna, mollis in molestie id, venenatis rhoncus est. Proin id diam justo. Nunc tempus gravida justo at lobortis. Nam vitae venenatis nisi. Donec vel odio massa. Quisque interdum metus sit amet est iaculis tincidunt. Donec bibendum blandit purus, id semper orci aliquam quis. Nam tincidunt dolor eu felis ultricies tempor. Nulla non consectetur erat.
*/
function trailBrake() {
}
/**
* Suspendisse orci massa, hendrerit sagittis lacinia consectetur, sagittis vitae purus. Aliquam id eros diam, eget elementum turpis. Nullam tellus magna, mollis in molestie id, venenatis rhoncus est. Proin id diam justo. Nunc tempus gravida justo at lobortis. Nam vitae venenatis nisi. Donec vel odio massa. Quisque interdum metus sit amet est iaculis tincidunt. Donec bibendum blandit purus, id semper orci aliquam quis. Nam tincidunt dolor eu felis ultricies tempor. Nulla non consectetur erat.
* @param {integer} bias Nulla ultricies justo ac nisi consectetur posuere. Donec ornare pharetra erat, nec facilisis dui cursus quis. Quisque porttitor porttitor orci, sed facilisis urna facilisis sed. Sed tincidunt adipiscing turpis et hendrerit. Cras posuere orci ut mauris ullamcorper vitae laoreet nisi luctus. In rutrum tristique augue. Nam eleifend dignissim dui.
*/
function brakeBias( bias ) {
}
/**
* Suspendisse orci massa, hendrerit sagittis lacinia consectetur, sagittis vitae purus. Aliquam id eros diam, eget elementum turpis. Nullam tellus magna, mollis in molestie id, venenatis rhoncus est. Proin id diam justo. Nunc tempus gravida justo at lobortis. Nam vitae venenatis nisi. Donec vel odio massa. Quisque interdum metus sit amet est iaculis tincidunt. Donec bibendum blandit purus, id semper orci aliquam quis. Nam tincidunt dolor eu felis ultricies tempor. Nulla non consectetur erat.
* @param {module:docstrap/car.Car} car Nulla ultricies justo ac nisi consectetur posuere. Donec ornare pharetra erat, nec facilisis dui cursus quis. Quisque porttitor porttitor orci, sed facilisis urna facilisis sed. Sed tincidunt adipiscing turpis et hendrerit. Cras posuere orci ut mauris ullamcorper vitae laoreet nisi luctus. In rutrum tristique augue. Nam eleifend dignissim dui.
* @param {string} tires Donec viverra egestas tellus non viverra. Aenean est ante, egestas sed scelerisque quis, aliquet sed lacus. Praesent non mauris neque, et adipiscing ante. Vestibulum quis quam vitae ipsum aliquet blandit. Vivamus condimentum euismod orci, in tincidunt justo rutrum faucibus. Phasellus nec lorem arcu. Donec tortor dui, facilisis in rutrum sit amet, pulvinar vitae lacus.
* @param {number} fuel Proin sodales, mi at tincidunt ornare, mi dui sagittis velit, sed dictum risus orci eu erat. Sed nunc leo, congue sed rutrum eget, lobortis ac lectus. Etiam non arcu nulla.
*/
function start( car, tires, fuel ) {}
/**
* Sed id tristique lorem. Ut sodales turpis nec mauris gravida interdum. Cras pellentesque, purus at suscipit euismod, elit nunc cursus nisi, ut venenatis metus sapien id velit. Sed lectus orci, pharetra non pulvinar vel, ullamcorper id lorem. Donec vulputate tincidunt ipsum, ut lacinia tortor sollicitudin id. Nunc nec nibh ut felis venenatis egestas. Proin risus mauris, eleifend eget interdum in, venenatis sed velit. Praesent sodales elit ut odio viverra posuere. Donec sapien lorem, molestie in egestas eget, vulputate sed orci. Aenean elit sapien, pellentesque vitae tempor sit amet, sagittis et ligula. Mauris aliquam sapien sit amet lacus ultrices rutrum. Curabitur nec dolor sed elit varius dignissim a a lacus. Aliquam ac convallis enim.
* @namespace
*/
var teams = {};
/**
* Nunc faucibus lacus eget odio ultricies nec ullamcorper risus pharetra.
* @mixin
*/
var insanity = {
/**
* ras ac justo dui, at faucibus urna. Nunc tristique, velit id feugiat fermentum, dolor enim egestas erat, at vestibulum ante ipsum vel orci. Duis quis ante id justo vehicula eleifend sed et urna. Sed sapien tortor, rutrum id ultrices eu, tincidunt tincidunt mi
*/
goCrazy : function () {},
/**
* Donec viverra egestas tellus non viverra. Aenean est ante, egestas sed scelerisque quis, aliquet sed lacus. Praesent non mauris neque, et adipiscing ante. Vestibulum quis quam vitae ipsum aliquet blandit.
*/
goSane : function () {}
};
+74
View File
@@ -0,0 +1,74 @@
"use strict"
/**
@fileOverview Donec sed sapien enim. Duis elementum arcu id velit mattis sed tincidunt dolor posuere. Cras dapibus varius metus et sollicitudin. Quisque egestas placerat lacus, at lobortis mauris volutpat in. Morbi eleifend, sapien ut lobortis malesuada, nulla arcu blandit risus, quis fringilla nunc leo ac turpis. Donec vitae gravida dolor. Pellentesque accumsan, erat ac rutrum sodales, neque odio pellentesque est, vitae rutrum lorem mauris vitae justo. Sed blandit egestas mi at fringilla. Morbi at metus feugiat magna tempor vulputate. Duis dictum sagittis neque quis tempor. Morbi id est ac orci dictum porta. Phasellus tempus adipiscing convallis.
@module docstrap/person
@author Fred Flinstone
@requires lodash
@requires docstrap/person
*/
/**
* Integer quis ante ut nulla cursus vehicula id eu dolor. Phasellus ut facilisis felis. Praesent eget metus id massa pretium lobortis a et metus. Aliquam erat volutpat. Nulla ac tortor odio, quis facilisis augue. In hendrerit, lectus mollis elementum vestibulum, velit nisi aliquet orci, vitae luctus risus dui sed nisi. Donec aliquam pretium leo sed ultrices. Duis porttitor pharetra vulputate. Aenean sed neque sit amet arcu auctor placerat eget ac tellus. Proin porttitor fringilla eros quis scelerisque. Aliquam erat volutpat.
* @constructor
*/
exports.Person = function () {
/**
* Aenean commodo lorem nec sapien suscipit quis hendrerit dui feugiat. Curabitur pretium congue sollicitudin. Nam eleifend ultricies libero vel iaculis. Maecenas vel elit vel lorem lacinia pellentesque. Vestibulum posuere suscipit lacus, sit amet volutpat erat sagittis vitae. Ut eleifend pretium nulla vitae tempor.
* @type {number}
*/
this.eyes = 2;
/**
* Donec tempus vestibulum nunc. Fusce at eleifend nisi. Proin nisl odio, ultrices fermentum eleifend nec, pellentesque in massa. Cras id turpis diam, vitae fringilla turpis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam tempus urna in lacus semper sodales. Etiam a erat in augue rhoncus porta. Aenean nec odio lorem, a tristique dui.
* @type {number}
*/
this.nose = 1;
/**
* Vestibulum viverra magna nec lectus imperdiet in lacinia ante iaculis. Cras nec urna tellus, eget convallis mauris. Fusce volutpat elementum enim, vel fringilla orci elementum vehicula. Nunc in ultrices sem. Sed augue tortor, pellentesque sed suscipit sed, vehicula eu enim.
* @type {number}
*/
this.mouth = 1;
};
/**
* Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi congue viverra placerat. Mauris mi nibh, pulvinar ut placerat sit amet, aliquam a diam. Maecenas vitae suscipit nulla. Sed at justo nec ante lobortis fermentum. Quisque sodales libero suscipit mi malesuada pretium. Cras a lectus vitae risus semper sagittis. Sed ultrices aliquet tempus. Nulla id nisi metus, sit amet elementum tortor. Nunc tempor sem quis augue tempor sed posuere nulla volutpat. Phasellus fringilla pulvinar lorem quis venenatis.
* @param {boolean} speed Phasellus ut facilisis felis.
*/
exports.Person.prototype.walk = function ( speed ) {
};
/**
* Aliquam interdum lectus ac diam tincidunt vitae fringilla justo faucibus.
* @param {Boolean} well Morbi sit amet tellus at justo tempus tristique.
* @param {function(err)} done Curabitur id nulla mauris, id hendrerit magna.
* @param {object=} done.err Sed pulvinar mollis arcu, at tempus dui egestas cursus.
*/
exports.Person.prototype.think = function ( well, done ) {
};
/**
* Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi congue viverra placerat. Mauris mi nibh, pulvinar ut placerat sit amet, aliquam a diam. Maecenas vitae suscipit nulla. Sed at justo nec ante lobortis fermentum. Quisque sodales libero suscipit mi malesuada pretium. Cras a lectus vitae risus semper sagittis. Sed ultrices aliquet tempus. Nulla id nisi metus, sit amet elementum tortor. Nunc tempor sem quis augue tempor sed posuere nulla volutpat. Phasellus fringilla pulvinar lorem quis venenatis.
* @returns {boolean} Sed id erat ut ipsum scelerisque venenatis at nec mauris.
* @fires module:docstrap/person.Person#sneeze
*/
exports.Person.prototype.tickle = function () {
};
/**
* Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit.
*
* @event module:docstrap/person.Person#sneeze
* @type {object}
* @property {boolean} tissue Phasellus non justo a neque pharetra sagittis.
*/
/**
* Nulla ultricies justo ac nisi consectetur posuere. Donec ornare pharetra erat, nec facilisis dui cursus quis. Quisque porttitor porttitor orci, sed facilisis urna facilisis sed. Sed tincidunt adipiscing turpis et hendrerit. Cras posuere orci ut mauris ullamcorper vitae laoreet nisi luctus. In rutrum tristique augue. Nam eleifend dignissim dui.
* @returns {exports.Person}
*/
exports.create = function(){
};
@@ -0,0 +1,21 @@
#Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec viverra, tellus et fermentum tincidunt, massa ligula dignissim augue, ut aliquam tortor odio in odio. In faucibus metus metus. Curabitur est mi, fermentum lacinia tincidunt vitae, mattis sit amet neque. Quisque diam nisl, accumsan ac porta tincidunt, iaculis facilisis ipsum. Nulla facilisi. Aenean a metus tortor. Pellentesque congue, mauris vitae viverra varius, elit nunc dictum nisl, rhoncus ultrices nulla sapien at leo. Duis ultricies porttitor diam. Nulla facilisi. Nullam elementum, lorem eu imperdiet laoreet, est turpis sollicitudin velit, in porttitor justo dolor vel urna. Mauris in ante magna. Curabitur vitae lacus in magna mollis commodo.
Fusce lacinia, mauris ac aliquam consequat, lacus urna feugiat erat, id viverra mi mi sit amet tortor. Etiam ac ornare erat. Pellentesque et neque lacus, quis posuere orci. Fusce molestie blandit velit, sit amet dictum eros pharetra vitae. In erat urna, condimentum ac feugiat id, rutrum et nisi. Cras ac velit lorem. Nulla facilisi. Maecenas dignissim nulla in turpis tempus sed rhoncus augue dapibus. Nulla feugiat, urna non sagittis laoreet, dolor metus rhoncus justo, sed semper ante lacus eget quam. Sed ac ligula magna. Sed tincidunt pulvinar neque in porta. Nullam quis lacus orci. Pellentesque ornare viverra lacus, id aliquam magna venenatis a.
Sed id tristique lorem. Ut sodales turpis nec mauris gravida interdum. Cras pellentesque, purus at suscipit euismod, elit nunc cursus nisi, ut venenatis metus sapien id velit. Sed lectus orci, pharetra non pulvinar vel, ullamcorper id lorem. Donec vulputate tincidunt ipsum, ut lacinia tortor sollicitudin id. Nunc nec nibh ut felis venenatis egestas. Proin risus mauris, eleifend eget interdum in, venenatis sed velit. Praesent sodales elit ut odio viverra posuere. Donec sapien lorem, molestie in egestas eget, vulputate sed orci. Aenean elit sapien, pellentesque vitae tempor sit amet, sagittis et ligula. Mauris aliquam sapien sit amet lacus ultrices rutrum. Curabitur nec dolor sed elit varius dignissim a a lacus. Aliquam ac convallis enim.
Suspendisse orci massa, hendrerit sagittis lacinia consectetur, sagittis vitae purus. Aliquam id eros diam, eget elementum turpis. Nullam tellus magna, mollis in molestie id, venenatis rhoncus est. Proin id diam justo. Nunc tempus gravida justo at lobortis. Nam vitae venenatis nisi. Donec vel odio massa. Quisque interdum metus sit amet est iaculis tincidunt. Donec bibendum blandit purus, id semper orci aliquam quis. Nam tincidunt dolor eu felis ultricies tempor. Nulla non consectetur erat.
Nunc faucibus lacus eget odio ultricies nec ullamcorper risus pharetra. Nunc nec consequat urna. Curabitur condimentum ante vitae erat tristique vitae gravida quam dapibus. Cras ac justo dui, at faucibus urna. Nunc tristique, velit id feugiat fermentum, dolor enim egestas erat, at vestibulum ante ipsum vel orci. Duis quis ante id justo vehicula eleifend sed et urna. Sed sapien tortor, rutrum id ultrices eu, tincidunt tincidunt mi. Etiam blandit, neque eget interdum dignissim, lacus ante facilisis dolor, non viverra dui lorem vitae nibh. Morbi volutpat augue eget nulla luctus eu aliquam sem facilisis. Pellentesque sollicitudin commodo dolor sit amet vestibulum. Nam dictum posuere quam, in tincidunt erat rutrum eu.
Etiam nec turpis purus, at lacinia sem. In commodo lacinia euismod. Curabitur tincidunt congue leo, eget iaculis orci volutpat pharetra. Fusce dignissim lacus lacus. Integer consectetur lacus rutrum risus malesuada at consectetur erat rutrum. Sed magna ipsum, fringilla eget auctor non, fringilla nec massa. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum nec tortor id nisi luctus aliquam. Maecenas cursus tincidunt ornare. Nulla a vestibulum odio. Mauris malesuada commodo justo quis mattis. Suspendisse mauris ligula, placerat at egestas in, tincidunt quis nibh. Aliquam ullamcorper elit at augue cursus quis pellentesque purus viverra.
Nulla ultricies justo ac nisi consectetur posuere. Donec ornare pharetra erat, nec facilisis dui cursus quis. Quisque porttitor porttitor orci, sed facilisis urna facilisis sed. Sed tincidunt adipiscing turpis et hendrerit. Cras posuere orci ut mauris ullamcorper vitae laoreet nisi luctus. In rutrum tristique augue. Nam eleifend dignissim dui.
Donec viverra egestas tellus non viverra. Aenean est ante, egestas sed scelerisque quis, aliquet sed lacus. Praesent non mauris neque, et adipiscing ante. Vestibulum quis quam vitae ipsum aliquet blandit. Vivamus condimentum euismod orci, in tincidunt justo rutrum faucibus. Phasellus nec lorem arcu. Donec tortor dui, facilisis in rutrum sit amet, pulvinar vitae lacus. Nam sodales sem eu nunc scelerisque vitae ullamcorper dolor facilisis. Duis imperdiet nisi in magna tempor convallis. Fusce at metus augue. Quisque dictum tempus mauris, in mattis ligula dignissim ut.
Proin sodales, mi at tincidunt ornare, mi dui sagittis velit, sed dictum risus orci eu erat. Sed nunc leo, congue sed rutrum eget, lobortis ac lectus. Etiam non arcu nulla. Vestibulum rutrum dolor pulvinar lorem posuere blandit. Sed quis sapien dui. Nunc sagittis erat commodo quam porta cursus in non erat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin a molestie neque. Aliquam iaculis lacus sed neque hendrerit at dignissim ligula imperdiet. Suspendisse venenatis, lorem at luctus scelerisque, sem purus pellentesque sapien, vitae ornare ipsum quam nec dui. Mauris neque est, interdum nec pulvinar eget, dapibus eleifend tellus. Fusce non lorem tortor. Nullam eget nunc quis felis aliquam consectetur. Aliquam tristique, turpis in feugiat blandit, lectus erat condimentum tortor, non egestas nisl sapien eget nibh.
Aliquam elit turpis, faucibus et porta et, egestas nec nibh. Sed nisl est, pharetra a eleifend a, pretium ac eros. Sed leo eros, pulvinar vel faucibus dictum, aliquet ut quam. Maecenas et felis non ligula fringilla pretium fringilla sit amet ante. Nam varius imperdiet interdum. Ut non metus mauris, vel volutpat lorem. Nullam sagittis est quis lacus feugiat fringilla. Quisque orci lorem, semper ac accumsan vitae, blandit quis velit. Proin luctus sodales ultrices. Fusce mauris erat, facilisis ut consectetur at, fringilla feugiat orci. Aliquam a nisi a neque interdum suscipit id eget purus. Pellentesque tincidunt justo ut urna posuere non molestie quam auctor.
@@ -0,0 +1,10 @@
#Lorem ipsum dolor sit amet
Curabitur est mi, fermentum lacinia tincidunt vitae, mattis sit amet neque. Quisque diam nisl, accumsan ac porta tincidunt, iaculis facilisis ipsum. Nulla facilisi. Aenean a metus tortor. Pellentesque congue, mauris vitae viverra varius, elit nunc dictum nisl, rhoncus ultrices nulla sapien at leo. Duis ultricies porttitor diam. Nulla facilisi. Nullam elementum, lorem eu imperdiet laoreet, est turpis sollicitudin velit, in porttitor justo dolor vel urna. Mauris in ante magna. Curabitur vitae lacus in magna mollis commodo.
##Fusce lacinia, mauris ac aliquam consequat
Fusce molestie blandit velit, sit amet dictum eros pharetra vitae. In erat urna, condimentum ac feugiat id, rutrum et nisi. Cras ac velit lorem. Nulla facilisi. Maecenas dignissim nulla in turpis tempus sed rhoncus augue dapibus. Nulla feugiat, urna non sagittis laoreet, dolor metus rhoncus justo, sed semper ante lacus eget quam. Sed ac ligula magna. Sed tincidunt pulvinar neque in porta. Nullam quis lacus orci. Pellentesque ornare viverra lacus, id aliquam magna venenatis a.
Sed id tristique lorem. Ut sodales turpis nec mauris gravida interdum. Cras pellentesque, purus at suscipit euismod, elit nunc cursus nisi, ut venenatis metus sapien id velit. Sed lectus orci, pharetra non pulvinar vel, ullamcorper id lorem. Donec vulputate tincidunt ipsum, ut lacinia tortor sollicitudin id. Nunc nec nibh ut felis venenatis egestas. Proin risus mauris, eleifend eget interdum in, venenatis sed velit. Praesent sodales elit ut odio viverra posuere. Donec sapien lorem, molestie in egestas eget, vulputate sed orci. Aenean elit sapien, pellentesque vitae tempor sit amet, sagittis et ligula. Mauris aliquam sapien sit amet lacus ultrices rutrum. Curabitur nec dolor sed elit varius dignissim a a lacus. Aliquam ac convallis enim.
Suspendisse orci massa, hendrerit sagittis lacinia consectetur, sagittis vitae purus. Aliquam id eros diam, eget elementum turpis. Nullam tellus magna, mollis in molestie id, venenatis rhoncus est. Proin id diam justo. Nunc tempus gravida justo at lobortis. Nam vitae venenatis nisi. Donec vel odio massa. Quisque interdum metus sit amet est iaculis tincidunt. Donec bibendum blandit purus, id semper orci aliquam quis. Nam tincidunt dolor eu felis ultricies tempor. Nulla non consectetur erat.
+36
View File
@@ -0,0 +1,36 @@
{
"name": "ink-docstrap",
"version": "0.2.0-0",
"decription": "A template for JSDoc3 based on Bootstrap and Bootswatch",
"devDependencies": {
"grunt": "~0.4.1",
"grunt-contrib-less": "~0.5.1",
"jsdoc": "git://github.com/jsdoc3/jsdoc.git",
"grunt-shell": "~0.2.2",
"async": "~0.2.8",
"lodash": "~1.2.1",
"grunt-contrib-copy": "~0.4.1"
},
"license": "MIT",
"keywords": [
"docstrap",
"jsdoc3",
"bootstrap",
"bootswatch",
"theme",
"documentation",
"jsdoc"
],
"author": {
"name": "Terry Weiss",
"email": "me@terryweiss.net"
},
"bugs": {
"url": "https://github.com/terryweiss/docstrap/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/terryweiss/docstrap.git"
},
"main": "./template/publish.js"
}
+180
View File
@@ -0,0 +1,180 @@
// Cerulean 2.3.2
// Bootswatch
// -----------------------------------------------------
// TYPOGRAPHY
// -----------------------------------------------------
@import url(//fonts.googleapis.com/css?family=Telex);
// SCAFFOLDING
// -----------------------------------------------------
// NAVBAR
// -----------------------------------------------------
.navbar {
.brand {
padding: 14px 20px 16px;
font-family: @headingsFontFamily;
text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
}
li {
line-height: 20px;
}
.nav > li > a {
padding: 16px 10px 14px;
font-family: @headingsFontFamily;
text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
}
.search-query {
border: 1px solid darken(@linkColor, 10%);
line-height: normal;
}
.navbar-text {
padding: 19px 10px 18px;
line-height: 13px;
color: rgba(0, 0, 0, 0.5);
text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3);
}
&-inverse {
.navbar-search .search-query {
color: @textColor;
}
}
}
@media (max-width: @navbarCollapseWidth) {
.navbar .nav-collapse {
.nav li > a {
font-family: @headingsFontFamily;
font-weight: normal;
color: @white;
text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
&:hover {
background-color: #2B7CAC;
}
}
.nav .active > a {
.box-shadow(none);
background-color: #2B7CAC;
}
.dropdown-menu li > a:hover,
.dropdown-menu li > a:focus,
.dropdown-submenu:hover > a {
background-image: none;
}
.navbar-form,
.navbar-search {
border: none;
}
.nav-header {
color: #2B7CAC;
}
}
.navbar-inverse .nav-collapse {
.nav li > a {
color: @navbarInverseLinkColor;
&:hover {
background-color: rgba(0, 0, 0, 0.1);
}
}
.nav .active > a,
.nav > li > a:hover,
.dropdown-menu a:hover {
background-color: rgba(0, 0, 0, 0.1) !important;
}
}
}
div.subnav {
font-family: @headingsFontFamily;
text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.2);
&-fixed {
top: @navbarHeight + 1;
}
}
// NAV
// -----------------------------------------------------
// BUTTONS
// -----------------------------------------------------
.btn {
#gradient > .vertical-three-colors(@white, @white, 5%, darken(@white, 0%));
@shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
.box-shadow(@shadow);
&:hover {
background-position: 0 0;
}
}
.btn-primary {
.buttonBackground(lighten(@btnPrimaryBackground, 5%), @btnPrimaryBackground);
}
.btn-info {
.buttonBackground(lighten(@btnInfoBackground, 5%), @btnInfoBackground);
}
.btn-success {
.buttonBackground(lighten(@btnSuccessBackground, 5%), @btnSuccessBackground);
}
.btn-warning {
.buttonBackground(lighten(@btnWarningBackground, 5%), @btnWarningBackground);
}
.btn-danger {
.buttonBackground(lighten(@btnDangerBackground, 5%), @btnDangerBackground);
}
.btn-inverse {
.buttonBackground(lighten(@btnInverseBackground, 5%), @btnInverseBackground);
}
// TABLES
// -----------------------------------------------------
// FORMS
// -----------------------------------------------------
// DROPDOWNS
// -----------------------------------------------------
// ALERTS, LABELS, BADGES
// -----------------------------------------------------
// MISC
// -----------------------------------------------------
i[class^="icon-"]{
opacity: 0.8;
}
// MEDIA QUERIES
// -----------------------------------------------------
+152
View File
@@ -0,0 +1,152 @@
@import "../components/bootstrap/less/bootstrap.less";
@import "variables.less";
@import "bootswatch.less";
@headerHeight: 56px;
#main {
margin-top : @headerHeight;
}
.navbar-fixed-top {
.navbar-inner {
padding-left : 20px;
padding-right : 20px;
}
}
.navbar {
.dropdown-menu {
padding : 20px;
max-height : 300px;
overflow : auto;
width : 300px;
background-color : @navbarInverseBackground;
a, a:visited {
color : @navbarInverseLinkColor;
}
a:hover {
color : @navbarInverseLinkColorHover;
background-color : @navbarInverseLinkBackgroundHover;
}
a:active {
color : @navbarInverseLinkColorActive;
background-color : @navbarInverseLinkBackgroundActive;
}
a {
padding-left : 0;
padding-right : 5px;
font-weight : 500;
font-size : 115%;
}
}
}
#toc {
position : fixed;
top : @headerHeight;
width : 29%;
max-height : 90%;
overflow : auto;
.border-radius(5px);
border : 1px @navbarBackground solid;
padding : 5px;
.toc-active {
background-color : @navbarLinkBackgroundActive;
color : @navbarLinkColorActive;
.border-radius(3px);
a, a:hover, a:active, a:visited {
background-color : @navbarLinkBackgroundActive;
color : @navbarLinkColorActive;
}
}
}
.toc-shim {
padding-top : @headerHeight;
margin-top : -@headerHeight;
display : block;
}
.toc-h1 {
margin-left : 2px;
margin-right : 2px;
}
.toc-h2 {
margin-left : 7px;
margin-right : 7px;
}
.toc-h3 {
margin-left : 14px;
margin-right : 7px;
}
.toc-h4 {
margin-left : 21px;
margin-right : 7px;
}
.copyright {
font-size : 90%;
text-align : center;
color : @navbarInverseBackground;
width : 100%;
display : block;
}
.jsdoc-message {
font-size : 90%;
text-align : center;
color : @navbarInverseBackground;
width : 100%;
display : block;
}
.page-title {
font-size : 220%;
color : @navbarInverseBackground;
font-weight : 700;
padding-top : 10px;
display : block;
}
footer {
border-top : 1px solid @navbarInverseBackgroundHighlight;
padding-top : 15px;
}
code {
background-color : none;
border : none;
color : @orange;
}
.buffered-name {
padding-top : @headerHeight;
margin-top : -@headerHeight;
}
.member-collapsed {
background-color : @navbarInverseBackground;
color : @navbarInverseText;
}
.member-open {
background-color : inherit;
color : inherit;
}
.member {
.transition(background-color 0.5s linear);
.transition(color 0.5s linear);
.border-radius(5px);
padding : 10px;
}
+301
View File
@@ -0,0 +1,301 @@
// Cerulean 2.3.2
// Variables
// --------------------------------------------------
// GLOBAL VALUES
// --------------------------------------------------
// Grays
// -------------------------
@black: #000;
@grayDarker: #222;
@grayDark: #333;
@gray: #555;
@grayLight: #999;
@grayLighter: #F5F5F5;
@white: #fff;
// Accent colors
// -------------------------
@blue: #2FA4E7;
@blueDark: #033C73;
@green: #73A839;
@red: #C71C22;
@yellow: #F7B42C;
@orange: #DD5600;
@pink: #F49AC1;
@purple: #9760B3;
// Scaffolding
// -------------------------
@bodyBackground: @white;
@textColor: @gray;
// Links
// -------------------------
@linkColor: @blue;
@linkColorHover: darken(@linkColor, 15%);
// Typography
// -------------------------
@sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif;
@serifFontFamily: Georgia, "Times New Roman", Times, serif;
@monoFontFamily: Menlo, Monaco, Consolas, "Courier New", monospace;
@baseFontSize: 14px;
@baseFontFamily: @sansFontFamily;
@baseLineHeight: 20px;
@altFontFamily: @monoFontFamily;
@headingsFontFamily: 'Telex', sans-serif; // empty to use BS default, @baseFontFamily
@headingsFontWeight: bold; // instead of browser default, bold
@headingsColor: #317EAC; // empty to use BS default, @textColor
// Component sizing
// -------------------------
// Based on 14px font-size and 20px line-height
@fontSizeLarge: @baseFontSize * 1.25; // ~18px
@fontSizeSmall: @baseFontSize * 0.85; // ~12px
@fontSizeMini: @baseFontSize * 0.75; // ~11px
@paddingLarge: 11px 19px; // 44px
@paddingSmall: 2px 10px; // 26px
@paddingMini: 0px 6px; // 22px
@baseBorderRadius: 4px;
@borderRadiusLarge: 6px;
@borderRadiusSmall: 3px;
// Tables
// -------------------------
@tableBackground: transparent; // overall background-color
@tableBackgroundAccent: #f9f9f9; // for striping
@tableBackgroundHover: #f5f5f5; // for hover
@tableBorder: #ddd; // table and cell border
// Buttons
// -------------------------
@btnBackground: @white;
@btnBackgroundHighlight: darken(@white, 10%);
@btnBorder: darken(@white, 20%);
@btnPrimaryBackground: @linkColor;
@btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 15%);
@btnInfoBackground: @purple;
@btnInfoBackgroundHighlight: #2f96b4;
@btnSuccessBackground: @green;
@btnSuccessBackgroundHighlight: #51a351;
@btnWarningBackground: @orange;
@btnWarningBackgroundHighlight: @orange;
@btnDangerBackground: @red;
@btnDangerBackgroundHighlight: #bd362f;
@btnInverseBackground: @blueDark;
@btnInverseBackgroundHighlight: @grayDarker;
// Forms
// -------------------------
@inputBackground: @white;
@inputBorder: #ccc;
@inputBorderRadius: @baseBorderRadius;
@inputDisabledBackground: @grayLighter;
@formActionsBackground: #f5f5f5;
@inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border
// Dropdowns
// -------------------------
@dropdownBackground: @white;
@dropdownBorder: rgba(0,0,0,.2);
@dropdownDividerTop: #e5e5e5;
@dropdownDividerBottom: @white;
@dropdownLinkColor: @grayDark;
@dropdownLinkColorHover: @white;
@dropdownLinkColorActive: @white;
@dropdownLinkBackgroundActive: @linkColor;
@dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive;
// COMPONENT VARIABLES
// --------------------------------------------------
// Z-index master list
// -------------------------
// Used for a bird's eye view of components dependent on the z-axis
// Try to avoid customizing these :)
@zindexDropdown: 1000;
@zindexPopover: 1010;
@zindexTooltip: 1020;
@zindexFixedNavbar: 1030;
@zindexModalBackdrop: 1040;
@zindexModal: 1050;
// Sprite icons path
// -------------------------
@iconSpritePath: "../img/glyphicons-halflings.png";
@iconWhiteSpritePath: "../img/glyphicons-halflings-white.png";
// Input placeholder text color
// -------------------------
@placeholderText: @grayLight;
// Hr border color
// -------------------------
@hrBorder: @grayLighter;
// Horizontal forms & lists
// -------------------------
@horizontalComponentOffset: 180px;
// Wells
// -------------------------
@wellBackground: #f5f5f5;
// Navbar
// -------------------------
@navbarCollapseWidth: 979px;
@navbarCollapseDesktopWidth: @navbarCollapseWidth + 1;
@navbarHeight: 50px;
@navbarBackgroundHighlight: lighten(@navbarBackground, 8%);
@navbarBackground: @blue;
@navbarBorder: darken(@navbarBackground, 8%);
@navbarText: @grayLighter;
@navbarLinkColor: @white;
@navbarLinkColorHover: @white;
@navbarLinkColorActive: @navbarLinkColorHover;
@navbarLinkBackgroundHover: darken(@navbarBackground, 12%);
@navbarLinkBackgroundActive: darken(@navbarBackground, 12%);
@navbarBrandColor: @navbarLinkColor;
// Inverted navbar
@navbarInverseBackground: @blueDark;
@navbarInverseBackgroundHighlight: lighten(@navbarInverseBackground, 5%);
@navbarInverseBorder: darken(@navbarInverseBackground, 3%);
@navbarInverseText: @white;
@navbarInverseLinkColor: @white;
@navbarInverseLinkColorHover: @white;
@navbarInverseLinkColorActive: @white;
@navbarInverseLinkBackgroundHover: darken(@navbarInverseBackground, 6%);
@navbarInverseLinkBackgroundActive: darken(@navbarInverseBackground, 6%);
@navbarInverseSearchBackground: @white;
@navbarInverseSearchBackgroundFocus: @white;
@navbarInverseSearchBorder: @navbarInverseBackground;
@navbarInverseSearchPlaceholderColor: @grayLight;
@navbarInverseBrandColor: @navbarInverseLinkColor;
// Pagination
// -------------------------
@paginationBackground: #fff;
@paginationBorder: #ddd;
@paginationActiveBackground: #f5f5f5;
// Hero unit
// -------------------------
@heroUnitBackground: @grayLighter;
@heroUnitHeadingColor: inherit;
@heroUnitLeadColor: inherit;
// Form states and alerts
// -------------------------
@warningText: @orange;
@warningBackground: #F1CEAB;
@warningBorder: darken(spin(@warningBackground, -10), 3%);
@errorText: darken(#C45559, 5%);
@errorBackground: #F2BDB1;
@errorBorder: darken(spin(@errorBackground, -10), 3%);
@successText: darken(@green, 5%);
@successBackground: #D5ECBF;
@successBorder: darken(spin(@successBackground, -10), 5%);
@infoText: darken(@blue, 10%);
@infoBackground: #A7DFF1;
@infoBorder: darken(spin(@infoBackground, -10), 7%);
// Tooltips and popovers
// -------------------------
@tooltipColor: #fff;
@tooltipBackground: #000;
@tooltipArrowWidth: 5px;
@tooltipArrowColor: @tooltipBackground;
@popoverBackground: #fff;
@popoverArrowWidth: 10px;
@popoverArrowColor: #fff;
@popoverTitleBackground: darken(@popoverBackground, 3%);
// Special enhancement for popovers
@popoverArrowOuterWidth: @popoverArrowWidth + 1;
@popoverArrowOuterColor: rgba(0,0,0,.25);
// GRID
// --------------------------------------------------
// Default 940px grid
// -------------------------
@gridColumns: 12;
@gridColumnWidth: 60px;
@gridGutterWidth: 20px;
@gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1));
// 1200px min
@gridColumnWidth1200: 70px;
@gridGutterWidth1200: 30px;
@gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1));
// 768px-979px
@gridColumnWidth768: 42px;
@gridGutterWidth768: 20px;
@gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1));
// Fluid grid
// -------------------------
@fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth);
@fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth);
// 1200px min
@fluidGridColumnWidth1200: percentage(@gridColumnWidth1200/@gridRowWidth1200);
@fluidGridGutterWidth1200: percentage(@gridGutterWidth1200/@gridRowWidth1200);
// 768px-979px
@fluidGridColumnWidth768: percentage(@gridColumnWidth768/@gridRowWidth768);
@fluidGridGutterWidth768: percentage(@gridGutterWidth768/@gridRowWidth768);
@@ -0,0 +1,25 @@
{
"tags" : {
"allowUnknownTags" : true
},
"plugins" : ["plugins/markdown"],
"templates" : {
"cleverLinks" : false,
"monospaceLinks" : false,
"default" : {
"outputSourceFiles" : true
},
"systemName" : "DocStrap",
"footer" : "",
"copyright" : "DocStrap Copyright © 2012-2013 The contributors to the JSDoc3 and DocStrap projects.",
"navType" : "vertical",
"theme" : "cerulean",
"linenums" : true,
"collapseSymbols" : false,
"inverseNav" : true
},
"markdown" : {
"parser" : "gfm",
"hardwrap" : true
}
}
+651
View File
@@ -0,0 +1,651 @@
"use strict";
/**
* @module template/publish
* @type {*}
*/
/*global env: true */
var template = require( 'jsdoc/template' ),
fs = require( 'jsdoc/fs' ),
_ = require( 'underscore' ),
path = require( 'jsdoc/path' ),
taffy = require( 'taffydb' ).taffy,
handle = require( 'jsdoc/util/error' ).handle,
helper = require( 'jsdoc/util/templateHelper' ),
htmlsafe = helper.htmlsafe,
linkto = helper.linkto,
resolveAuthorLinks = helper.resolveAuthorLinks,
scopeToPunc = helper.scopeToPunc,
hasOwnProp = Object.prototype.hasOwnProperty,
conf = env.conf.templates || {},
data,
view,
outdir = env.opts.destination;
var globalUrl = helper.getUniqueFilename( 'global' );
var indexUrl = helper.getUniqueFilename( 'index' );
var navOptions = {
systemName : conf.systemName || "Documentation",
navType : conf.navType || "vertical",
footer : conf.footer || "",
copyright : conf.copyright || "",
theme : conf.theme || "simplex",
linenums : conf.linenums,
collapseSymbols : conf.collapseSymbols || false,
inverseNav : conf.inverseNav
};
var navigationMaster = {
index : {
title : navOptions.systemName,
link : indexUrl,
members : []
},
namespace : {
title : "Namespaces",
link : helper.getUniqueFilename( "namespaces.list" ),
members : []
},
module : {
title : "Modules",
link : helper.getUniqueFilename( "modules.list" ),
members : []
},
class : {
title : "Classes",
link : helper.getUniqueFilename( 'classes.list' ),
members : []
},
mixin : {
title : "Mixins",
link : helper.getUniqueFilename( "mixins.list" ),
members : []
},
event : {
title : "Events",
link : helper.getUniqueFilename( "events.list" ),
members : []
},
tutorial : {
title : "Tutorials",
link : helper.getUniqueFilename( "tutorials.list" ),
members : []
},
global : {
title : "Global",
link : globalUrl,
members : []
},
external : {
title : "Externals",
link : helper.getUniqueFilename( "externals.list" ),
members : []
}
};
function find( spec ) {
return helper.find( data, spec );
}
function tutoriallink( tutorial ) {
return helper.toTutorial( tutorial, null, { tag : 'em', classname : 'disabled', prefix : 'Tutorial: ' } );
}
function getAncestorLinks( doclet ) {
return helper.getAncestorLinks( data, doclet );
}
function hashToLink( doclet, hash ) {
if ( !/^(#.+)/.test( hash ) ) { return hash; }
var url = helper.createLink( doclet );
url = url.replace( /(#.+|$)/, hash );
return '<a href="' + url + '">' + hash + '</a>';
}
function needsSignature( doclet ) {
var needsSig = false;
// function and class definitions always get a signature
if ( doclet.kind === 'function' || doclet.kind === 'class' ) {
needsSig = true;
}
// typedefs that contain functions get a signature, too
else if ( doclet.kind === 'typedef' && doclet.type && doclet.type.names &&
doclet.type.names.length ) {
for ( var i = 0, l = doclet.type.names.length; i < l; i++ ) {
if ( doclet.type.names[i].toLowerCase() === 'function' ) {
needsSig = true;
break;
}
}
}
return needsSig;
}
function addSignatureParams( f ) {
var params = helper.getSignatureParams( f, 'optional' );
f.signature = (f.signature || '') + '(' + params.join( ', ' ) + ')';
}
function addSignatureReturns( f ) {
var returnTypes = helper.getSignatureReturns( f );
f.signature = '<span class="signature">' + (f.signature || '') + '</span>' + '<span class="type-signature">' + (returnTypes.length ? ' &rarr; {' + returnTypes.join( '|' ) + '}' : '') + '</span>';
}
function addSignatureTypes( f ) {
var types = helper.getSignatureTypes( f );
f.signature = (f.signature || '') + '<span class="type-signature">' + (types.length ? ' :' + types.join( '|' ) : '') + '</span>';
}
function addAttribs( f ) {
var attribs = helper.getAttribs( f );
f.attribs = '<span class="type-signature">' + htmlsafe( attribs.length ? '<' + attribs.join( ', ' ) + '> ' : '' ) + '</span>';
}
function shortenPaths( files, commonPrefix ) {
// always use forward slashes
var regexp = new RegExp( '\\\\', 'g' );
Object.keys( files ).forEach( function ( file ) {
files[file].shortened = files[file].resolved.replace( commonPrefix, '' )
.replace( regexp, '/' );
} );
return files;
}
function resolveSourcePath( filepath ) {
return path.resolve( process.cwd(), filepath );
}
function getPathFromDoclet( doclet ) {
if ( !doclet.meta ) {
return;
}
var filepath = doclet.meta.path && doclet.meta.path !== 'null' ?
doclet.meta.path + '/' + doclet.meta.filename :
doclet.meta.filename;
return filepath;
}
function generate( docType, title, docs, filename, resolveLinks ) {
resolveLinks = resolveLinks === false ? false : true;
var docData = {
title : title,
docs : docs,
docType : docType
};
var outpath = path.join( outdir, filename ),
html = view.render( 'container.tmpl', docData );
if ( resolveLinks ) {
html = helper.resolveLinks( html ); // turn {@link foo} into <a href="foodoc.html">foo</a>
}
fs.writeFileSync( outpath, html, 'utf8' );
}
function generateSourceFiles( sourceFiles ) {
Object.keys( sourceFiles ).forEach( function ( file ) {
var source;
// links are keyed to the shortened path in each doclet's `meta.filename` property
var sourceOutfile = helper.getUniqueFilename( sourceFiles[file].shortened );
helper.registerLink( sourceFiles[file].shortened, sourceOutfile );
try {
source = {
kind : 'source',
code : helper.htmlsafe( fs.readFileSync( sourceFiles[file].resolved, 'utf8' ) )
};
}
catch ( e ) {
handle( e );
}
generate( 'source', 'Source: ' + sourceFiles[file].shortened, [source], sourceOutfile,
false );
} );
}
/**
* Look for classes or functions with the same name as modules (which indicates that the module
* exports only that class or function), then attach the classes or functions to the `module`
* property of the appropriate module doclets. The name of each class or function is also updated
* for display purposes. This function mutates the original arrays.
*
* @private
* @param {Array.<module:jsdoc/doclet.Doclet>} doclets - The array of classes and functions to
* check.
* @param {Array.<module:jsdoc/doclet.Doclet>} modules - The array of module doclets to search.
*/
function attachModuleSymbols( doclets, modules ) {
var symbols = {};
// build a lookup table
doclets.forEach( function ( symbol ) {
symbols[symbol.longname] = symbol;
} );
return modules.map( function ( module ) {
if ( symbols[module.longname] ) {
module.module = symbols[module.longname];
module.module.name = module.module.name.replace( 'module:', 'require("' ) + '")';
}
} );
}
/**
* Create the navigation sidebar.
* @param {object} members The members that will be used to create the sidebar.
* @param {array<object>} members.classes
* @param {array<object>} members.externals
* @param {array<object>} members.globals
* @param {array<object>} members.mixins
* @param {array<object>} members.modules
* @param {array<object>} members.namespaces
* @param {array<object>} members.tutorials
* @param {array<object>} members.events
* @return {string} The HTML for the navigation sidebar.
*/
function buildNav( members ) {
var seen = {};
var nav = navigationMaster;
if ( members.modules.length ) {
members.modules.forEach( function ( m ) {
if ( !hasOwnProp.call( seen, m.longname ) ) {
nav.module.members.push( linkto( m.longname, m.name ) );
}
seen[m.longname] = true;
} );
}
if ( members.externals.length ) {
members.externals.forEach( function ( e ) {
if ( !hasOwnProp.call( seen, e.longname ) ) {
nav.external.members.push( linkto( e.longname, e.name.replace( /(^"|"$)/g, '' ) ) );
}
seen[e.longname] = true;
} );
}
if ( members.classes.length ) {
members.classes.forEach( function ( c ) {
if ( !hasOwnProp.call( seen, c.longname ) ) {
nav.class.members.push( linkto( c.longname, c.name ) );
}
seen[c.longname] = true;
} );
}
if ( members.events.length ) {
members.events.forEach( function ( e ) {
if ( !hasOwnProp.call( seen, e.longname ) ) {
nav.event.members.push( linkto( e.longname, e.name ) );
}
seen[e.longname] = true;
} );
}
if ( members.namespaces.length ) {
members.namespaces.forEach( function ( n ) {
if ( !hasOwnProp.call( seen, n.longname ) ) {
nav.namespace.members.push( linkto( n.longname, n.name ) );
}
seen[n.longname] = true;
} );
}
if ( members.mixins.length ) {
members.mixins.forEach( function ( m ) {
if ( !hasOwnProp.call( seen, m.longname ) ) {
nav.mixin.members.push( linkto( m.longname, m.name ) );
}
seen[m.longname] = true;
} );
}
if ( members.tutorials.length ) {
members.tutorials.forEach( function ( t ) {
nav.tutorial.members.push( tutoriallink( t.name ) );
} );
}
if ( members.globals.length ) {
members.globals.forEach( function ( g ) {
if ( g.kind !== 'typedef' && !hasOwnProp.call( seen, g.longname ) ) {
nav.global.members.push( linkto( g.longname, g.name ) );
}
seen[g.longname] = true;
} );
}
var topLevelNav = [];
_.each( nav, function ( entry, name ) {
if ( entry.members.length > 0 && name !== "index" ) {
topLevelNav.push( {
title : entry.title,
link : entry.link,
members : entry.members
} );
}
} );
nav.topLevelNav = topLevelNav;
}
/**
@param {TAFFY} taffyData See <http://taffydb.com/>.
@param {object} opts
@param {Tutorial} tutorials
*/
exports.publish = function ( taffyData, opts, tutorials ) {
data = taffyData;
conf['default'] = conf['default'] || {};
var templatePath = opts.template;
view = new template.Template( templatePath + '/tmpl' );
// claim some special filenames in advance, so the All-Powerful Overseer of Filename Uniqueness
// doesn't try to hand them out later
// var indexUrl = helper.getUniqueFilename( 'index' );
// don't call registerLink() on this one! 'index' is also a valid longname
// var globalUrl = helper.getUniqueFilename( 'global' );
helper.registerLink( 'global', globalUrl );
// set up templating
view.layout = 'layout.tmpl';
// set up tutorials for helper
helper.setTutorials( tutorials );
data = helper.prune( data );
data.sort( 'longname, version, since' );
helper.addEventListeners( data );
var sourceFiles = {};
var sourceFilePaths = [];
data().each( function ( doclet ) {
doclet.attribs = '';
if ( doclet.examples ) {
doclet.examples = doclet.examples.map( function ( example ) {
var caption, code;
if ( example.match( /^\s*<caption>([\s\S]+?)<\/caption>(\s*[\n\r])([\s\S]+)$/i ) ) {
caption = RegExp.$1;
code = RegExp.$3;
}
return {
caption : caption || '',
code : code || example
};
} );
}
if ( doclet.see ) {
doclet.see.forEach( function ( seeItem, i ) {
doclet.see[i] = hashToLink( doclet, seeItem );
} );
}
// build a list of source files
var sourcePath;
var resolvedSourcePath;
if ( doclet.meta ) {
sourcePath = getPathFromDoclet( doclet );
resolvedSourcePath = resolveSourcePath( sourcePath );
sourceFiles[sourcePath] = {
resolved : resolvedSourcePath,
shortened : null
};
sourceFilePaths.push( resolvedSourcePath );
}
} );
// update outdir if necessary, then create outdir
var packageInfo = ( find( {kind : 'package'} ) || [] ) [0];
if ( packageInfo && packageInfo.name ) {
outdir = path.join( outdir, packageInfo.name, packageInfo.version );
}
fs.mkPath( outdir );
// copy static files to outdir
var fromDir = path.join( templatePath, 'static' ),
staticFiles = fs.ls( fromDir, 3 );
staticFiles.forEach( function ( fileName ) {
var toDir = fs.toDir( fileName.replace( fromDir, outdir ) );
fs.mkPath( toDir );
fs.copyFileSync( fileName, toDir );
} );
if ( sourceFilePaths.length ) {
sourceFiles = shortenPaths( sourceFiles, path.commonPrefix( sourceFilePaths ) );
}
data().each( function ( doclet ) {
var url = helper.createLink( doclet );
helper.registerLink( doclet.longname, url );
// replace the filename with a shortened version of the full path
var docletPath;
if ( doclet.meta ) {
docletPath = getPathFromDoclet( doclet );
docletPath = sourceFiles[docletPath].shortened;
if ( docletPath ) {
doclet.meta.filename = docletPath;
}
}
} );
data().each( function ( doclet ) {
var url = helper.longnameToUrl[doclet.longname];
if ( url.indexOf( '#' ) > -1 ) {
doclet.id = helper.longnameToUrl[doclet.longname].split( /#/ ).pop();
}
else {
doclet.id = doclet.name;
}
if ( needsSignature( doclet ) ) {
addSignatureParams( doclet );
addSignatureReturns( doclet );
addAttribs( doclet );
}
} );
// do this after the urls have all been generated
data().each( function ( doclet ) {
doclet.ancestors = getAncestorLinks( doclet );
if ( doclet.kind === 'member' ) {
addSignatureTypes( doclet );
addAttribs( doclet );
}
if ( doclet.kind === 'constant' ) {
addSignatureTypes( doclet );
addAttribs( doclet );
doclet.kind = 'member';
}
} );
var members = helper.getMembers( data );
members.tutorials = tutorials.children;
// add template helpers
view.find = find;
view.linkto = linkto;
view.resolveAuthorLinks = resolveAuthorLinks;
view.tutoriallink = tutoriallink;
view.htmlsafe = htmlsafe;
// once for all
buildNav( members );
view.nav = navigationMaster;
view.navOptions = navOptions;
attachModuleSymbols( find( { kind : ['class', 'function'], longname : {left : 'module:'} } ),
members.modules );
// only output pretty-printed source files if requested; do this before generating any other
// pages, so the other pages can link to the source files
if ( conf['default'].outputSourceFiles ) {
generateSourceFiles( sourceFiles );
}
if ( members.globals.length ) {
generate( 'global', 'Global', [
{kind : 'globalobj'}
], globalUrl );
}
// some browsers can't make the dropdown work
if ( view.nav.module && view.nav.module.members.length ) {
generate( 'module', view.nav.module.title, [
{kind : 'sectionIndex', contents : view.nav.module}
], navigationMaster.module.link );
}
if ( view.nav.class && view.nav.class.members.length ) {
generate( 'class', view.nav.class.title, [
{kind : 'sectionIndex', contents : view.nav.class}
], navigationMaster.class.link );
}
if ( view.nav.namespace && view.nav.namespace.members.length ) {
generate( 'namespace', view.nav.namespace.title, [
{kind : 'sectionIndex', contents : view.nav.namespace}
], navigationMaster.namespace.link );
}
if ( view.nav.mixin && view.nav.mixin.members.length ) {
generate( 'mixin', view.nav.mixin.title, [
{kind : 'sectionIndex', contents : view.nav.mixin}
], navigationMaster.mixin.link );
}
if ( view.nav.external && view.nav.external.members.length ) {
generate( 'external', view.nav.external.title, [
{kind : 'sectionIndex', contents : view.nav.external}
], navigationMaster.external.link );
}
if ( view.nav.tutorial && view.nav.tutorial.members.length ) {
generate( 'tutorial', view.nav.tutorial.title, [
{kind : 'sectionIndex', contents : view.nav.tutorial}
], navigationMaster.tutorial.link );
}
// index page displays information from package.json and lists files
var files = find( {kind : 'file'} ),
packages = find( {kind : 'package'} );
generate( 'index', 'Index',
packages.concat(
[
{kind : 'mainpage', readme : opts.readme, longname : (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page'}
]
).concat( files ),
indexUrl );
// set up the lists that we'll use to generate pages
var classes = taffy( members.classes );
var modules = taffy( members.modules );
var namespaces = taffy( members.namespaces );
var mixins = taffy( members.mixins );
var externals = taffy( members.externals );
for ( var longname in helper.longnameToUrl ) {
if ( hasOwnProp.call( helper.longnameToUrl, longname ) ) {
var myClasses = helper.find( classes, {longname : longname} );
if ( myClasses.length ) {
generate( 'class', 'Class: ' + myClasses[0].name, myClasses, helper.longnameToUrl[longname] );
}
var myModules = helper.find( modules, {longname : longname} );
if ( myModules.length ) {
generate( 'module', 'Module: ' + myModules[0].name, myModules, helper.longnameToUrl[longname] );
}
var myNamespaces = helper.find( namespaces, {longname : longname} );
if ( myNamespaces.length ) {
generate( 'namespace', 'Namespace: ' + myNamespaces[0].name, myNamespaces, helper.longnameToUrl[longname] );
}
var myMixins = helper.find( mixins, {longname : longname} );
if ( myMixins.length ) {
generate( 'mixin', 'Mixin: ' + myMixins[0].name, myMixins, helper.longnameToUrl[longname] );
}
var myExternals = helper.find( externals, {longname : longname} );
if ( myExternals.length ) {
generate( 'external', 'External: ' + myExternals[0].name, myExternals, helper.longnameToUrl[longname] );
}
}
}
// TODO: move the tutorial functions to templateHelper.js
function generateTutorial( title, tutorial, filename ) {
var tutorialData = {
title : title,
header : tutorial.title,
content : tutorial.parse(),
children : tutorial.children,
docs : null
};
var tutorialPath = path.join( outdir, filename ),
html = view.render( 'tutorial.tmpl', tutorialData );
// yes, you can use {@link} in tutorials too!
html = helper.resolveLinks( html ); // turn {@link foo} into <a href="foodoc.html">foo</a>
fs.writeFileSync( tutorialPath, html, 'utf8' );
}
// tutorials can have only one parent so there is no risk for loops
function saveChildren( node ) {
node.children.forEach( function ( child ) {
generateTutorial( 'tutorial' + child.title, child, helper.tutorialToUrl( child.name ) );
saveChildren( child );
} );
}
saveChildren( tutorials );
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because it is too large Load Diff
@@ -0,0 +1,165 @@
/* ============================================================
* bootstrap-dropdown.js v2.3.1
* http://twitter.github.com/bootstrap/javascript.html#dropdowns
* ============================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================ */
!function ($) {
"use strict"; // jshint ;_;
/* DROPDOWN CLASS DEFINITION
* ========================= */
var toggle = '[data-toggle=dropdown]'
, Dropdown = function (element) {
var $el = $(element).on('click.dropdown.data-api', this.toggle)
$('html').on('click.dropdown.data-api', function () {
$el.parent().removeClass('open')
})
}
Dropdown.prototype = {
constructor: Dropdown
, toggle: function (e) {
var $this = $(this)
, $parent
, isActive
if ($this.is('.disabled, :disabled')) return
$parent = getParent($this)
isActive = $parent.hasClass('open')
clearMenus()
if (!isActive) {
$parent.toggleClass('open')
}
$this.focus()
return false
}
, keydown: function (e) {
var $this
, $items
, $active
, $parent
, isActive
, index
if (!/(38|40|27)/.test(e.keyCode)) return
$this = $(this)
e.preventDefault()
e.stopPropagation()
if ($this.is('.disabled, :disabled')) return
$parent = getParent($this)
isActive = $parent.hasClass('open')
if (!isActive || (isActive && e.keyCode == 27)) {
if (e.which == 27) $parent.find(toggle).focus()
return $this.click()
}
$items = $('[role=menu] li:not(.divider):visible a', $parent)
if (!$items.length) return
index = $items.index($items.filter(':focus'))
if (e.keyCode == 38 && index > 0) index-- // up
if (e.keyCode == 40 && index < $items.length - 1) index++ // down
if (!~index) index = 0
$items
.eq(index)
.focus()
}
}
function clearMenus() {
$(toggle).each(function () {
getParent($(this)).removeClass('open')
})
}
function getParent($this) {
var selector = $this.attr('data-target')
, $parent
if (!selector) {
selector = $this.attr('href')
selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
}
$parent = selector && $(selector)
if (!$parent || !$parent.length) $parent = $this.parent()
return $parent
}
/* DROPDOWN PLUGIN DEFINITION
* ========================== */
var old = $.fn.dropdown
$.fn.dropdown = function (option) {
return this.each(function () {
var $this = $(this)
, data = $this.data('dropdown')
if (!data) $this.data('dropdown', (data = new Dropdown(this)))
if (typeof option == 'string') data[option].call($this)
})
}
$.fn.dropdown.Constructor = Dropdown
/* DROPDOWN NO CONFLICT
* ==================== */
$.fn.dropdown.noConflict = function () {
$.fn.dropdown = old
return this
}
/* APPLY TO STANDARD DROPDOWN ELEMENTS
* =================================== */
$(document)
.on('click.dropdown.data-api', clearMenus)
.on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
.on('click.dropdown-menu', function (e) { e.stopPropagation() })
.on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
.on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
}(window.jQuery);
@@ -0,0 +1,144 @@
/* ========================================================
* bootstrap-tab.js v2.3.0
* http://twitter.github.com/bootstrap/javascript.html#tabs
* ========================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ======================================================== */
!function ($) {
"use strict"; // jshint ;_;
/* TAB CLASS DEFINITION
* ==================== */
var Tab = function (element) {
this.element = $(element)
}
Tab.prototype = {
constructor: Tab
, show: function () {
var $this = this.element
, $ul = $this.closest('ul:not(.dropdown-menu)')
, selector = $this.attr('data-target')
, previous
, $target
, e
if (!selector) {
selector = $this.attr('href')
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
}
if ( $this.parent('li').hasClass('active') ) return
previous = $ul.find('.active:last a')[0]
e = $.Event('show', {
relatedTarget: previous
})
$this.trigger(e)
if (e.isDefaultPrevented()) return
$target = $(selector)
this.activate($this.parent('li'), $ul)
this.activate($target, $target.parent(), function () {
$this.trigger({
type: 'shown'
, relatedTarget: previous
})
})
}
, activate: function ( element, container, callback) {
var $active = container.find('> .active')
, transition = callback
&& $.support.transition
&& $active.hasClass('fade')
function next() {
$active
.removeClass('active')
.find('> .dropdown-menu > .active')
.removeClass('active')
element.addClass('active')
if (transition) {
element[0].offsetWidth // reflow for transition
element.addClass('in')
} else {
element.removeClass('fade')
}
if ( element.parent('.dropdown-menu') ) {
element.closest('li.dropdown').addClass('active')
}
callback && callback()
}
transition ?
$active.one($.support.transition.end, next) :
next()
$active.removeClass('in')
}
}
/* TAB PLUGIN DEFINITION
* ===================== */
var old = $.fn.tab
$.fn.tab = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('tab')
if (!data) $this.data('tab', (data = new Tab(this)))
if (typeof option == 'string') data[option]()
})
}
$.fn.tab.Constructor = Tab
/* TAB NO CONFLICT
* =============== */
$.fn.tab.noConflict = function () {
$.fn.tab = old
return this
}
/* TAB DATA-API
* ============ */
$(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
e.preventDefault()
$(this).tab('show')
})
}(window.jQuery);
@@ -0,0 +1,130 @@
/*!
* jQuery.LocalScroll
* Copyright (c) 2007-2013 Ariel Flesler - aflesler<a>gmail<d>com | http://flesler.blogspot.com
* Dual licensed under MIT and GPL.
* http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html
* @author Ariel Flesler
* @version 1.2.8
*
* @id jQuery.fn.localScroll
* @param {Object} settings Hash of settings, it is passed in to jQuery.ScrollTo, none is required.
* @return {jQuery} Returns the same jQuery object, for chaining.
*
* @example $('ul.links').localScroll();
*
* @example $('ul.links').localScroll({ filter:'.animated', duration:400, axis:'x' });
*
* @example $.localScroll({ target:'#pane', axis:'xy', queue:true, event:'mouseover' });
*
* Notes:
* - The plugin requires jQuery.ScrollTo.
* - The hash of settings, is passed to jQuery.ScrollTo, so the settings are valid for that plugin as well.
* - jQuery.localScroll can be used if the desired links, are all over the document, it accepts the same settings.
* - If the setting 'lazy' is set to true, then the binding will still work for later added anchors.
* - If onBefore returns false, the event is ignored.
*/
;(function( $ ){
var URI = location.href.replace(/#.*/,''); // local url without hash
var $localScroll = $.localScroll = function( settings ){
$('body').localScroll( settings );
};
// Many of these defaults, belong to jQuery.ScrollTo, check it's demo for an example of each option.
// @see http://flesler.demos.com/jquery/scrollTo/
// The defaults are public and can be overriden.
$localScroll.defaults = {
duration:1000, // How long to animate.
axis:'y', // Which of top and left should be modified.
event:'click', // On which event to react.
stop:true, // Avoid queuing animations
target: window, // What to scroll (selector or element). The whole window by default.
reset: true // Used by $.localScroll.hash. If true, elements' scroll is resetted before actual scrolling
/*
lock:false, // ignore events if already animating
lazy:false, // if true, links can be added later, and will still work.
filter:null, // filter some anchors out of the matched elements.
hash: false // if true, the hash of the selected link, will appear on the address bar.
*/
};
// If the URL contains a hash, it will scroll to the pointed element
$localScroll.hash = function( settings ){
if( location.hash ){
settings = $.extend( {}, $localScroll.defaults, settings );
settings.hash = false; // can't be true
if( settings.reset ){
var d = settings.duration;
delete settings.duration;
$(settings.target).scrollTo( 0, settings );
settings.duration = d;
}
scroll( 0, location, settings );
}
};
$.fn.localScroll = function( settings ){
settings = $.extend( {}, $localScroll.defaults, settings );
return settings.lazy ?
// use event delegation, more links can be added later.
this.bind( settings.event, function( e ){
// Could use closest(), but that would leave out jQuery -1.3.x
var a = $([e.target, e.target.parentNode]).filter(filter)[0];
// if a valid link was clicked
if( a )
scroll( e, a, settings ); // do scroll.
}) :
// bind concretely, to each matching link
this.find('a,area')
.filter( filter ).bind( settings.event, function(e){
scroll( e, this, settings );
}).end()
.end();
function filter(){// is this a link that points to an anchor and passes a possible filter ? href is checked to avoid a bug in FF.
return !!this.href && !!this.hash && this.href.replace(this.hash,'') == URI && (!settings.filter || $(this).is( settings.filter ));
};
};
function scroll( e, link, settings ){
var id = link.hash.slice(1),
elem = document.getElementById(id) || document.getElementsByName(id)[0];
if ( !elem )
return;
if( e )
e.preventDefault();
var $target = $( settings.target );
if( settings.lock && $target.is(':animated') ||
settings.onBefore && settings.onBefore(e, elem, $target) === false )
return;
if( settings.stop )
$target._scrollable().stop(true); // remove all its animations
if( settings.hash ){
var attr = elem.id == id ? 'id' : 'name',
$a = $('<a> </a>').attr(attr, id).css({
position:'absolute',
top: $(window).scrollTop(),
left: $(window).scrollLeft()
});
elem[attr] = '';
$('body').prepend($a);
location = link.hash;
$a.remove();
elem[attr] = id;
}
$target
.scrollTo( elem, settings ) // do scroll
.trigger('notify.serialScroll',[elem]); // notify serialScroll about this change
};
})( jQuery );
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,217 @@
/*!
* jQuery.ScrollTo
* Copyright (c) 2007-2013 Ariel Flesler - aflesler<a>gmail<d>com | http://flesler.blogspot.com
* Dual licensed under MIT and GPL.
*
* @projectDescription Easy element scrolling using jQuery.
* http://flesler.blogspot.com/2007/10/jqueryscrollto.html
* @author Ariel Flesler
* @version 1.4.5
*
* @id jQuery.scrollTo
* @id jQuery.fn.scrollTo
* @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements.
* The different options for target are:
* - A number position (will be applied to all axes).
* - A string position ('44', '100px', '+=90', etc ) will be applied to all axes
* - A jQuery/DOM element ( logically, child of the element to scroll )
* - A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc )
* - A hash { top:x, left:y }, x and y can be any kind of number/string like above.
* - A percentage of the container's dimension/s, for example: 50% to go to the middle.
* - The string 'max' for go-to-end.
* @param {Number, Function} duration The OVERALL length of the animation, this argument can be the settings object instead.
* @param {Object,Function} settings Optional set of settings or the onAfter callback.
* @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'.
* @option {Number, Function} duration The OVERALL length of the animation.
* @option {String} easing The easing method for the animation.
* @option {Boolean} margin If true, the margin of the target element will be deducted from the final position.
* @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }.
* @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes.
* @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends.
* @option {Function} onAfter Function to be called after the scrolling ends.
* @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends.
* @return {jQuery} Returns the same jQuery object, for chaining.
*
* @desc Scroll to a fixed position
* @example $('div').scrollTo( 340 );
*
* @desc Scroll relatively to the actual position
* @example $('div').scrollTo( '+=340px', { axis:'y' } );
*
* @desc Scroll using a selector (relative to the scrolled element)
* @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } );
*
* @desc Scroll to a DOM element (same for jQuery object)
* @example var second_child = document.getElementById('container').firstChild.nextSibling;
* $('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){
* alert('scrolled!!');
* }});
*
* @desc Scroll on both axes, to different values
* @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } );
*/
;(function( $ ){
var $scrollTo = $.scrollTo = function( target, duration, settings ){
$(window).scrollTo( target, duration, settings );
};
$scrollTo.defaults = {
axis:'xy',
duration: parseFloat($.fn.jquery) >= 1.3 ? 0 : 1,
limit:true
};
// Returns the element that needs to be animated to scroll the window.
// Kept for backwards compatibility (specially for localScroll & serialScroll)
$scrollTo.window = function( scope ){
return $(window)._scrollable();
};
// Hack, hack, hack :)
// Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
$.fn._scrollable = function(){
return this.map(function(){
var elem = this,
isWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;
if( !isWin )
return elem;
var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem;
return /webkit/i.test(navigator.userAgent) || doc.compatMode == 'BackCompat' ?
doc.body :
doc.documentElement;
});
};
$.fn.scrollTo = function( target, duration, settings ){
if( typeof duration == 'object' ){
settings = duration;
duration = 0;
}
if( typeof settings == 'function' )
settings = { onAfter:settings };
if( target == 'max' )
target = 9e9;
settings = $.extend( {}, $scrollTo.defaults, settings );
// Speed is still recognized for backwards compatibility
duration = duration || settings.duration;
// Make sure the settings are given right
settings.queue = settings.queue && settings.axis.length > 1;
if( settings.queue )
// Let's keep the overall duration
duration /= 2;
settings.offset = both( settings.offset );
settings.over = both( settings.over );
return this._scrollable().each(function(){
// Null target yields nothing, just like jQuery does
if (target == null) return;
var elem = this,
$elem = $(elem),
targ = target, toff, attr = {},
win = $elem.is('html,body');
switch( typeof targ ){
// A number will pass the regex
case 'number':
case 'string':
if( /^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ) ){
targ = both( targ );
// We are done
break;
}
// Relative selector, no break!
targ = $(targ,this);
if (!targ.length) return;
case 'object':
// DOMElement / jQuery
if( targ.is || targ.style )
// Get the real position of the target
toff = (targ = $(targ)).offset();
}
$.each( settings.axis.split(''), function( i, axis ){
var Pos = axis == 'x' ? 'Left' : 'Top',
pos = Pos.toLowerCase(),
key = 'scroll' + Pos,
old = elem[key],
max = $scrollTo.max(elem, axis);
if( toff ){// jQuery / DOMElement
attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );
// If it's a dom element, reduce the margin
if( settings.margin ){
attr[key] -= parseInt(targ.css('margin'+Pos)) || 0;
attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;
}
attr[key] += settings.offset[pos] || 0;
if( settings.over[pos] )
// Scroll to a fraction of its width/height
attr[key] += targ[axis=='x'?'width':'height']() * settings.over[pos];
}else{
var val = targ[pos];
// Handle percentage values
attr[key] = val.slice && val.slice(-1) == '%' ?
parseFloat(val) / 100 * max
: val;
}
// Number or 'number'
if( settings.limit && /^\d+$/.test(attr[key]) )
// Check the limits
attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max );
// Queueing axes
if( !i && settings.queue ){
// Don't waste time animating, if there's no need.
if( old != attr[key] )
// Intermediate animation
animate( settings.onAfterFirst );
// Don't animate this axis again in the next iteration.
delete attr[key];
}
});
animate( settings.onAfter );
function animate( callback ){
$elem.animate( attr, duration, settings.easing, callback && function(){
callback.call(this, target, settings);
});
};
}).end();
};
// Max scrolling position, works on quirks mode
// It only fails (not too badly) on IE, quirks mode.
$scrollTo.max = function( elem, axis ){
var Dim = axis == 'x' ? 'Width' : 'Height',
scroll = 'scroll'+Dim;
if( !$(elem).is('html,body') )
return elem[scroll] - $(elem)[Dim.toLowerCase()]();
var size = 'client' + Dim,
html = elem.ownerDocument.documentElement,
body = elem.ownerDocument.body;
return Math.max( html[scroll], body[scroll] )
- Math.min( html[size] , body[size] );
};
function both( val ){
return typeof val == 'object' ? val : { top:val, left:val };
};
})( jQuery );
@@ -0,0 +1,18 @@
/**
* jQuery plugin for Sunlight http://sunlightjs.com/
*
* by Tommy Montgomery http://tmont.com/
* licensed under WTFPL http://sam.zoy.org/wtfpl/
*/
(function($, window){
$.fn.sunlight = function(options) {
var highlighter = new window.Sunlight.Highlighter(options);
this.each(function() {
highlighter.highlightNode(this);
});
return this;
};
}(jQuery, this));
@@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
File diff suppressed because one or more lines are too long
@@ -0,0 +1,21 @@
PR.registerLangHandler(PR.createSimpleLexer([
["pln", /^[\t\n\f\r ]+/, null, " \t\r\n "]
], [
["str", /^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/, null],
["str", /^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/, null],
["lang-css-str", /^url\(([^"')]*)\)/i],
["kwd", /^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i, null],
["lang-css-kw", /^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],
["com", /^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],
["com", /^(?:<\!--|--\>)/],
["lit", /^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],
["lit", /^#[\da-f]{3,6}/i],
["pln", /^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],
["pun", /^[^\s\w"']+/]
]), ["css"]);
PR.registerLangHandler(PR.createSimpleLexer([], [
["kwd", /^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]
]), ["css-kw"]);
PR.registerLangHandler(PR.createSimpleLexer([], [
["str", /^[^"')]+/]
]), ["css-str"]);
@@ -0,0 +1,496 @@
var q = null;
window.PR_SHOULD_USE_CONTINUATION = !0;
(function() {
function L(a) {
function m(a) {
var f = a.charCodeAt(0);
if (f !== 92) return f;
var b = a.charAt(1);
return (f = r[b]) ? f : "0" <= b && b <= "7" ? parseInt(a.substring(1), 8) : b === "u" || b === "x" ? parseInt(a.substring(2), 16) : a.charCodeAt(1)
}
function e(a) {
if (a < 32) return (a < 16 ? "\\x0" : "\\x") + a.toString(16);
a = String.fromCharCode(a);
if (a === "\\" || a === "-" || a === "[" || a === "]") a = "\\" + a;
return a
}
function h(a) {
for (var f = a.substring(1, a.length - 1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g), a = [], b = [], o = f[0] === "^", c = o ? 1 : 0, i = f.length; c < i; ++c) {
var j = f[c];
if (/\\[bdsw]/i.test(j)) a.push(j);
else {
var j = m(j),
d;
c + 2 < i && "-" === f[c + 1] ? (d = m(f[c + 2]), c += 2) : d = j;
b.push([j, d]);
d < 65 || j > 122 || (d < 65 || j > 90 || b.push([Math.max(65, j) | 32, Math.min(d, 90) | 32]), d < 97 || j > 122 || b.push([Math.max(97, j) & -33, Math.min(d, 122) & -33]))
}
}
b.sort(function(a, f) {
return a[0] - f[0] || f[1] - a[1]
});
f = [];
j = [NaN, NaN];
for (c = 0; c < b.length; ++c) i = b[c], i[0] <= j[1] + 1 ? j[1] = Math.max(j[1], i[1]) : f.push(j = i);
b = ["["];
o && b.push("^");
b.push.apply(b, a);
for (c = 0; c < f.length; ++c) i = f[c], b.push(e(i[0])), i[1] > i[0] && (i[1] + 1 > i[0] && b.push("-"), b.push(e(i[1])));
b.push("]");
return b.join("")
}
function y(a) {
for (var f = a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g), b = f.length, d = [], c = 0, i = 0; c < b; ++c) {
var j = f[c];
j === "(" ? ++i : "\\" === j.charAt(0) && (j = +j.substring(1)) && j <= i && (d[j] = -1)
}
for (c = 1; c < d.length; ++c) - 1 === d[c] && (d[c] = ++t);
for (i = c = 0; c < b; ++c) j = f[c], j === "(" ? (++i, d[i] === void 0 && (f[c] = "(?:")) : "\\" === j.charAt(0) && (j = +j.substring(1)) && j <= i && (f[c] = "\\" + d[i]);
for (i = c = 0; c < b; ++c)"^" === f[c] && "^" !== f[c + 1] && (f[c] = "");
if (a.ignoreCase && s) for (c = 0; c < b; ++c) j = f[c], a = j.charAt(0), j.length >= 2 && a === "[" ? f[c] = h(j) : a !== "\\" && (f[c] = j.replace(/[A-Za-z]/g, function(a) {
a = a.charCodeAt(0);
return "[" + String.fromCharCode(a & -33, a | 32) + "]"
}));
return f.join("")
}
for (var t = 0, s = !1, l = !1, p = 0, d = a.length; p < d; ++p) {
var g = a[p];
if (g.ignoreCase) l = !0;
else if (/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi, ""))) {
s = !0;
l = !1;
break
}
}
for (var r = {
b: 8,
t: 9,
n: 10,
v: 11,
f: 12,
r: 13
}, n = [], p = 0, d = a.length; p < d; ++p) {
g = a[p];
if (g.global || g.multiline) throw Error("" + g);
n.push("(?:" + y(g) + ")")
}
return RegExp(n.join("|"), l ? "gi" : "g")
}
function M(a) {
function m(a) {
switch (a.nodeType) {
case 1:
if (e.test(a.className)) break;
for (var g = a.firstChild; g; g = g.nextSibling) m(g);
g = a.nodeName;
if ("BR" === g || "LI" === g) h[s] = "\n", t[s << 1] = y++, t[s++ << 1 | 1] = a;
break;
case 3:
case 4:
g = a.nodeValue, g.length && (g = p ? g.replace(/\r\n?/g, "\n") : g.replace(/[\t\n\r ]+/g, " "), h[s] = g, t[s << 1] = y, y += g.length, t[s++ << 1 | 1] = a)
}
}
var e = /(?:^|\s)nocode(?:\s|$)/,
h = [],
y = 0,
t = [],
s = 0,
l;
a.currentStyle ? l = a.currentStyle.whiteSpace : window.getComputedStyle && (l = document.defaultView.getComputedStyle(a, q).getPropertyValue("white-space"));
var p = l && "pre" === l.substring(0, 3);
m(a);
return {
a: h.join("").replace(/\n$/, ""),
c: t
}
}
function B(a, m, e, h) {
m && (a = {
a: m,
d: a
}, e(a), h.push.apply(h, a.e))
}
function x(a, m) {
function e(a) {
for (var l = a.d, p = [l, "pln"], d = 0, g = a.a.match(y) || [], r = {}, n = 0, z = g.length; n < z; ++n) {
var f = g[n],
b = r[f],
o = void 0,
c;
if (typeof b === "string") c = !1;
else {
var i = h[f.charAt(0)];
if (i) o = f.match(i[1]), b = i[0];
else {
for (c = 0; c < t; ++c) if (i = m[c], o = f.match(i[1])) {
b = i[0];
break
}
o || (b = "pln")
}
if ((c = b.length >= 5 && "lang-" === b.substring(0, 5)) && !(o && typeof o[1] === "string")) c = !1, b = "src";
c || (r[f] = b)
}
i = d;
d += f.length;
if (c) {
c = o[1];
var j = f.indexOf(c),
k = j + c.length;
o[2] && (k = f.length - o[2].length, j = k - c.length);
b = b.substring(5);
B(l + i, f.substring(0, j), e, p);
B(l + i + j, c, C(b, c), p);
B(l + i + k, f.substring(k), e, p)
} else p.push(l + i, b)
}
a.e = p
}
var h = {},
y;
(function() {
for (var e = a.concat(m), l = [], p = {}, d = 0, g = e.length; d < g; ++d) {
var r = e[d],
n = r[3];
if (n) for (var k = n.length; --k >= 0;) h[n.charAt(k)] = r;
r = r[1];
n = "" + r;
p.hasOwnProperty(n) || (l.push(r), p[n] = q)
}
l.push(/[\S\s]/);
y = L(l)
})();
var t = m.length;
return e
}
function u(a) {
var m = [],
e = [];
a.tripleQuotedStrings ? m.push(["str", /^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/, q, "'\""]) : a.multiLineStrings ? m.push(["str", /^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, q, "'\"`"]) : m.push(["str", /^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/, q, "\"'"]);
a.verbatimStrings && e.push(["str", /^@"(?:[^"]|"")*(?:"|$)/, q]);
var h = a.hashComments;
h && (a.cStyleComments ? (h > 1 ? m.push(["com", /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, q, "#"]) : m.push(["com", /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/, q, "#"]), e.push(["str", /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/, q])) : m.push(["com", /^#[^\n\r]*/, q, "#"]));
a.cStyleComments && (e.push(["com", /^\/\/[^\n\r]*/, q]), e.push(["com", /^\/\*[\S\s]*?(?:\*\/|$)/, q]));
a.regexLiterals && e.push(["lang-regex", /^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);
(h = a.types) && e.push(["typ", h]);
a = ("" + a.keywords).replace(/^ | $/g, "");
a.length && e.push(["kwd", RegExp("^(?:" + a.replace(/[\s,]+/g, "|") + ")\\b"), q]);
m.push(["pln", /^\s+/, q, " \r\n\t\xa0"]);
e.push(["lit", /^@[$_a-z][\w$@]*/i, q], ["typ", /^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/, q], ["pln", /^[$_a-z][\w$@]*/i, q], ["lit", /^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i, q, "0123456789"], ["pln", /^\\[\S\s]?/, q], ["pun", /^.[^\s\w"-$'./@\\`]*/, q]);
return x(m, e)
}
function D(a, m) {
function e(a) {
switch (a.nodeType) {
case 1:
if (k.test(a.className)) break;
if ("BR" === a.nodeName) h(a), a.parentNode && a.parentNode.removeChild(a);
else for (a = a.firstChild; a; a = a.nextSibling) e(a);
break;
case 3:
case 4:
if (p) {
var b = a.nodeValue,
d = b.match(t);
if (d) {
var c = b.substring(0, d.index);
a.nodeValue = c;
(b = b.substring(d.index + d[0].length)) && a.parentNode.insertBefore(s.createTextNode(b), a.nextSibling);
h(a);
c || a.parentNode.removeChild(a)
}
}
}
}
function h(a) {
function b(a, d) {
var e = d ? a.cloneNode(!1) : a,
f = a.parentNode;
if (f) {
var f = b(f, 1),
g = a.nextSibling;
f.appendChild(e);
for (var h = g; h; h = g) g = h.nextSibling, f.appendChild(h)
}
return e
}
for (; !a.nextSibling;) if (a = a.parentNode, !a) return;
for (var a = b(a.nextSibling, 0), e;
(e = a.parentNode) && e.nodeType === 1;) a = e;
d.push(a)
}
var k = /(?:^|\s)nocode(?:\s|$)/,
t = /\r\n?|\n/,
s = a.ownerDocument,
l;
a.currentStyle ? l = a.currentStyle.whiteSpace : window.getComputedStyle && (l = s.defaultView.getComputedStyle(a, q).getPropertyValue("white-space"));
var p = l && "pre" === l.substring(0, 3);
for (l = s.createElement("LI"); a.firstChild;) l.appendChild(a.firstChild);
for (var d = [l], g = 0; g < d.length; ++g) e(d[g]);
m === (m | 0) && d[0].setAttribute("value", m);
var r = s.createElement("OL");
r.className = "linenums";
for (var n = Math.max(0, m - 1 | 0) || 0, g = 0, z = d.length; g < z; ++g) l = d[g], l.className = "L" + (g + n) % 10, l.firstChild || l.appendChild(s.createTextNode("\xa0")), r.appendChild(l);
a.appendChild(r)
}
function k(a, m) {
for (var e = m.length; --e >= 0;) {
var h = m[e];
A.hasOwnProperty(h) ? window.console && console.warn("cannot override language handler %s", h) : A[h] = a
}
}
function C(a, m) {
if (!a || !A.hasOwnProperty(a)) a = /^\s*</.test(m) ? "default-markup" : "default-code";
return A[a]
}
function E(a) {
var m =
a.g;
try {
var e = M(a.h),
h = e.a;
a.a = h;
a.c = e.c;
a.d = 0;
C(m, h)(a);
var k = /\bMSIE\b/.test(navigator.userAgent),
m = /\n/g,
t = a.a,
s = t.length,
e = 0,
l = a.c,
p = l.length,
h = 0,
d = a.e,
g = d.length,
a = 0;
d[g] = s;
var r, n;
for (n = r = 0; n < g;) d[n] !== d[n + 2] ? (d[r++] = d[n++], d[r++] = d[n++]) : n += 2;
g = r;
for (n = r = 0; n < g;) {
for (var z = d[n], f = d[n + 1], b = n + 2; b + 2 <= g && d[b + 1] === f;) b += 2;
d[r++] = z;
d[r++] = f;
n = b
}
for (d.length = r; h < p;) {
var o = l[h + 2] || s,
c = d[a + 2] || s,
b = Math.min(o, c),
i = l[h + 1],
j;
if (i.nodeType !== 1 && (j = t.substring(e, b))) {
k && (j = j.replace(m, "\r"));
i.nodeValue =
j;
var u = i.ownerDocument,
v = u.createElement("SPAN");
v.className = d[a + 1];
var x = i.parentNode;
x.replaceChild(v, i);
v.appendChild(i);
e < o && (l[h + 1] = i = u.createTextNode(t.substring(b, o)), x.insertBefore(i, v.nextSibling))
}
e = b;
e >= o && (h += 2);
e >= c && (a += 2)
}
} catch (w) {
"console" in window && console.log(w && w.stack ? w.stack : w)
}
}
var v = ["break,continue,do,else,for,if,return,while"],
w = [
[v, "auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], "catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],
F = [w, "alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],
G = [w, "abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
H = [G, "as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],
w = [w, "debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],
I = [v, "and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
J = [v, "alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],
v = [v, "case,done,elif,esac,eval,fi,function,in,local,set,then,until"],
K = /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,
N = /\S/,
O = u({
keywords: [F, H, w, "caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END" + I, J, v],
hashComments: !0,
cStyleComments: !0,
multiLineStrings: !0,
regexLiterals: !0
}),
A = {};
k(O, ["default-code"]);
k(x([], [
["pln", /^[^<?]+/],
["dec", /^<!\w[^>]*(?:>|$)/],
["com", /^<\!--[\S\s]*?(?:--\>|$)/],
["lang-", /^<\?([\S\s]+?)(?:\?>|$)/],
["lang-", /^<%([\S\s]+?)(?:%>|$)/],
["pun", /^(?:<[%?]|[%?]>)/],
["lang-", /^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],
["lang-js", /^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],
["lang-css", /^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],
["lang-in.tag", /^(<\/?[a-z][^<>]*>)/i]
]), ["default-markup", "htm", "html", "mxml", "xhtml", "xml", "xsl"]);
k(x([
["pln", /^\s+/, q, " \t\r\n"],
["atv", /^(?:"[^"]*"?|'[^']*'?)/, q, "\"'"]
], [
["tag", /^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],
["atn", /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
["lang-uq.val", /^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],
["pun", /^[/<->]+/],
["lang-js", /^on\w+\s*=\s*"([^"]+)"/i],
["lang-js", /^on\w+\s*=\s*'([^']+)'/i],
["lang-js", /^on\w+\s*=\s*([^\s"'>]+)/i],
["lang-css", /^style\s*=\s*"([^"]+)"/i],
["lang-css", /^style\s*=\s*'([^']+)'/i],
["lang-css", /^style\s*=\s*([^\s"'>]+)/i]
]), ["in.tag"]);
k(x([], [
["atv", /^[\S\s]+/]
]), ["uq.val"]);
k(u({
keywords: F,
hashComments: !0,
cStyleComments: !0,
types: K
}), ["c", "cc", "cpp", "cxx", "cyc", "m"]);
k(u({
keywords: "null,true,false"
}), ["json"]);
k(u({
keywords: H,
hashComments: !0,
cStyleComments: !0,
verbatimStrings: !0,
types: K
}), ["cs"]);
k(u({
keywords: G,
cStyleComments: !0
}), ["java"]);
k(u({
keywords: v,
hashComments: !0,
multiLineStrings: !0
}), ["bsh", "csh", "sh"]);
k(u({
keywords: I,
hashComments: !0,
multiLineStrings: !0,
tripleQuotedStrings: !0
}), ["cv", "py"]);
k(u({
keywords: "caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",
hashComments: !0,
multiLineStrings: !0,
regexLiterals: !0
}), ["perl", "pl", "pm"]);
k(u({
keywords: J,
hashComments: !0,
multiLineStrings: !0,
regexLiterals: !0
}), ["rb"]);
k(u({
keywords: w,
cStyleComments: !0,
regexLiterals: !0
}), ["js"]);
k(u({
keywords: "all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
hashComments: 3,
cStyleComments: !0,
multilineStrings: !0,
tripleQuotedStrings: !0,
regexLiterals: !0
}), ["coffee"]);
k(x([], [
["str", /^[\S\s]+/]
]), ["regex"]);
window.prettyPrintOne = function(a, m, e) {
var h = document.createElement("PRE");
h.innerHTML = a;
e && D(h, e);
E({
g: m,
i: e,
h: h
});
return h.innerHTML
};
window.prettyPrint = function(a) {
function m() {
for (var e = window.PR_SHOULD_USE_CONTINUATION ? l.now() + 250 : Infinity; p < h.length && l.now() < e; p++) {
var n = h[p],
k = n.className;
if (k.indexOf("prettyprint") >= 0) {
var k = k.match(g),
f, b;
if (b = !k) {
b = n;
for (var o = void 0, c = b.firstChild; c; c = c.nextSibling) var i = c.nodeType,
o = i === 1 ? o ? b : c : i === 3 ? N.test(c.nodeValue) ? b : o : o;
b = (f = o === b ? void 0 : o) && "CODE" === f.tagName
}
b && (k = f.className.match(g));
k && (k = k[1]);
b = !1;
for (o = n.parentNode; o; o = o.parentNode) if ((o.tagName === "pre" || o.tagName === "code" || o.tagName === "xmp") && o.className && o.className.indexOf("prettyprint") >= 0) {
b = !0;
break
}
b || ((b = (b = n.className.match(/\blinenums\b(?::(\d+))?/)) ? b[1] && b[1].length ? +b[1] : !0 : !1) && D(n, b), d = {
g: k,
h: n,
i: b
}, E(d))
}
}
p < h.length ? setTimeout(m, 250) : a && a()
}
for (var e = [document.getElementsByTagName("pre"), document.getElementsByTagName("code"), document.getElementsByTagName("xmp")], h = [], k = 0; k < e.length; ++k) for (var t = 0, s = e[k].length; t < s; ++t) h.push(e[k][t]);
var e = q,
l = Date;
l.now || (l = {
now: function() {
return +new Date
}
});
var p = 0,
d, g = /\blang(?:uage)?-([\w.]+)(?!\S)/;
m()
};
window.PR = {
createSimpleLexer: x,
registerLangHandler: k,
sourceDecorator: u,
PR_ATTRIB_NAME: "atn",
PR_ATTRIB_VALUE: "atv",
PR_COMMENT: "com",
PR_DECLARATION: "dec",
PR_KEYWORD: "kwd",
PR_LITERAL: "lit",
PR_NOCODE: "nocode",
PR_PLAIN: "pln",
PR_PUNCTUATION: "pun",
PR_SOURCE: "src",
PR_STRING: "str",
PR_TAG: "tag",
PR_TYPE: "typ"
}
})();
@@ -0,0 +1,91 @@
/**
* Sunlight documentation link plugin
*
* This plugin generates hyperlinks to language documentation for certain tokens
* (e.g. links to php.net for functions).
*
* Supported languages:
* - PHP (functions and language constructs)
* - Ruby (functions)
* - Python (functions)
* - Perl (functions)
* - Lua (functions)
*
* Options:
* - enableDocLinks: true/false (default is false)
*/
(function(sunlight, document, undefined){
if (sunlight === undefined) {
throw "Include sunlight.js before including plugin files";
}
var supportedLanguages = {
php: {
"function": function(word) { return "http://php.net/" + word; },
languageConstruct: function(word) { return "http://php.net/" + word; }
},
ruby: {
"function": function(word) {
return "http://www.ruby-doc.org/docs/ruby-doc-bundle/Manual/man-1.4/function.html#"
+ word.replace(/!/g, "_bang").replace(/\?/g, "_p");
}
},
python: {
"function": function(word) {
return "http://docs.python.org/py3k/library/functions.html#" + word;
}
},
perl: {
"function": function(word) { return "http://perldoc.perl.org/functions/" + word + ".html"; }
},
lua: {
"function": function(word) { return "http://www.lua.org/manual/5.1/manual.html#pdf-" + word; }
}
};
function createLink(transformUrl) {
return function(context) {
var link = document.createElement("a");
link.className = context.options.classPrefix + context.tokens[context.index].name;
link.setAttribute("href", transformUrl(context.tokens[context.index].value));
link.appendChild(context.createTextNode(context.tokens[context.index]));
context.addNode(link);
};
}
sunlight.bind("beforeAnalyze", function(context) {
if (!this.options.enableDocLinks) {
return;
}
context.analyzerContext.getAnalyzer = function() {
var language = supportedLanguages[this.language.name],
analyzer,
tokenName;
if (!language) {
return;
}
analyzer = sunlight.util.clone(context.analyzerContext.language.analyzer);
for (tokenName in language) {
if (!language.hasOwnProperty(tokenName)) {
continue;
}
analyzer["handle_" + tokenName] = createLink(language[tokenName]);
}
return analyzer;
};
});
sunlight.globalOptions.enableDocLinks = false;
}(this["Sunlight"], document));
@@ -0,0 +1,104 @@
/**
* Sunlight line number/line highlighting plugin
*
* This creates the line number gutter in addition to creating the line highlighting
* overlay (if applicable). It is bundled in sunlight-min.js.
*
* Options:
* - lineNumbers: true/false/"automatic" (default is "automatic")
* - lineNumberStart: <number> (line number to start from, default is 1)
* - lineHighlight: <array> (array of line numbers to highlight)
*/
(function(sunlight, document, undefined){
if (sunlight === undefined) {
throw "Include sunlight.js before including plugin files";
}
function getLineCount(node) {
//browsers don't render the last trailing newline, so we make sure that the line numbers reflect that
//by disregarding the last trailing newline
//get the last text node
var lastTextNode = function getLastNode(node) {
if (!node.lastChild) {
return null;
}
if (node.lastChild.nodeType === 3) {
return node.lastChild;
}
return getLastNode(node.lastChild);
}(node) || { lastChild: "" };
return node.innerHTML.replace(/[^\n]/g, "").length - /\n$/.test(lastTextNode.nodeValue);
}
sunlight.bind("afterHighlightNode", function(context) {
var lineContainer,
lineCount,
lineHighlightOverlay,
currentLineOverlay,
lineHighlightingEnabled,
i,
eol,
link,
name;
if (!this.options.lineNumbers) {
return;
}
if (this.options.lineNumbers === "automatic" && sunlight.util.getComputedStyle(context.node, "display") !== "block") {
//if it's not a block level element or the lineNumbers option is not set to "automatic"
return;
}
lineContainer = document.createElement("pre");
lineCount = getLineCount(context.node);
lineHighlightingEnabled = this.options.lineHighlight.length > 0;
if (lineHighlightingEnabled) {
lineHighlightOverlay = document.createElement("div");
lineHighlightOverlay.className = this.options.classPrefix + "line-highlight-overlay";
}
lineContainer.className = this.options.classPrefix + "line-number-margin";
eol = document.createTextNode(sunlight.util.eol)
for (i = this.options.lineNumberStart; i <= this.options.lineNumberStart + lineCount; i++) {
link = document.createElement("a");
name = (context.node.id ? context.node.id : this.options.classPrefix + context.count) + "-line-" + i;
link.setAttribute("name", name);
link.setAttribute("href", "#" + name);
link.appendChild(document.createTextNode(i));
lineContainer.appendChild(link);
lineContainer.appendChild(eol.cloneNode(false));
if (lineHighlightingEnabled) {
currentLineOverlay = document.createElement("div");
if (sunlight.util.contains(this.options.lineHighlight, i)) {
currentLineOverlay.className = this.options.classPrefix + "line-highlight-active";
}
lineHighlightOverlay.appendChild(currentLineOverlay);
}
}
context.codeContainer.insertBefore(lineContainer, context.codeContainer.firstChild);
if (lineHighlightingEnabled) {
context.codeContainer.appendChild(lineHighlightOverlay);
}
//enable the border on the code container
context.codeContainer.style.borderWidth = "1px";
context.codeContainer.style.borderStyle = "solid";
});
sunlight.globalOptions.lineNumbers = "automatic";
sunlight.globalOptions.lineNumberStart = 1;
sunlight.globalOptions.lineHighlight = [];
}(this["Sunlight"], document));
@@ -0,0 +1,159 @@
/**
* Sunlight menu plugin
*
* This creates the menu in the upper right corner for block-level elements.
* This plugin is not supported for IE6.
*
* Options:
* - showMenu: true/false (default is false)
* - autoCollapse: true/false (default is false)
*/
(function(sunlight, document, undefined){
if (sunlight === undefined) {
throw "Include sunlight.js before including plugin files";
}
//http://dean.edwards.name/weblog/2007/03/sniff/#comment83695
//eval()'d so that it compresses correctly
var ieVersion = eval("0 /*@cc_on+ScriptEngineMajorVersion()@*/");
function createLink(href, title, text) {
var link = document.createElement("a");
link.setAttribute("href", href);
link.setAttribute("title", title);
if (text) {
link.appendChild(document.createTextNode(text));
}
return link;
}
function getTextRecursive(node) {
var text = "",
i = 0;
if (node.nodeType === 3) {
return node.nodeValue;
}
text = "";
for (i = 0; i < node.childNodes.length; i++) {
text += getTextRecursive(node.childNodes[i]);
}
return text;
}
sunlight.bind("afterHighlightNode", function(context) {
var menu,
sunlightIcon,
ul,
collapse,
mDash,
collapseLink,
viewRaw,
viewRawLink,
about,
aboutLink,
icon;
if ((ieVersion && ieVersion < 7) || !this.options.showMenu || sunlight.util.getComputedStyle(context.node, "display") !== "block") {
return;
}
menu = document.createElement("div");
menu.className = this.options.classPrefix + "menu";
sunlightIcon =
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJ" +
"cEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41Ljg3O4BdAAAAl0lEQVQ4jWP4" +
"P9n9PyWYgTYGzAr+///Q9P//Ty/HjhfEETDg1oH/YPDgNKbm4wsIuGBO+H84WJJKhhd2dkA0v3tEZhjcPQox4MVN" +
"7P7fUEHAgM112DX++Qkx+PEFMqPxwSmIAQenkWHAvCicAUucAbCAfX2PQCCCEtDGKkz86RXEgL39BAwAKcAFbh/6" +
"/39GIL3yAj0NAAB+LQeDCZ9tvgAAAABJRU5ErkJggg==";
ul = document.createElement("ul");
collapse = document.createElement("li");
mDash = String.fromCharCode(0x2014);
collapseLink = createLink("#", "collapse code block", mDash);
collapseLink.onclick = function() {
var originalHeight = sunlight.util.getComputedStyle(context.codeContainer, "height"),
originalOverflow = sunlight.util.getComputedStyle(context.codeContainer, "overflowY");
return function() {
var needsToExpand = sunlight.util.getComputedStyle(context.codeContainer, "height") !== originalHeight;
this.replaceChild(document.createTextNode(needsToExpand ? mDash : "+"), this.firstChild);
this.setAttribute("title", (needsToExpand ? "collapse" : "expand") + " clode block");
context.codeContainer.style.height = needsToExpand ? originalHeight : "0px";
context.codeContainer.style.overflowY = needsToExpand ? originalOverflow : "hidden";
return false;
}
}();
collapse.appendChild(collapseLink);
viewRaw = document.createElement("li");
viewRawLink = createLink("#", "view raw code", "raw");
viewRawLink.onclick = function() {
var textarea;
return function() {
var rawCode;
if (textarea) {
textarea.parentNode.removeChild(textarea);
textarea = null;
context.node.style.display = "block";
this.replaceChild(document.createTextNode("raw"), this.firstChild);
this.setAttribute("title", "view raw code");
} else {
//hide the codeContainer, flatten all text nodes, create a <textarea>, append it
rawCode = getTextRecursive(context.node);
textarea = document.createElement("textarea");
textarea.value = rawCode;
textarea.setAttribute("readonly", "readonly");
textarea.style.width = (parseInt(sunlight.util.getComputedStyle(context.node, "width")) - 5) + "px"; //IE, Safari and Chrome can't handle the actual width
textarea.style.height = sunlight.util.getComputedStyle(context.node, "height");
textarea.style.border = "none";
textarea.style.overflowX = "hidden"; //IE requires this
textarea.setAttribute("wrap", "off"); //prevent line wrapping lol
context.codeContainer.insertBefore(textarea, context.node);
context.node.style.display = "none";
this.replaceChild(document.createTextNode("highlighted"), this.firstChild);
this.setAttribute("title", "view highlighted code");
textarea.select(); //highlight everything
}
return false;
}
}();
viewRaw.appendChild(viewRawLink);
about = document.createElement("li");
aboutLink = createLink("http://sunlightjs.com/", "Sunlight: JavaScript syntax highlighter by Tommy Montgomery");
icon = document.createElement("img");
icon.setAttribute("src", "data:image/png;base64," + sunlightIcon);
icon.setAttribute("alt", "about");
aboutLink.appendChild(icon);
about.appendChild(aboutLink);
ul.appendChild(about);
ul.appendChild(viewRaw);
ul.appendChild(collapse);
menu.appendChild(ul);
context.container.insertBefore(menu, context.container.firstChild);
if (this.options.autoCollapse) {
collapseLink.onclick.call(collapseLink);
}
});
sunlight.globalOptions.showMenu = false;
sunlight.globalOptions.autoCollapse = false;
}(this["Sunlight"], document));
@@ -0,0 +1,183 @@
(function(sunlight, undefined){
if (sunlight === undefined || sunlight["registerLanguage"] === undefined) {
throw "Include sunlight.js before including language files";
}
sunlight.registerLanguage("javascript", {
keywords: [
//keywords
"break", "case", "catch", "continue", "default", "delete", "do",
"else", "finally", "for", "function", "if", "in", "instanceof",
"new", "return", "switch", "this", "throw", "try", "typeof",
"var", "void", "while", "with",
//literals
"true", "false", "null"
],
customTokens: {
reservedWord: {
values: [
"abstract", "boolean", "byte", "char", "class", "const", "debugger", "double",
"enum", "export", "extends", "final", "float", "goto", "implements", "import",
"int", "interface", "long", "native", "package", "private", "protected", "public",
"short", "static", "super", "synchronized", "throws", "transient", "volatile"
],
boundary: "\\b"
},
globalVariable: {
values: ["NaN", "Infinity", "undefined"],
boundary: "\\b"
},
globalFunction: {
values: ["encodeURI", "encodeURIComponent", "decodeURI", "decodeURIComponent", "parseInt", "parseFloat", "isNaN", "isFinite", "eval"],
boundary: "\\b"
},
globalObject: {
values: [
"Math", "JSON",
"XMLHttpRequest", "XDomainRequest", "ActiveXObject",
"Boolean", "Date", "Array", "Image", "Function", "Object", "Number", "RegExp", "String"
],
boundary: "\\b"
}
},
scopes: {
string: [ ["\"", "\"", sunlight.util.escapeSequences.concat(["\\\""])], ["'", "'", sunlight.util.escapeSequences.concat(["\\\'", "\\\\"])] ],
comment: [ ["//", "\n", null, true], ["/*", "*/"] ]
},
customParseRules: [
//regex literal
function(context) {
var peek = context.reader.peek(),
isValid,
regexLiteral = "/",
line = context.reader.getLine(),
column = context.reader.getColumn(),
charClass = false,
peek2,
next;
if (context.reader.current() !== "/" || peek === "/" || peek === "*") {
//doesn't start with a / or starts with // (comment) or /* (multi line comment)
return null;
}
isValid = function() {
var previousNonWsToken = context.token(context.count() - 1),
previousToken = null;
if (context.defaultData.text !== "") {
previousToken = context.createToken("default", context.defaultData.text);
}
if (!previousToken) {
previousToken = previousNonWsToken;
}
//first token of the string
if (previousToken === undefined) {
return true;
}
//since JavaScript doesn't require statement terminators, if the previous token was whitespace and contained a newline, then we're good
if (previousToken.name === "default" && previousToken.value.indexOf("\n") > -1) {
return true;
}
if (sunlight.util.contains(["keyword", "ident", "number"], previousNonWsToken.name)) {
return false;
}
if (previousNonWsToken.name === "punctuation" && !sunlight.util.contains(["(", "{", "[", ",", ";"], previousNonWsToken.value)) {
return false;
}
return true;
}();
if (!isValid) {
return null;
}
//read the regex literal
while (context.reader.peek() !== context.reader.EOF) {
peek2 = context.reader.peek(2);
if (peek2 === "\\/" || peek2 === "\\\\") {
//escaped backslash or escaped forward slash
regexLiteral += context.reader.read(2);
continue;
}
if (peek2 === "\\[" || peek2 === "\\]") {
regexLiteral += context.reader.read(2);
continue;
} else if (next === "[") {
charClass = true;
} else if (next === "]") {
charClass = false;
}
regexLiteral += (next = context.reader.read());
if (next === "/" && !charClass) {
break;
}
}
//read the regex modifiers
//only "g", "i" and "m" are allowed, but for the sake of simplicity we'll just say any alphabetical character is valid
while (context.reader.peek() !== context.reader.EOF) {
if (!/[A-Za-z]/.test(context.reader.peek())) {
break;
}
regexLiteral += context.reader.read();
}
return context.createToken("regexLiteral", regexLiteral, line, column);
}
],
identFirstLetter: /[$A-Za-z_]/,
identAfterFirstLetter: /[\w\$]/,
namedIdentRules: {
follows: [
[{ token: "keyword", values: ["function"] }, sunlight.util.whitespace]
]
},
operators: [
//arithmetic
"++", "+=", "+",
"--", "-=", "-",
"*=", "*",
"/=", "/",
"%=", "%",
//boolean
"&&", "||",
//bitwise
"|=", "|",
"&=", "&",
"^=", "^",
">>>=", ">>>", ">>=", ">>",
"<<=", "<<",
//inequality
"<=", "<",
">=", ">",
"===", "==", "!==", "!=",
//unary
"!", "~",
//other
"?", ":", ".", "="
]
});
}(this["Sunlight"]));
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,100 @@
(function($) {
$.fn.toc = function(options) {
var self = this;
var opts = $.extend({}, jQuery.fn.toc.defaults, options);
var container = $(opts.container);
var headings = $(opts.selectors, container);
var headingOffsets = [];
var activeClassName = opts.prefix+'-active';
var scrollTo = function(e) {
if (opts.smoothScrolling) {
e.preventDefault();
var elScrollTo = $(e.target).attr('href');
var $el = $(elScrollTo);
$('body,html').animate({ scrollTop: $el.offset().top }, 400, 'swing', function() {
location.hash = elScrollTo;
});
}
$('li', self).removeClass(activeClassName);
$(e.target).parent().addClass(activeClassName);
};
//highlight on scroll
var timeout;
var highlightOnScroll = function(e) {
if (timeout) {
clearTimeout(timeout);
}
timeout = setTimeout(function() {
var top = $(window).scrollTop(),
highlighted;
for (var i = 0, c = headingOffsets.length; i < c; i++) {
if (headingOffsets[i] >= top) {
$('li', self).removeClass(activeClassName);
highlighted = $('li:eq('+(i-1)+')', self).addClass(activeClassName);
opts.onHighlight(highlighted);
break;
}
}
}, 50);
};
if (opts.highlightOnScroll) {
$(window).bind('scroll', highlightOnScroll);
highlightOnScroll();
}
return this.each(function() {
//build TOC
var el = $(this);
var ul = $('<ul/>');
headings.each(function(i, heading) {
var $h = $(heading);
headingOffsets.push($h.offset().top - opts.highlightOffset);
//add anchor
var anchor = $('<span/>').attr('id', opts.anchorName(i, heading, opts.prefix)).insertBefore($h);
//build TOC item
var a = $('<a/>')
.text(opts.headerText(i, heading, $h))
.attr('href', '#' + opts.anchorName(i, heading, opts.prefix))
.bind('click', function(e) {
scrollTo(e);
el.trigger('selected', $(this).attr('href'));
});
var li = $('<li/>')
.addClass(opts.itemClass(i, heading, $h, opts.prefix))
.append(a);
ul.append(li);
});
el.html(ul);
});
};
jQuery.fn.toc.defaults = {
container: 'body',
selectors: 'h1,h2,h3',
smoothScrolling: true,
prefix: 'toc',
onHighlight: function() {},
highlightOnScroll: true,
highlightOffset: 100,
anchorName: function(i, heading, prefix) {
return prefix+i;
},
headerText: function(i, heading, $heading) {
return $heading.text();
},
itemClass: function(i, heading, $heading, prefix) {
return prefix + '-' + $heading[0].tagName.toLowerCase();
}
};
})(jQuery);
@@ -0,0 +1,960 @@
/*
* Darkstrap v0.9.2
* By danneu (http://github.com/danneu/darkstrap)
* Based off Twitter Bootstrap v2.2.2
*/
tr.warning,
tr.success,
tr.error,
tr.info {
color: #fff;
}
body {
color: #c6c6c6;
background-color: #2f2f2f;
}
a:hover {
color: #1ab2ff;
}
textarea,
input[type="text"],
input[type="password"],
input[type="datetime"],
input[type="datetime-local"],
input[type="date"],
input[type="month"],
input[type="time"],
input[type="week"],
input[type="number"],
input[type="email"],
input[type="url"],
input[type="search"],
input[type="tel"],
input[type="color"],
.uneditable-input {
background-color: #cccccc;
}
select {
background-color: #cccccc;
}
.uneditable-input,
.uneditable-textarea {
background-color: #c9c9c9;
}
input:-moz-placeholder,
textarea:-moz-placeholder {
color: #666666;
}
input:-ms-input-placeholder,
textarea:-ms-input-placeholder {
color: #666666;
}
input::-webkit-input-placeholder,
textarea::-webkit-input-placeholder {
color: #666666;
}
.control-group.warning .input-prepend .add-on,
.control-group.warning .input-append .add-on {
background-color: #faa732;
}
.control-group.error .input-prepend .add-on,
.control-group.error .input-append .add-on {
background-color: #fc5b5e;
}
.control-group.success .input-prepend .add-on,
.control-group.success .input-append .add-on {
background-color: #5bb75b;
}
.control-group.info .input-prepend .add-on,
.control-group.info .input-append .add-on {
background-color: #3a87ad;
}
.form-actions {
background-color: #444444;
}
.help-block,
.help-inline {
color: #ececec;
}
.table th,
.table td {
border-top: 1px solid #666666;
}
.table tbody + tbody {
border-top: 2px solid #666666;
}
.table .table {
background-color: #2f2f2f;
}
.table-bordered {
border: 1px solid #666666;
}
.table-bordered th,
.table-bordered td {
border-left: 1px solid #666666;
}
.table-striped tbody > tr:nth-child(odd) > td,
.table-striped tbody > tr:nth-child(odd) > th {
background-color: #444444;
}
.table-hover tbody tr:hover td,
.table-hover tbody tr:hover th {
background-color: #666666;
}
.table tbody tr.success td {
background-color: #5bb75b;
}
.table tbody tr.error td {
background-color: #fc5b5e;
}
.table tbody tr.warning td {
background-color: #faa732;
}
.table tbody tr.info td {
background-color: #3a87ad;
}
.table-hover tbody tr.success:hover td {
background-color: #4cad4c;
}
.table-hover tbody tr.error:hover td {
background-color: #fc4245;
}
.table-hover tbody tr.warning:hover td {
background-color: #f99c19;
}
.table-hover tbody tr.info:hover td {
background-color: #34789a;
}
[class^="icon-"],
[class*=" icon-"] {
background-image: url("../img/glyphicons-halflings.png");
}
.icon-white,
.nav-pills > .active > a > [class^="icon-"],
.nav-pills > .active > a > [class*=" icon-"],
.nav-list > .active > a > [class^="icon-"],
.nav-list > .active > a > [class*=" icon-"],
.navbar-inverse .nav > .active > a > [class^="icon-"],
.navbar-inverse .nav > .active > a > [class*=" icon-"],
.dropdown-menu > li > a:hover > [class^="icon-"],
.dropdown-menu > li > a:hover > [class*=" icon-"],
.dropdown-menu > .active > a > [class^="icon-"],
.dropdown-menu > .active > a > [class*=" icon-"],
.dropdown-submenu:hover > a > [class^="icon-"],
.dropdown-submenu:hover > a > [class*=" icon-"] {
background-image: url("../img/glyphicons-halflings-white.png");
}
.btn-link:hover {
color: #1ab2ff;
}
.alert {
background-color: #faa732;
border: 1px solid #fa7d23;
}
.alert-success {
background-color: #5bb75b;
border-color: #5cad4c;
}
.alert-danger,
.alert-error {
background-color: #fc5b5e;
border-color: #fc4c6d;
}
.alert-info {
background-color: #3a87ad;
border-color: #318292;
}
.nav-tabs > .active > a,
.nav-tabs > .active > a:hover {
background-color: #2f2f2f;
}
.nav .dropdown-toggle:hover .caret {
border-top-color: #1ab2ff;
border-bottom-color: #1ab2ff;
}
.navbar-inner {
background-color: #363636;
background-image: -moz-linear-gradient(top, #444444, #222222);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));
background-image: -webkit-linear-gradient(top, #444444, #222222);
background-image: -o-linear-gradient(top, #444444, #222222);
background-image: linear-gradient(to bottom, #444444, #222222);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF444444', endColorstr='#FF222222', GradientType=0);
border: 1px solid #030303;
}
.navbar .brand {
color: #c6c6c6;
text-shadow: 0 1px 0 #444444;
}
.navbar-text {
color: #c6c6c6;
}
.navbar-link {
color: #c6c6c6;
}
.navbar-link:hover {
color: white;
}
.navbar .divider-vertical {
border-left: 1px solid #222222;
border-right: 1px solid #444444;
}
.navbar .nav > li > a {
color: #c6c6c6;
text-shadow: 0 1px 0 #444444;
}
.navbar .nav > li > a:focus,
.navbar .nav > li > a:hover {
color: white;
}
.navbar .nav > .active > a,
.navbar .nav > .active > a:hover,
.navbar .nav > .active > a:focus {
color: white;
background-color: #151515;
}
.navbar .btn-navbar {
background-color: #292929;
background-image: -moz-linear-gradient(top, #373737, #151515);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#373737), to(#151515));
background-image: -webkit-linear-gradient(top, #373737, #151515);
background-image: -o-linear-gradient(top, #373737, #151515);
background-image: linear-gradient(to bottom, #373737, #151515);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF373737', endColorstr='#FF151515', GradientType=0);
border-color: #151515 #151515 black;
*background-color: #151515;
}
.navbar .btn-navbar:hover, .navbar .btn-navbar:active, .navbar .btn-navbar.active, .navbar .btn-navbar.disabled, .navbar .btn-navbar[disabled] {
background-color: #151515;
*background-color: #090909;
}
.navbar .btn-navbar:active, .navbar .btn-navbar.active {
background-color: black \9;
}
.navbar .nav li.dropdown > a:hover .caret {
border-top-color: white;
border-bottom-color: white;
}
.navbar .nav li.dropdown.open > .dropdown-toggle,
.navbar .nav li.dropdown.active > .dropdown-toggle,
.navbar .nav li.dropdown.open.active > .dropdown-toggle {
background-color: #151515;
color: white;
}
.navbar .nav li.dropdown > .dropdown-toggle .caret {
border-top-color: #c6c6c6;
border-bottom-color: #c6c6c6;
}
.navbar .nav li.dropdown.open > .dropdown-toggle .caret,
.navbar .nav li.dropdown.active > .dropdown-toggle .caret,
.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret {
border-top-color: white;
border-bottom-color: white;
}
.well {
-webkit-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
-moz-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
background: #202020;
background-color: rgba(0, 0, 0, 0.3);
border: 0;
}
.darkwell, .breadcrumb, code, pre, select,
input[type="text"],
input[type="password"],
input[type="datetime"],
input[type="datetime-local"],
input[type="date"],
input[type="month"],
input[type="time"],
input[type="week"],
input[type="number"],
input[type="email"],
input[type="url"],
input[type="search"],
input[type="tel"],
input[type="color"],
.uneditable-input, textarea, .hero-unit, .progress {
-webkit-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
-moz-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
background: #202020;
background-color: rgba(0, 0, 0, 0.3);
border: 0;
}
.breadcrumb {
border: 0;
}
.breadcrumb li {
text-shadow: 0 1px 0 black;
}
.page-header {
-webkit-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
-moz-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
border-bottom: 1px solid #121212;
}
h1, h2, h3, h4, h5, h6 {
color: white;
}
h6 {
color: #999;
}
blockquote {
border-left-color: #111;
}
blockquote.pull-right {
border-right-color: #111;
}
hr {
-webkit-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
-moz-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
border-bottom: 1px solid #121212;
border-top: none;
}
code {
border: none;
padding: 2px 4px;
}
pre {
border: none;
color: #c6c6c6;
padding: 8px;
}
legend {
-webkit-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
-moz-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
border-bottom: 1px solid #121212;
color: #fff;
}
select,
input[type="text"],
input[type="password"],
input[type="datetime"],
input[type="datetime-local"],
input[type="date"],
input[type="month"],
input[type="time"],
input[type="week"],
input[type="number"],
input[type="email"],
input[type="url"],
input[type="search"],
input[type="tel"],
input[type="color"],
.uneditable-input {
color: white;
height: 21px;
}
select:-moz-placeholder,
input[type="text"]:-moz-placeholder,
input[type="password"]:-moz-placeholder,
input[type="datetime"]:-moz-placeholder,
input[type="datetime-local"]:-moz-placeholder,
input[type="date"]:-moz-placeholder,
input[type="month"]:-moz-placeholder,
input[type="time"]:-moz-placeholder,
input[type="week"]:-moz-placeholder,
input[type="number"]:-moz-placeholder,
input[type="email"]:-moz-placeholder,
input[type="url"]:-moz-placeholder,
input[type="search"]:-moz-placeholder,
input[type="tel"]:-moz-placeholder,
input[type="color"]:-moz-placeholder,
.uneditable-input:-moz-placeholder {
color: #666666;
}
select:-ms-input-placeholder,
input[type="text"]:-ms-input-placeholder,
input[type="password"]:-ms-input-placeholder,
input[type="datetime"]:-ms-input-placeholder,
input[type="datetime-local"]:-ms-input-placeholder,
input[type="date"]:-ms-input-placeholder,
input[type="month"]:-ms-input-placeholder,
input[type="time"]:-ms-input-placeholder,
input[type="week"]:-ms-input-placeholder,
input[type="number"]:-ms-input-placeholder,
input[type="email"]:-ms-input-placeholder,
input[type="url"]:-ms-input-placeholder,
input[type="search"]:-ms-input-placeholder,
input[type="tel"]:-ms-input-placeholder,
input[type="color"]:-ms-input-placeholder,
.uneditable-input:-ms-input-placeholder {
color: #666666;
}
select::-webkit-input-placeholder,
input[type="text"]::-webkit-input-placeholder,
input[type="password"]::-webkit-input-placeholder,
input[type="datetime"]::-webkit-input-placeholder,
input[type="datetime-local"]::-webkit-input-placeholder,
input[type="date"]::-webkit-input-placeholder,
input[type="month"]::-webkit-input-placeholder,
input[type="time"]::-webkit-input-placeholder,
input[type="week"]::-webkit-input-placeholder,
input[type="number"]::-webkit-input-placeholder,
input[type="email"]::-webkit-input-placeholder,
input[type="url"]::-webkit-input-placeholder,
input[type="search"]::-webkit-input-placeholder,
input[type="tel"]::-webkit-input-placeholder,
input[type="color"]::-webkit-input-placeholder,
.uneditable-input::-webkit-input-placeholder {
color: #666666;
}
textarea {
color: white;
}
textarea:-moz-placeholder {
color: #666666;
}
textarea:-ms-input-placeholder {
color: #666666;
}
textarea::-webkit-input-placeholder {
color: #666666;
}
select {
height: 29px;
}
.input-prepend .add-on,
.input-append .add-on {
background: #444;
color: #c6c6c6;
border-color: #111;
text-shadow: 0 1px 0 black;
}
.form-actions {
border-top-color: #222;
}
.well .form-actions {
border-top-color: #000;
background-color: rgba(0, 0, 0, 0.3);
margin-left: -17px;
margin-right: -17px;
margin-bottom: -17px;
}
.help-inline,
.help-block {
color: #999;
}
.control-group.warning input, .control-group.warning select, .control-group.warning textarea {
color: #faa732;
border-color: #faa732;
-webkit-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
-moz-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
background: #202020;
background-color: rgba(0, 0, 0, 0.3);
}
.control-group.warning input:focus,
.control-group.warning select:focus,
.control-group.warning textarea:focus {
border-color: #faa732;
-webkit-box-shadow: 0 0 6px #faa732;
-moz-box-shadow: 0 0 6px #faa732;
box-shadow: 0 0 6px #faa732;
}
.control-group.warning .control-label,
.control-group.warning .help-block,
.control-group.warning .help-inline {
color: #faa732;
}
.control-group.success input, .control-group.success select, .control-group.success textarea {
color: #5bb75b;
border-color: #5bb75b;
-webkit-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
-moz-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
background: #202020;
background-color: rgba(0, 0, 0, 0.3);
}
.control-group.success input:focus,
.control-group.success select:focus,
.control-group.success textarea:focus {
border-color: #5bb75b;
-webkit-box-shadow: 0 0 6px #5bb75b;
-moz-box-shadow: 0 0 6px #5bb75b;
box-shadow: 0 0 6px #5bb75b;
}
.control-group.success .control-label,
.control-group.success .help-block,
.control-group.success .help-inline {
color: #5bb75b;
}
.control-group.error input, .control-group.error select, .control-group.error textarea {
color: #fc5b5e;
border-color: #fc5b5e;
-webkit-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
-moz-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
background: #202020;
background-color: rgba(0, 0, 0, 0.3);
}
.control-group.error input:focus,
.control-group.error select:focus,
.control-group.error textarea:focus {
border-color: #fc5b5e;
-webkit-box-shadow: 0 0 6px #fc5b5e;
-moz-box-shadow: 0 0 6px #fc5b5e;
box-shadow: 0 0 6px #fc5b5e;
}
.control-group.error .control-label,
.control-group.error .help-block,
.control-group.error .help-inline {
color: #fc5b5e;
}
.control-group.info input, .control-group.info select, .control-group.info textarea {
color: #3a87ad;
border-color: #3a87ad;
-webkit-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
-moz-box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0, rgba(0, 0, 0, 0.8) 0 1px 7px 0px inset;
background: #202020;
background-color: rgba(0, 0, 0, 0.3);
}
.control-group.info input:focus,
.control-group.info select:focus,
.control-group.info textarea:focus {
border-color: #3a87ad;
-webkit-box-shadow: 0 0 6px #3a87ad;
-moz-box-shadow: 0 0 6px #3a87ad;
box-shadow: 0 0 6px #3a87ad;
}
.control-group.info .control-label,
.control-group.info .help-block,
.control-group.info .help-inline {
color: #3a87ad;
}
input:focus:invalid,
textarea:focus:invalid,
select:focus:invalid {
border-color: #fc5b5e;
}
input:focus:invalid:focus,
textarea:focus:invalid:focus,
select:focus:invalid:focus {
border-color: #fc5b5e;
box-shadow: 0 0 6px #fc5b5e;
}
.btn-link {
text-shadow: none;
}
.img-polaroid {
background-color: #111;
background-color: rgba(0, 0, 0, 0.3);
}
.nav-tabs .open .dropdown-toggle,
.nav-pills .open .dropdown-toggle,
.nav > .open.active > a:hover {
background-color: rgba(0, 0, 0, 0.25);
border-color: transparent transparent #666666 transparent;
}
.nav > .dropdown.active > a:hover {
color: #fff;
}
.nav-tabs .active .dropdown-toggle .caret,
.nav-pills .active .dropdown-toggle .caret {
border-top-color: #fff;
}
.nav-tabs {
border-bottom: 1px solid #666666;
}
.nav-tabs > .active > a, .nav-tabs > .active > a:hover {
background-color: #2f2f2f;
color: #fff;
border-color: #666666 #666666 transparent #666666;
}
.nav-tabs > li > a:hover {
border-color: #2f2f2f #2f2f2f #666666 #2f2f2f;
background-color: rgba(0, 0, 0, 0.25);
color: #00aaff;
}
.nav-tabs.nav-stacked > li > a, .nav-tabs.nav-stacked > li > a:hover {
border-color: #666;
}
.well > .nav-tabs > .active > a, .well > .nav-tabs > .active > a:hover {
background-color: #202020;
}
.nav-pills > li > a:hover {
background-color: rgba(0, 0, 0, 0.25);
color: #00aaff;
}
.nav-list > li > a,
.nav-list .nav-header {
text-shadow: 0 1px 0 black;
}
.nav-list > li > a:hover {
background-color: rgba(0, 0, 0, 0.25);
color: #00aaff;
}
.nav-list .active > a:hover {
background-color: #0088cc;
color: white;
}
.tabs-below .nav-tabs {
border-top: 1px solid #666666;
}
.tabs-left .nav-tabs {
border-right: 1px solid #666666;
}
.tabs-right .nav-tabs {
border-left: 1px solid #666666;
}
.tabs-below .nav-tabs > li > a:hover {
border-top: 1px solid #666666;
}
.tabs-left .nav-tabs > li > a:hover {
border-color: transparent #666666 transparent transparent;
}
.tabs-right .nav-tabs > li > a:hover {
border-color: transparent transparent transparent #666666;
}
.tabs-below .nav-tabs .active > a,
.tabs-below .nav-tabs .active > a:hover {
border-color: transparent #666666 #666666 #666666;
}
.tabs-left .nav-tabs .active > a,
.tabs-left .nav-tabs .active > a:hover {
border-color: #666666 transparent #666666 #666666;
}
.tabs-right .nav-tabs .active > a,
.tabs-right .nav-tabs .active > a:hover {
border-color: #666666 #666666 #666666 transparent;
}
.nav-list > li > a,
.nav-list .nav-header {
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5);
}
.nav-tabs > li > a:hover {
border-color: transparent transparent #666666 transparent;
}
.nav > .disabled > a:hover {
color: #999;
}
.nav-list .divider {
background-color: transparent;
-webkit-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
-moz-box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
box-shadow: rgba(255, 255, 255, 0.07) 0 1px 0;
border-bottom: 1px solid #121212;
}
.navbar .brand {
text-shadow: 0 1px 0 black;
}
.navbar .divider-vertical {
border: transparent;
-webkit-box-shadow: rgba(255, 255, 255, 0.07) 1px 0 0;
-moz-box-shadow: rgba(255, 255, 255, 0.07) 1px 0 0;
box-shadow: rgba(255, 255, 255, 0.07) 1px 0 0;
border-right: 1px solid #121212;
}
.navbar-inverse .brand {
color: #555;
text-shadow: 0 1px 0 white;
}
.navbar-inverse .brand:hover {
color: #555;
}
.navbar-inverse .navbar-inner {
background: #fafafa;
border: 1px solid #030303;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5);
background: -moz-linear-gradient(top, white 0%, #999999 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #999999));
background: -webkit-linear-gradient(top, white 0%, #999999 100%);
background: -o-linear-gradient(top, white 0%, #999999 100%);
background: -ms-linear-gradient(top, white 0%, #999999 100%);
background: linear-gradient(to bottom, #ffffff 0%, #999999 100%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#999999',GradientType=0 );
}
.navbar-inverse .nav > li > a {
color: #555;
}
.navbar-inverse .nav > li > a:hover {
color: #333;
}
.navbar-inverse .nav > .active > a,
.navbar-inverse .nav > .active > a:hover {
background-color: #e5e5e5;
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.125) inset;
color: #555555;
}
.navbar-inverse .nav li.dropdown.open > .dropdown-toggle,
.navbar-inverse .nav li.dropdown.active > .dropdown-toggle,
.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle {
background-color: #e5e5e5;
color: #555;
}
.navbar-inverse .nav li.dropdown > a:hover .caret {
border-top-color: #555;
color: #555;
}
.navbar-inverse .nav > li > a:focus,
.navbar-inverse .nav > li > a:hover {
background-color: transparent;
color: #333;
}
.navbar-inverse .nav li.dropdown.open > .dropdown-toggle,
.navbar-inverse .nav li.dropdown.active > .dropdown-toggle,
.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle {
background-color: #e5e5e5;
color: #555;
}
.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret,
.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret,
.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret {
border-bottom-color: #555;
border-top-color: #555;
color: #555;
}
.navbar-inverse .navbar-search .search-query {
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.6) inset;
background-color: white;
color: #333;
}
.navbar-inverse .navbar-search input.search-query:focus {
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.6) inset, 0 0 8px rgba(82, 168, 236, 0.6);
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.6) inset, 0 0 8px rgba(82, 168, 236, 0.9);
padding: 4px 14px;
outline: 0 none;
}
.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret {
border-bottom-color: #555;
border-top-color: #555;
}
.navbar-inverse .nav li.dropdown > a:hover .caret {
border-bottom-color: #333;
border-top-color: #333;
}
.navbar-inverse .navbar-search .search-query:-moz-placeholder {
color: #999;
}
.pagination ul > li > a,
.pagination ul > li > span {
background: transparent;
border-color: #666;
}
.pagination ul > li > a:hover,
.pagination ul > .active > a,
.pagination ul > .active > span {
background-color: rgba(0, 0, 0, 0.25);
}
.pager li > a, .pager li > span {
background-color: transparent;
border-color: #666;
}
.pager li > a:hover {
background-color: rgba(0, 0, 0, 0.25);
}
.pager .disabled > a,
.pager .disabled > a:hover,
.pager .disabled > span {
background-color: transparent;
}
.label,
.badge {
text-shadow: 1px 1px 0 black;
box-shadow: 1px 1px 0 black;
}
.label-inverse,
.badge-inverse {
background-color: #111;
}
.hero-unit {
background: #111;
color: #ccc;
}
.thumbnail {
border-color: #666;
box-shadow: 0 1px 3px black;
}
.thumbnail .caption {
color: #999;
}
.alert {
color: white;
border-color: #a86404;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
}
.alert h1, .alert h2, .alert h3, .alert h4, .alert h5, .alert h6 {
color: #c17305;
}
.alert-error {
border-color: #d40408;
}
.alert-error h1, .alert-error h2, .alert-error h3, .alert-error h4, .alert-error h5, .alert-error h6 {
color: #ed0409;
}
.alert-success {
border-color: #2d662d;
}
.alert-success h1, .alert-success h2, .alert-success h3, .alert-success h4, .alert-success h5, .alert-success h6 {
color: #347834;
}
.alert-info {
border-color: #1a3c4e;
}
.alert-info h1, .alert-info h2, .alert-info h3, .alert-info h4, .alert-info h5, .alert-info h6 {
color: #204B61;
}
select::-webkit-scrollbar {
-webkit-appearance: none;
width: 11px;
}
select::-webkit-scrollbar-thumb {
border-radius: 8px;
border: 2px solid #202020;
background-color: rgba(0, 0, 0, 0.5);
}
.modal {
background-color: #444;
}
.modal-header {
border-bottom: 1px solid #222222;
}
.modal-body p {
color: #c6c6c6;
}
.modal-footer {
background-color: #373737;
border-top: 1px solid #222222;
-moz-box-shadow: 0 1px 0 #333333 inset;
-webkit-box-shadow: 0 1px 0 #333333 inset;
-o-box-shadow: 0 1px 0 #333333 inset;
box-shadow: 0 1px 0 #333333 inset;
}
.popover {
background: #444;
border: 1px solid rgba(0, 0, 0, 0.5);
border: 1px solid black;
}
.popover-title {
background: #373737;
border-bottom-color: #222;
}
.popover.top .arrow:after {
border-top-color: #444;
}
.popover.right .arrow:after {
border-right-color: #444;
}
.popover.bottom .arrow:after {
border-bottom-color: #444;
}
.popover.left .arrow:after {
border-left-color: #444;
}
@@ -0,0 +1,132 @@
/* Tomorrow Theme */
/* Original theme - https://github.com/chriskempson/tomorrow-theme */
/* Pretty printing styles. Used with prettify.js. */
/* SPAN elements with the classes below are added by prettyprint. */
/* plain text */
.pln {
color: #4d4d4c; }
@media screen {
/* string content */
.str {
color: #718c00; }
/* a keyword */
.kwd {
color: #8959a8; }
/* a comment */
.com {
color: #8e908c; }
/* a type name */
.typ {
color: #4271ae; }
/* a literal value */
.lit {
color: #f5871f; }
/* punctuation */
.pun {
color: #4d4d4c; }
/* lisp open bracket */
.opn {
color: #4d4d4c; }
/* lisp close bracket */
.clo {
color: #4d4d4c; }
/* a markup tag name */
.tag {
color: #c82829; }
/* a markup attribute name */
.atn {
color: #f5871f; }
/* a markup attribute value */
.atv {
color: #3e999f; }
/* a declaration */
.dec {
color: #f5871f; }
/* a variable name */
.var {
color: #c82829; }
/* a function name */
.fun {
color: #4271ae; } }
/* Use higher contrast and text-weight for printable form. */
@media print, projection {
.str {
color: #060; }
.kwd {
color: #006;
font-weight: bold; }
.com {
color: #600;
font-style: italic; }
.typ {
color: #404;
font-weight: bold; }
.lit {
color: #044; }
.pun, .opn, .clo {
color: #440; }
.tag {
color: #006;
font-weight: bold; }
.atn {
color: #404; }
.atv {
color: #060; } }
/* Style */
/*
pre.prettyprint {
background: white;
font-family: Menlo, Monaco, Consolas, monospace;
font-size: 12px;
line-height: 1.5;
border: 1px solid #ccc;
padding: 10px; }
*/
/* Specify class=linenums on a pre to get line numbering */
ol.linenums {
margin-top: 0;
margin-bottom: 0; }
/* IE indents via margin-left */
li.L0,
li.L1,
li.L2,
li.L3,
li.L4,
li.L5,
li.L6,
li.L7,
li.L8,
li.L9 {
/* */ }
/* Alternate shading for lines */
li.L1,
li.L3,
li.L5,
li.L7,
li.L9 {
/* */ }
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More