Browse files

Bootstrapize

  • Loading branch information...
1 parent 7de2a67 commit f41a55f858416daf0bff46d11e793d1786d25b16 @1602 1602 committed Sep 25, 2011
View
1,513 public/index.html
@@ -0,0 +1,1513 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>RailwayJS</title>
+
+ <link rel="stylesheet" href="http://twitter.github.com/bootstrap/1.3.0/bootstrap.min.css">
+ <link href="/javascripts/prettyprint/prettify.css" rel="stylesheet">
+
+ <script type="text/javascript" src="/javascripts/prettyprint/prettify.js"></script>
+ <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
+ <script type="text/javascript" src="http://twitter.github.com/bootstrap/1.3.0/bootstrap-scrollspy.js"></script>
+ <script>$(function () { prettyPrint() })</script>
+
+ <style>
+ section {
+ padding-top: 60px;
+ }
+ </style>
+
+ </head>
+ <body style="padding-top: 60px">
+ <a href="http://github.com/1602/express-on-railway"><img style="position: fixed; top: 0; right: 0; border: 0;z-index: 10001;" src="https://d3nwyuy0nl342s.cloudfront.net/img/e6bef7a091f5f3138b8cd40bc3e114258dd68ddf/687474703a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub"></a>
+ <div class="topbar-wrapper" style="z-index: 5;">
+ <div class="topbar" data-scrollspy="scrollspy">
+ <div class="topbar-inner">
+ <div class="container">
+ <h3><a href="#">RailwayJS</a></h3>
+ <ul class="nav">
+ <li><a href="#about">About</a></li><li><a href="#routing">Routing</a></li><li><a href="#controller">Controller</a></li><li><a href="#views">Views</a></li><li><a href="#generators">Generators</a></li><li><a href="#console">Console</a></li><li><a href="#coffee">Coffee</a></li><li><a href="#localization">Localization</a></li><li><a href="#extensions">Extensions</a></li><li><a href="#heroku">Heroku</a></li>
+ <!--li class="dropdown">
+ <a href="#" class="dropdown-toggle">Features</a>
+ <ul class="dropdown-menu">
+ <li><a href="#">Extensions</a></li>
+ <li><a href="#">Coffee</a></li>
+ <li class="divider"></li>
+ <li><a href="#">Contributing</a></li>
+ </ul>
+ </li-->
+ </ul>
+ </div>
+ </div><!-- /topbar-inner -->
+ </div><!-- /topbar -->
+ </div><!-- /topbar-wrapper -->
+
+<div class="container">
+ <h1 style="text-align: center; font-size: 250%; position: relative; top: 30px;"><span style="color: #a24;">RightwayJS - MVC framework</span><br/><small>Create NodeJS web apps faster with more energy, using RailwayJS</small></h1>
+ <section id="about"><div class="page-header">
+
+<h1>About Railway <small>Objective, getting started, technical details</small></h1>
+
+</div>
+
+<div class="row">
+
+<div class="span-one-third">
+
+<h3>What is railway?</h3>
+
+<p>Railway is the Node.JS MVC framework based on <a href="http://expressjs.com/guide">ExpressJS</a>, fully <strong>ExpressJS-compatible</strong>. It allows you to build web applications in a similar manner as in Ruby On Rails.</p>
+
+<p>The main objective of the framework - web development without pain.</p>
+
+<h3>Check this out</h3>
+
+<ul>
+<li><a href="http://groups.google.com/group/railwayjs">Google Groups</a></li>
+<li><a href="http://node-js.ru/">RailwayJS author's blog</a></li>
+</ul>
+
+</div>
+
+<div class="span-one-third">
+
+<h3>1. Install</h3>
+
+<pre class="prettyprint">sudo npm install railway -g
+</pre>
+
+<h3>2. Use</h3>
+
+<p>You can use app generator and the scaffold generator to build your first railway app in seconds</p>
+
+<pre class="prettyprint">rw i blog &amp;amp;&amp;amp; cd blog
+npm install -l
+rw g crud post title content
+rw s 8888
+open http://127.0.0.1/posts
+</pre>
+
+</div>
+
+<div class="span-one-third">
+
+<h3>What is under the hood</h3>
+
+<ul>
+<li>Full MVC+H stack</li>
+<li>Resource-based <a href="http://railwayjs.com/#routing">routing</a></li>
+<li><a href="http://mongoosejs.com/">Mongoose.js</a> ORM</li>
+<li>Multi-locale support</li>
+<li><a href="http://jashkenas.github.com/coffee-script/">Coffee-script</a> support (<a href="http://railwayjs.com/#coffee">howto</a>)</li>
+<li>Generators for model, controller, scaffold</li>
+<li>Testing: nodeunit, cucumis, code coverage reporting</li>
+<li>Debugging: <a href="http://railwayjs.com/#console">railway console</a></li>
+<li><a href="http://railwayjs.com/#extensions">Extensions</a></li>
+</ul>
+
+</div>
+
+</div></section><section id="routing"><div class="page-header">
+
+<h1>Routing</h1>
+
+</div>
+
+<div class="row">
+
+<div class="span4">
+
+<p>The purpose of routes is to connect URL with controller action. For example you can define the following route in <code>config/routes.js</code> file:</p>
+
+<pre class="prettyprint">map.get('signup', 'users#new');
+</pre>
+
+<p>to link <code>GET /signup</code> with <code>new</code> action of <code>users</code> controller.</p></p>
+
+<pre class="prettyprint">map.root('home#index');
+</pre>
+
+<p>Will link GET / to <code>index</code> action of <code>home</code> controller</p>
+
+</div>
+
+<div class="span12">
+
+<h3>Resource-based routing</h3>
+
+<p>Resource-based routing provides standart mapping between HTTP verbs and controller actions:</p>
+
+<pre class="prettyprint">map.resources('posts');
+</pre>
+
+<p>will provide following routes:</p>
+
+<pre class="prettyprint"> helper | method | path | controller#action
+---------------------------------------------------------------
+ posts GET /posts posts#index
+ posts POST /posts posts#create
+ new_post GET /posts/new posts#new
+ edit_post GET /posts/:id/edit posts#edit
+ post DELETE /posts/:id posts#destroy
+ post PUT /posts/:id posts#update
+ post GET /posts/:id posts#show
+</pre>
+
+<p>to list available routes you can run command <code>railway routes</code>.</p>
+
+<p>First column in table is <code>helper</code> - you can use this identifier in views and controllers to get route. Some examples:</p>
+
+<pre class="prettyprint">path_to.new_post # /posts/new
+path_to.edit_post(1) # /posts/1/edit
+path_to.edit_post(post) # /posts/1/edit (in this example post = {id: 1})
+path_to.posts # /posts
+path_to.post(post) # /posts/1
+</pre>
+
+</div>
+
+</div>
+
+<h2>Aliases for resourceful routes</h2>
+
+<div class="row">
+
+<div class="span4">
+
+<p>If you want to override default routes behaviour, you can use two options:
+<code>as</code> and <code>path</code> to specify helper name and path you want to have in the result.</p>
+
+</div>
+
+<div class="span12">
+
+<h3>{ as: 'helperName' }</h3>
+
+<p>Path helper aliasing:</p>
+
+<pre class="prettyprint">map.resources('posts', {as: 'articles'});
+</pre>
+
+<p>will produce</p>
+
+<pre class="prettyprint"> articles GET /posts.:format? posts#index
+ articles POST /posts.:format? posts#create
+ new_article GET /posts/new.:format? posts#new
+ edit_article GET /posts/:id/edit.:format? posts#edit
+ article DELETE /posts/:id.:format? posts#destroy
+ article PUT /posts/:id.:format? posts#update
+ article GET /posts/:id.:format? posts#show
+</pre>
+
+<h3>{ path: 'alternatePath' }</h3>
+
+<p>If you want to change base path:</p>
+
+<pre class="prettyprint">map.resources('posts', {path: 'articles'});
+</pre>
+
+<p>this will create following routes:</p>
+
+<pre class="prettyprint"> posts GET /articles.:format? posts#index
+ posts POST /articles.:format? posts#create
+ new_post GET /articles/new.:format? posts#new
+ edit_post GET /articles/:id/edit.:format? posts#edit
+ post DELETE /articles/:id.:format? posts#destroy
+ post PUT /articles/:id.:format? posts#update
+ post GET /articles/:id.:format? posts#show
+</pre>
+
+<h3>all together</h3>
+
+<p>And if you want alias both helper and path, use both:</p>
+
+<pre class="prettyprint">map.resources('posts', {path: 'articles', as: 'stories'});
+</pre>
+
+<p>and you will get:</p>
+
+<pre class="prettyprint"> stories GET /articles.:format? posts#index
+ stories POST /articles.:format? posts#create
+ new_story GET /articles/new.:format? posts#new
+ edit_story GET /articles/:id/edit.:format? posts#edit
+ story DELETE /articles/:id.:format? posts#destroy
+ story PUT /articles/:id.:format? posts#update
+ story GET /articles/:id.:format? posts#show
+</pre>
+
+</div>
+
+</div>
+
+<h2>Nested resources</h2>
+
+<div class="row">
+
+<div class="span4">
+
+<p>Some resources may have nested sub-resources, for example <code>Post</code> has many <code>Comments</code>, and of course we want to get comments of the post using <code>GET /post/1/comments</code></p>
+
+</div>
+
+<div class="span12">
+
+<p>Let's describe route for nested resource</p>
+
+<pre class="prettyprint">map.resources('post', function (post) {
+ post.resources('comments');
+});
+</pre>
+
+<p>This routing map will provide the following routes:</p>
+
+<pre class="prettyprint">$ rw r
+ post_comments GET /posts/:post_id/comments comments#index
+ post_comments POST /posts/:post_id/comments comments#create
+ new_post_comment GET /posts/:post_id/comments/new comments#new
+ edit_post_comment GET /posts/:post_id/comments/:id/edit comments#edit
+ post_comment DELETE /posts/:post_id/comments/:id comments#destroy
+ post_comment PUT /posts/:post_id/comments/:id comments#update
+ post_comment GET /posts/:post_id/comments/:id comments#show
+ posts GET /posts posts#index
+ posts POST /posts posts#create
+ new_post GET /posts/new posts#new
+ edit_post GET /posts/:id/edit posts#edit
+ post DELETE /posts/:id posts#destroy
+ post PUT /posts/:id posts#update
+ post GET /posts/:id posts#show
+</pre>
+
+<h3>Using url helpers for nested routes</h3>
+
+<p>To use routes like <code>post_comments</code> you should call helper with param: parent resource or identifier before nested resource:</p>
+
+<pre class="prettyprint">path_to.post_comments(post) # /posts/1/comments
+path_to.edit_post_comment(post, comment) # /posts/1/comments/10/edit
+path_to.edit_post_comment(2, 300) # /posts/2/comments/300/edit
+</pre>
+
+</div>
+
+</div>
+
+<h2>Namespaces</h2>
+
+<div class="row">
+
+<div class="span4">
+
+<p>You may wish to organize groups of controllers under a namespace. The most common use-case is Admin area. All controllers within <code>admin</code> namespace should be located inside <code>app/controllers/</code> dir.</p>
+
+</div>
+
+<div class="span12">
+
+<p>For example, let's create admin namespace:</p>
+
+<pre class="prettyprint">namespace('admin', function (admin) {
+ admin.resources('users');
+});
+</pre>
+
+<p>This routing rule will match with urls <code>/admin/users</code>, <code>admin/users/new</code>, and create appropriated url helpers</p>
+
+<pre class="prettyprint"> admin_users GET /admin/users.:format? admin/users#index
+ admin_users POST /admin/users.:format? admin/users#create
+ new_admin_user GET /admin/users/new.:format? admin/users#new
+ edit_admin_user GET /admin/users/:id/edit.:format? admin/users#edit
+ admin_user DELETE /admin/users/:id.:format? admin/users#destroy
+ admin_user PUT /admin/users/:id.:format? admin/users#update
+ admin_user GET /admin/users/:id.:format? admin/users#show
+</pre>
+
+</div>
+
+</div>
+
+<div class="row">
+
+<div class="span8">
+
+<h2>Restricting routes</h2>
+
+<p>If you need routes only for several actions (e.g. <code>index</code>, <code>show</code>) you can specify <code>only</code> option:</p>
+
+<pre class="prettyprint">map.resources('users', {only: ['index', 'show']});
+</pre>
+
+<p>If you want to have all routes except some route, you can specify <code>except</code> option:</p>
+
+<pre class="prettyprint">map.resources('users', {except: ['create', 'destroy']});
+</pre>
+
+</div>
+
+<div class="span8">
+
+<h2>Custom actions in resourceful routes</h2>
+
+<p>If you need some specific action to be added to you resource-based route, use this example:</p>
+
+<pre class="prettyprint">map.resources('users', function (user) {
+ user.get('avatar', 'users#avatar');
+});
+</pre>
+
+</div>
+
+</div></section><section id="controller"><div class="page-header">
+
+<h1>Controller <small>middle-layer between models and views</small></h1>
+
+</div>
+
+<div class="row">
+
+<div class="span4">
+
+<h2>Synopsis</h2>
+
+<p>Controllers in railway - is a module, that receives user input and initiates response. Controller consists of a set of actions. Each action is called by the request of particular route. To define action you should use reserved global function <code>action</code>:</p>
+
+<pre class="prettyprint">action('index', function () {
+ render();
+});
+</pre>
+
+</div>
+
+<div class="span12">
+
+<h2>Features overview</h2>
+
+<p>Inside controller you can use following reserved global functions to control response:</p>
+
+<ul>
+<li><strong>render</strong> - render view template related to this action</li>
+<li><strong>send</strong> - send to client text, status code or json object</li>
+<li><strong>redirect</strong> - redirect client to specific location</li>
+<li><strong>header</strong> - send header to client</li>
+<li><strong>flash</strong> - display flash message</li>
+</ul>
+
+<p>And here is a bunch of functions to control execution flow:</p>
+
+<ul>
+<li><strong>before</strong> - invoke this method before any action</li>
+<li><strong>after</strong> - invoke this method after any action</li>
+<li><strong>load</strong> - load another controller to use it methods</li>
+<li><strong>use</strong> or <strong>export</strong> - get method defined in another controller, loaded with <code>load</code> function</li>
+<li><strong>publish</strong> or <strong>import</strong> - allow method to be used in other controller</li>
+</ul>
+
+<p>Let's learn more about each of this functions.</p>
+
+</div>
+
+</div>
+
+<div class="row">
+
+<h2>Response control</h2>
+
+<div class="span4">
+
+<p><strong>NOTE: each action should invoke one output method. This is the only requirement imposed by the asynchronous nature Node.JS. If output method wouldn't called, client will wait for server responce indefinitely.</strong></p>
+
+</div>
+
+<div class="span12">
+
+<h3>render</h3>
+
+<p><code>render</code> method accepts 0, 1, or 2 arguments. Called without agruments it just render view associated with this action. For example:</p>
+
+<p><code>posts_controller.js</code></p>
+
+<pre class="prettyprint">action('index', function () {
+ render();
+});
+</pre>
+
+<p>will render view app/views/posts/index.ejs.</p>
+
+<p>If you want to pass some data to the view, there are two ways to do it. First:</p>
+
+<pre class="prettyprint">action('index', function () {
+ render({title: "Posts index"});
+});
+</pre>
+
+<p>and second:</p>
+
+<pre class="prettyprint">action('index', function () {
+ this.title = "Posts index";
+ render();
+});
+</pre>
+
+<p>And if you want to render another view, just put it's name as first argument:</p>
+
+<pre class="prettyprint">action('update', function () {
+ this.title = "Update post";
+ render('edit');
+});
+</pre>
+
+<p>or</p>
+
+<pre class="prettyprint">action('update', function () {
+ render('edit', {title: "Update post"});
+});
+</pre>
+
+<h3>send</h3>
+
+<p>Send function useful for debugging and one-page apps, where you don't want to render heavy template and just want to send text or JSON data.</p>
+
+<p>This function can be called with number (status code):</p>
+
+<pre class="prettyprint">action('destroy', function () {
+ send(403); // client will receive statusCode = 403 Forbidden
+});
+</pre>
+
+<p>or with string:</p>
+
+<pre class="prettyprint">action('sayHello', function () {
+ send('Hello!'); // client will receive 'Hello!'
+});
+</pre>
+
+<p>or with object:</p>
+
+<pre class="prettyprint">action('apiCall', function () {
+ send({hello: 'world'}); // client will receive '{"hello":"world"}'
+});
+</pre>
+
+<h3>redirect</h3>
+
+<p>This function just set status code and location header, so client will be redirected to another location.</p>
+
+<pre class="prettyprint">redirect('/'); // root redirection
+redirect('http://example.com'); // redirect to another host
+</pre>
+
+<h3>flash</h3>
+
+<p>Flash function stores message in session for future displaying, this is regular expressjs function, refer to <a href="http://expressjs.com/guide.html#req.flash()">expressjs guide</a> to learn how it works. Few examples:</p>
+
+<p><code>posts_controller.js</code></p>
+
+<pre class="prettyprint">action('create', function () {
+ Post.create(req.body, function (err) {
+ if (err) {
+ flash('error', 'Error while post creation');
+ render('new', {post: req.body});
+ } else {
+ flash('info', 'Post has been successfully created');
+ redirect(path_to.posts);
+ }
+ });
+});
+</pre>
+
+<p>This <code>create</code> action sends flash info on success and flash error on fail.</p>
+
+</div>
+
+</div>
+
+<h2>Execution flow control</h2>
+
+<div class="row">
+
+<div class="span4">
+
+<p>To provide ability of DRY-ing controller code, and reusing common code parts Railway provides few additional tools: method chaining and external controllers loading.</p>
+
+</div>
+
+<div class="span12">
+
+<p>To chain methods you can use <code>before</code> and <code>after</code> methods:</p>
+
+<p><code>checkout_controller.js</code></p>
+
+<pre class="prettyprint">before(userRequired, {only: 'order'});
+before(prepareBasket, {except: 'order'});
+before(loadProducts, {only: ['products', 'featuredProducts']});
+
+action('products', function () {...});
+action('featuredProducts', function () {...});
+action('order', function () {...});
+action('basket', function () {...});
+
+function userRequired () {next()}
+function prepareBasket () {next()}
+function loadProducts () {next()}
+</pre>
+
+<p>In this example function <code>userRequired</code> will called only for <code>order</code> action, <code>prepareBasket</code> function will called for all actions except <code>order</code>, and <code>loadProducts</code> function will called only for actions <code>products</code> and <code>featuredProducts</code>.</p>
+
+<p>Note, that the before-functions should call global method <code>next</code> that will pass controll to the next function in chain.</p>
+
+</div>
+
+</div>
+
+<h2>Common execution context</h2>
+
+<div class="row">
+
+<div class="span4">
+
+<p>There is one implicit feature in chaining: all functions in chain invoked in one context, so you can pass data between chain using <code>this</code> object:</p>
+
+</div>
+
+<div class="span12">
+
+<pre class="prettyprint">function loadProducts () {
+ Product.find(function (err, prds) {
+ this.products = prds;
+ next();
+ }.bind(this));
+}
+
+action('products', function () {
+ assert.ok(this.products, 'Products available here');
+ render(); // also products will available in view
+});
+</pre>
+
+</div>
+
+</div>
+
+<h2>Sharing code between controllers</h2>
+
+<div class="row">
+
+<div class="span4">
+
+<p>Some methods, like <code>userRequired</code> for example, can be used in different controllers, to allow cross-controller code sharing railway provides few methods: <code>load</code>, <code>use</code> and <code>publish</code>.</p>
+
+</div>
+
+<div class="span12">
+
+<p>You can define <code>requireUser</code> in <code>application_controller.js</code> and call <code>publish</code>, and then you will be able to <code>use</code> it in your controller:</p>
+
+<p><code>application_controller.js</code></p>
+
+<pre class="prettyprint">publish('requireUser', requireUser);
+function requireUser () {
+}
+</pre>
+
+<p>then load application controller and use requireUser function here:</p>
+
+<p><code>products_controller.js</code></p>
+
+<pre class="prettyprint">load('application'); // note that _controller siffix omitted
+before(use('userRequired'), {only: 'products'});
+</pre>
+
+</div>
+
+</div>
+
+<h2>Other express.js features</h2>
+
+<div class="row">
+
+<div class="span4">
+
+<p>To get familiar with railway controllers look to few examples available at github: <a href="https://github.com/anatoliychakkaev/railwayjs.com/blob/master/app/controllers/pages_controller.coffee">coffee controller</a>, <a href="https://github.com/1602/router/blob/master/app/controllers/users_controller.js">javascript controller</a></p>
+
+</div>
+
+<div class="span12">
+
+<p>All other expressjs features have no global shortcuts yet, but they still can be used, because object <code>request</code> (or, shorter <code>req</code>) and <code>response</code> (alias <code>res</code>), are available as global variables in controller context. In view context only available long aliases: <code>response</code> and <code>request</code> to provide better coding style (it is bad to use this variables in views, but it's possible).</p>
+
+</div>
+
+</div></section><section id="views"><div class="page-header">
+
+<h1>Views <small>layouts, partials, views, helpers, forms, csrf-stuff, etc..</small></h1>
+
+</div>
+
+<div class="row">
+
+<div class="span-one-third">
+
+<h3>Templating engines</h3>
+
+<p>By default railway use <code>ejs</code> templating engine, but you can switch to jade, using settings</p>
+
+<pre class="prettyprint">app.set('view engine', 'jade');
+</pre>
+
+<p>and add line</p>
+
+<pre class="prettyprint">require('jade-ext');
+</pre>
+
+<p>to <code>./npmfile.js</code></p>
+
+</div>
+
+<div class="span-two-thirds">
+
+<h3>View rendering flow</h3>
+
+<p>Every controller action may call <code>render</code> method to display associated view. For example, action <code>index</code> in controller <code>users</code> will render view in file <code>app/views/users/index.ejs</code>.</p>
+
+<p>This view will be rendered within the layout specified by <code>layout</code> call in the controller. By default layout name is the same as controller name, <code>app/views/layouts/users_layout.ejs</code> in this case. If this layout file is not exists, <code>application</code> layout used.</p>
+
+<p>If you need render view without layout you can call <code>layout(false)</code> inside controller, this will skip layout rendering.</p>
+
+</div>
+
+</div>
+
+<h3>Built-in Helpers</h3>
+
+<div class="row">
+
+<div class="span4">
+
+<ul>
+<li><code>link_to</code></li>
+</ul>
+
+</div>
+
+<div class="span12">
+
+<pre class="prettyprint">link_to('Users index', '/users');
+// &lt;a href="/users"&gt;Users index&lt;/a&gt;
+link_to('Users index', '/users', {class: 'menu-item'});
+// &lt;a href="/users" class="menu-item"&gt;Users index&lt;/a&gt;
+link_to('Users index', '/users', {remote: true});
+// &lt;a href="/users" data-remote="true"&gt;Users index&lt;/a&gt;
+</pre>
+
+<ul>
+<li>First argument is link text.</li>
+<li>Second argument is link path.</li>
+<li>Third argument is object with link properties.</li>
+</ul>
+
+<p>In the last example third argument is <code>{remote: true}</code>, and as you can see it will add <code>data-remote="true"</code> attribute to <code>a</code> tag. Clicking on this link will send async GET request to <code>/users</code>. Result will be executed as javascript.</p>
+
+<p>Here you can also specify <code>jsonp</code> param to handle response:</p>
+
+<pre class="prettyprint">link_to('Users index', '/users', {remote: true, jsonp: 'renderUsers'});
+// &lt;a href="/users" data-remote="true" data-jsonp="renderUsers"&gt;Users index&lt;/a&gt;
+</pre>
+
+<p>Server will send you json <code>{users: [{},{},{}]}</code>, and this object will be passed as an argument to the <code>renderUsers</code> function:</p>
+
+<pre class="prettyprint">renderUsers({users: [{},{},{}]});
+</pre>
+
+<p>You can also specify anonimous function in jsonp param:</p>
+
+<pre class="prettyprint">{jsonp: '(function (url) {location.href = url;})'}
+</pre>
+
+<p>When server will send you <code>"http://google.com/"</code> following javascript will be evaluated:</p>
+
+<pre class="prettyprint">(function (url) {location.href = url;})("http://google.com");
+</pre>
+
+<p>This is why you should wrap anonimous function with parentheses.</p>
+
+</div>
+
+</div>
+
+<div class="row">
+
+<div class="span4">
+
+<ul>
+<li><code>form_for</code></li>
+</ul>
+
+</div>
+
+<div class="span12">
+
+<p>Accepts three params: resource, params and block. Block is function that receives as single param special object, which provide helpers with pre-filled values. Available helpers:</p>
+
+<ul>
+<li>input</li>
+<li>label</li>
+<li>textarea</li>
+<li>submit</li>
+<li><p>checkbox</p>
+
+<% form_for(user, {action: path_to.users}, function (form) { %>
+
+ <p>
+ <%- form.label('name', 'Username') %>
+ <%- form.input('name') %>
+ </p>
+ <p>
+ <%- form.submit('Save') %>
+ </p>
+<% }); %></li>
+</ul>
+
+<p>will generate</p>
+
+<pre class="prettyprint">&lt;form action="/users/1" method="POST"&gt;
+ &lt;input type="hidden" name="_method" value="PUT" /&gt;
+ &lt;input type="hidden" name="authencity_token" value="qwertyuiop1234567890!@#$%^&amp;*()" /&gt;
+ &lt;p&gt;
+ &lt;label for="name"&gt;Username&lt;/label&gt;
+ &lt;input id="name" name="name" value="Anatoliy" /&gt;
+ &lt;/p&gt;
+ &lt;p&gt;
+ &lt;input type="submit" value="Save" /&gt;
+ &lt;/p&gt;
+&lt;/form&gt;
+</pre>
+
+</div>
+
+</div>
+
+<div class="row">
+
+<div class="span4">
+
+<ul>
+<li><code>form_tag</code></li>
+</ul>
+
+</div>
+
+<div class="span12">
+
+<p>This is "light" version of <code>form_for</code> helper. It accepts just two arguments: params and block. Block didn't receives any params.
+Use this helper when you have no any resource, but still want to be able to use simple method overriding and csrf protection tokens.
+<em>TODO: add code sample</em></p>
+
+</div>
+
+</div>
+
+<div class="row">
+
+<div class="span4">
+
+<ul>
+<li><code>input_tag</code> and <code>form.input</code></li>
+</ul>
+
+</div>
+
+<div class="span12">
+
+<p>TODO: describe <code>input_tag</code></p>
+
+</div>
+
+</div>
+
+<div class="row">
+
+<div class="span4">
+
+<ul>
+<li><code>label_tag</code> and <code>form.label</code></li>
+</ul>
+
+</div>
+
+<div class="span12">
+
+<p>TODO: describe <code>label_tag</code></p>
+
+</div>
+
+</div>
+
+<div class="row">
+
+<div class="span4">
+
+<ul>
+<li><code>stylesheet_link_tag</code></li>
+</ul>
+
+</div>
+
+<div class="span12">
+
+<pre class="prettyprint">&lt;%- stylesheet_link_tag('reset', 'style', 'mobile') %&gt;
+</pre>
+
+<p>will generate</p>
+
+<pre class="prettyprint">&lt;link media="screen" rel="stylesheet" type="text/css" href="/stylesheets/reset.css?1306993455523" /&gt;
+&lt;link media="screen" rel="stylesheet" type="text/css" href="/stylesheets/style.css?1306993455523" /&gt;
+</pre>
+
+<p>Timestamps <code>?1306993455523</code> added to assets only in development mode in order to prevent browser from caching scripts and style in client-side</p>
+
+</div>
+
+</div>
+
+<div class="row">
+
+<div class="span4">
+
+<ul>
+<li><code>javascript_include_tag</code></li>
+</ul>
+
+</div>
+
+<div class="span12">
+
+<pre class="prettyprint">&lt;%- javascript_include_tag(
+ 'https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js',
+ 'rails', 'application') %&gt;
+</pre>
+
+<p>will generate</p>
+
+<pre class="prettyprint">&lt;script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"&gt;&lt;/script&gt;
+&lt;script type="text/javascript" src="/javascripts/rails.js?1306993455524"&gt;&lt;/script&gt;
+&lt;script type="text/javascript" src="/javascripts/application.js?1306993455524"&gt;&lt;/script&gt;
+</pre>
+
+<p>Timestamps <code>?1306993455524</code> added to assets only in development mode in order to prevent browser from caching scripts and style in client-side</p>
+
+<p>By default railway expect assets to be located in <code>public/javascripts</code> and <code>public/stylesheets</code> directories, but this settings can be overwritten in <code>config/environment.js</code> file:</p>
+
+<pre class="prettyprint">app.set('jsDirectory', '/js/');
+app.set('cssDirectory', '/css/');
+</pre>
+
+<!-- endcol -->
+
+<!-- endrow --></section><section id="generators"><div class="page-header">
+
+<h1>Generators <small>Create app from scratch using generators</small></h1>
+
+</div>
+
+<div class="row">
+
+<div class="span4">
+
+Railway generators - are automated tools allows you to create bunch of files automatically.
+</div>
+
+<div class="span8">
+
+<p>Each generator can be invoked by command</p>
+
+<pre class="prettyprint">rw generate GENERATOR_NAME
+</pre>
+
+<p>or, using shortcut</p>
+
+<pre class="prettyprint">rw g GENERATOR_NAME
+</pre>
+
+Built-in generators: model, controller, scaffold (crud)
+</div>
+
+</div>
+
+<h2>Generate controller</h2>
+
+<div class="row">
+
+<div class="span4">
+
+<p>Usecase: you do not need standart RESTful controller, just few non-standart actions</p>
+
+</div>
+
+<div class="span8">
+
+<p>Example call:</p>
+
+<pre class="prettyprint">rw g controller controllername actionName anotherActionName
+</pre>
+
+<p>Generate files:</p>
+
+<pre class="prettyprint">exists app/
+exists app/controllers/
+create app/controllers/controllername_controller.js
+exists app/helpers/
+create app/helpers/controllername_helper.js
+exists app/views/
+create app/views/controllername/
+create app/views/controllername/actionName.ejs
+create app/views/controllername/anotherActionName.ejs
+</pre>
+
+<p>Generated contents of controller file:</p>
+
+<pre class="prettyprint">load('application');
+
+action("actionName", function () {
+ render();
+});
+
+action("anotherActionName", function () {
+ render();
+});
+</pre>
+
+</div>
+
+</div>
+
+<h2>Generate model</h2>
+
+<div class="row">
+
+<div class="span4">
+
+<p>Usecase: you want to access some database entity using ORM interface (mongoose by default)</p>
+
+</div>
+
+<div class="span8">
+
+<p>Example call:</p>
+
+<pre class="prettyprint">railway g model user name password
+</pre>
+
+<p>Will generate</p>
+
+<pre class="prettyprint">exists app/
+exists app/models/
+create app/models/user.js
+</pre>
+
+<p>Following mongoose schema will be created:</p>
+
+<pre class="prettyprint">/**
+ * User
+ */
+var UserSchema = new Schema;
+UserSchema.add({
+ name: { type: String },
+ password: { type: String }
+});
+mongoose.model("User", UserSchema);
+module.exports["User"] = mongoose.model("User");
+</pre>
+
+<p>If you need to specify field types (<code>String</code> by default):</p>
+
+<pre class="prettyprint">railway g model user name password createdAt:date activated:boolean
+</pre>
+
+</div>
+
+</div>
+
+<h2>Generate scaffold (crud)</h2>
+
+<div class="row">
+
+<div class="span4">
+
+<p>The most commonly used generator. It creates ready-to-use resource controller with all actions, views, schema definitions, routes, and <strong>tests</strong>. RW also can generated scaffold in <strong>CoffeeScript</strong>.</p>
+
+</div>
+
+<div class="span8">
+
+<p>Example call:</p>
+
+<pre class="prettyprint">rw g scaffold post title content createdAt:date
+exists app/
+exists app/models/
+create app/models/post.js
+exists app/
+exists app/controllers/
+create app/controllers/posts_controller.js
+exists app/helpers/
+create app/helpers/posts_helper.js
+create app/views/layouts/posts_layout.ejs
+create public/stylesheets/scaffold.css
+exists app/views/
+create app/views/posts/
+create app/views/posts/_form.ejs
+create app/views/posts/new.ejs
+create app/views/posts/edit.ejs
+create app/views/posts/index.ejs
+create app/views/posts/show.ejs
+patch config/routes.js
+</pre>
+
+<p>Using scaffold generator - fastest way to create prototype of application.</p>
+
+</div>
+
+</div></section><section id="console"><div class="page-heading">
+
+<h1>REPL console <small>Learn, debug, investigate</small></h1>
+
+</div>
+
+<div class="row">
+
+<div class="span4">
+
+<p>To run REPL console use command</p>
+
+<pre class="prettyprint">rw console
+</pre>
+
+<p>or it's shortcut</p>
+
+<pre class="prettyprint">rw c
+</pre>
+
+</div>
+
+<div class="span8">
+
+<p>It just simple node-js console with some Railway bindings, e.g. models. Just one note
+about working with console. Node.js is asynchronous by its nature, and it's great
+but it made console debugging much more complicated, because you should use callback
+to fetch result from database, for example. I have added one useful method to
+simplify async debugging using railway console. It's name <code>c</code>, you can pass it
+as parameter to any function requires callback, and it will store parameters passed
+to callback to variables <code>_0, _1, ..., _N</code> where N is index in <code>arguments</code>.</p>
+
+<p>Example:</p>
+
+<pre class="prettyprint">railway c
+railway&gt; User.find(53, c)
+Callback called with 2 arguments:
+_0 = null
+_1 = [object Object]
+railway&gt; _1
+{ email: [Getter/Setter],
+ password: [Getter/Setter],
+ activationCode: [Getter/Setter],
+ activated: [Getter/Setter],
+ forcePassChange: [Getter/Setter],
+ isAdmin: [Getter/Setter],
+ id: [Getter/Setter] }
+</pre>
+
+</div>
+
+</div></section><section id="coffee"><div class="page-heading">
+
+<h1>Write your app in CoffeeScript <small>Drink coffee &mdash; do stupid things faster with more energy</small></h1>
+
+</div>
+
+<div class="row">
+
+<div class="span4">
+
+<p>Almost all parts of app can be written in CoffeeScript. If you like coding in Coffee, please do. Just put <code>--coffee</code> option to <code>rw</code> commands.</p>
+
+</div>
+
+<div class="span8">
+
+<pre class="prettyprint">rw init blog --coffee
+cd blog
+rw g scaffold post title content --coffee
+</pre>
+
+<p>And then you can run <code>railway server</code> or <code>coffee server.coffee</code> to have server running on 3000 port</p>
+
+<p>For example, here is generated coffee-controller:</p>
+
+<pre class="prettyprint">before -&gt;
+ Post.findById req.params.id, (err, post) =&gt;
+ if err or not post
+ redirect path_to.posts
+ else
+ @post = post
+ next()
+, only: ['show', 'edit', 'update', 'destroy']
+
+# GET /posts/new
+action 'new', -&gt;
+ @post = new Post
+ render
+ title: 'New post'
+
+# POST /posts
+action 'create', -&gt;
+ @post = new Post
+ ['title', 'content'].forEach (field) =&gt;
+ @post[field] = req.body[field] if req.body[field]?
+
+ @post.save (errors) -&gt;
+ if errors
+ flash 'error', 'Post can not be created'
+ render 'new',
+ title: 'New post'
+ else
+ flash 'info', 'Post created'
+ redirect path_to.posts
+
+# GET /posts
+action 'index', -&gt;
+ Post.find (err, posts) -&gt;
+ render
+ posts: posts
+ title: 'Posts index'
+
+# GET /posts/:id
+action 'show', -&gt;
+ render
+ title: 'Post show'
+
+# GET /posts/:id/edit
+action 'edit', -&gt;
+ render
+ title: 'Post edit'
+
+# PUT /posts/:id
+action 'update', -&gt;
+ ['title', 'content'].forEach (field) =&gt;
+ @post[field] = req.body[field] if req.body[field]?
+
+ @post.save (err) =&gt;
+ if not err
+ flash 'info', 'Post updated'
+ redirect path_to.post(@post)
+ else
+ flash 'error', 'Post can not be updated'
+ render 'edit',
+ title: 'Edit post details'
+
+# DELETE /posts/:id
+action 'destroy', -&gt;
+ @post.remove (error) -&gt;
+ if error
+ flash 'error', 'Can not destroy post'
+ else
+ flash 'info', 'Post successfully removed'
+ send "'" + path_to.posts + "'"
+</pre>
+
+</div>
+
+</div></section><section id="localization"><div class="page-header">
+
+<h1>Localization <small>How to build multi-language apps</small></h1>
+
+</div>
+
+<div class="row">
+
+<div class="span4">
+
+<p>Basic steps:</p>
+
+<ol>
+<li>create dictionary to translate tokens to natural language (<code>config/locales/*.yml</code>)</li>
+<li>Use tokens instead of natural language everywhere in app (<code>t</code> helper)</li>
+<li>Manually detect language of each user request (<code>setLocale</code> method)</li>
+</ol>
+
+</div>
+
+<div class="span8">
+
+<p>Railway allows you to create application translated to different languages: just place localization file in <code>yaml</code> format to <code>config/locales</code> dir:</p>
+
+<p><code>config/locales/en.yml</code></p>
+
+<pre class="prettyprint">en:
+ session:
+ new: "Sign in"
+ destroy: "Sign out"
+ user:
+ new: "Sign up"
+ destroy: "Cancel my account"
+ welcome: "Hello %, howdy?
+ validation:
+ name: "Username required"
+</pre>
+
+<p>NOTE: translations can contain <code>%</code> symbol(s), that means variable substitution</p>
+
+<p>Define user locale in application controller:</p>
+
+<p><code>app/controllers/application_controller.js</code></p>
+
+<pre class="prettyprint">before(setUserLocale);
+function setUserLocale () {
+ // define locale from user settings, or from headers or use default
+ var locale = req.user ? req.user.locale : 'en';
+ // call global function setLocale
+ setLocale(locale);
+}
+</pre>
+
+<p>and use localized tokens inside app views with <code>t</code> helper:</p>
+
+<pre class="prettyprint">&lt;%= t('session.new') %&gt;
+&lt;%= t('user.new') %&gt;
+&lt;%= t(['user.welcome', user.name]) %&gt;
+</pre>
+
+<p>or inside controllers:</p>
+
+<pre class="prettyprint">flash('error', t('user.validation.name'));
+</pre>
+
+<p>or inside models:</p>
+
+<pre class="prettyprint">return t('email.activate', 'en');
+</pre>
+
+<p>NOTE: when use t helpers inside models you must pass <code>locale</code> as second param to <code>t</code> helper.</p>
+
+<h2>Configuration</h2>
+
+<p>Localization behavior can be configured using following settings:</p>
+
+<ul>
+<li>defaultLocale: name of default locale</li>
+<li>translationMissing: what action perfor when translation is missing, possible values: <code>default</code> - display translation for default locale, <code>display</code> - show error like "Translation missing for email.activate"</li>
+</ul>
+
+<p>Example:</p>
+
+<pre class="prettyprint">app.configure(function () {
+ app.set('defaultLocale', 'en');
+});
+
+app.configure('development', function(){
+ app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
+ app.set('translationMissing', 'display');
+});
+
+app.configure('production', function () {
+ app.use(express.errorHandler());
+ app.set('translationMissing', 'default');
+});
+</pre>
+
+<!-- endcol -->
+
+<!-- endrow --></section><section id="extensions"><div class="page-header">
+
+<h1>Extensions API <small>Simple way to add missing functionality to the framework</small></h1>
+
+</div>
+
+<div class="row">
+
+<div class="span4">
+
+<p>Any npm package is already extension for railway. Just put line to <code>npmfile.js</code>, for example:</p>
+
+<pre class="prettyprint">require('railway-twitter');
+</pre>
+
+<p>Just one note: if package have <code>init</code> method, it will be invoked after application initialization.</p>
+
+<p>For example you can check out <a href="https://github.com/1602/railway-twitter">twitter-auth extension</a> for railway.</p>
+
+</div>
+
+<div class="span8">
+
+<h2>Installation script</h2>
+
+<p>If your extension have <code>install.js</code> script in the root, it will be invoked after installation with <code>railway install</code> command.</p>
+
+<p>This script will be executed in application context, i.e. you can access global variables <code>app</code> and <code>railway</code>. You <strong>must</strong> call <code>process.exit()</code> when installation process has been completed.</p>
+
+<h2>Railway extension API</h2>
+
+<p>All railway modules published as global singleton <code>railway</code>. Any module can be extended or monkey-patched. Let's take a look to most common use-cases.</p>
+
+<h2>Tools</h2>
+
+<p>Hash <code>railway.tools</code> contains commands that can be invoked using command line, for example <code>railway routes</code> command will call <code>railway.tools.routes()</code> method.</p>
+
+<p>To write tool, just add method to <code>railway.tools</code> object, name of this method will become the command:</p>
+
+<pre class="prettyprint">railway.tools.database = function () {
+ switch (railway.args.shift()) {
+ case 'clean':
+ // clean db
+ break;
+ case 'backup':
+ // backup db
+ break;
+ case 'restore':
+ // restore db
+ break;
+ default:
+ console.log('Usage: railway database [clean|backup|restore]');
+ }
+};
+</pre>
+
+<p>then the following commands will be available for call:</p>
+
+<pre class="prettyprint">railway database
+railway database backup
+railway database clean
+railway database restore
+</pre>
+
+<p>If you want to see this command in help message <code>railway help</code> you can provide some information about tool using <code>help</code> hash:</p>
+
+<pre class="prettyprint">railway.tools.db.help = {
+ shortcut: 'db',
+ usage: 'database [backup|restore|clean]',
+ description: 'Some database features'
+};
+</pre>
+
+<p>Next time you will call railway help you'll see:</p>
+
+<pre class="prettyprint">Commands:
+ ...
+ db, database [backup|restore|clean] Some database features
+</pre>
+
+<p>If you have defined shortcut, it can be used instead of full command name:</p>
+
+<pre class="prettyprint"> railway db clean
+</pre>
+
+<p>To learn more, please check out <a href="https://github.com/1602/express-on-railway/blob/master/lib/tools.js">the sources: <code>lib/tools.js</code></a></p>
+
+<h2>Generators</h2>
+
+<p>Coming soon. It's about <code>railway.generators</code> module and <code>railway generate smth</code> family of commands.</p>
+
+<h2>Discussion in google groups</h2>
+
+<p>API is still in develop now, feel free to leave comments about it in the related google groups <a href="http://groups.google.com/group/railwayjs/browse_thread/thread/1cfa3e1e348fc62c">thread</a>.</p></section><section id="heroku"><div class="page-header">
+
+<h1>Heroku <small>Guide for deploying RailwayJS app on <a href="http://heroku.com/">Heroku.com</a> cloud hosting</small></h1>
+
+</div>
+
+<div class="row">
+
+<div class="span4">
+
+<p>Heroku nodejs hosting is available for public using now. You can deploy your RailwayJS application as simple as <code>git push</code>.</p>
+
+<p>To work with heroku you also need: ruby, <code>heroku</code> gem</p>
+
+</div>
+
+<div class="span8">
+
+<p>First of all, create app</p>
+
+<pre class="prettyprint">railway init heroku-app
+cd heroku-app
+sudo npm link
+railway g crud post title content
+</pre>
+
+<p>Then init git repo</p>
+
+<pre class="prettyprint">git init
+git add .
+git commit -m 'Init'
+</pre>
+
+<p>Create heroku app</p>
+
+<pre class="prettyprint">heroku create --stack cedar
+</pre>
+
+<p>We need mongodb</p>
+
+<pre class="prettyprint">heroku addons:add mongohq:free
+</pre>
+
+<p>And deploy</p>
+
+<pre class="prettyprint">git push heroku master
+</pre>
+
+<p>Hook up Procfile (only once)</p>
+
+<pre class="prettyprint">heroku ps:scale web=1
+</pre>
+
+<p>Check application state</p>
+
+<pre class="prettyprint">heroku ps
+</pre>
+
+<p>Visit app</p>
+
+<pre class="prettyprint">heroku open
+</pre>
+
+<p>If something went wrong, you can check out logs</p>
+
+<pre class="prettyprint">heroku logs
+</pre>
+
+<p>But for me it useless. Better to run commands in node console:</p>
+
+<pre class="prettyprint">heroku run node
+&gt; var app = require('railway').createServer();
+</pre>
+
+<p>It helps to identify exact problems with app installation.
+Also you can access railway console using command</p>
+
+<pre class="prettyprint">heroku run railway console
+</pre>
+
+<p>BTW, mongohq provides web interface for browsing your mongo database, to use it go to http://mongohq.com/ and create account,
+then click "Add remote connection" and configure link to database. You can retrieve details required for connection using command</p>
+
+<pre class="prettyprint">heroku config --long
+</pre>
+
+</div>
+
+</div>
+
+</section>
+ <div class="discussion">
+ <div id="disqus_thread"></div>
+ <script>
+ var disqus_shortname = 'railwayjs', disqus_identifier = "/";
+ (function() {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ })();
+ </script>
+ </div>
+</div>
+
+</html>
View
2 public/javascripts/prettyprint/lang-apollo.js
@@ -0,0 +1,2 @@
+PR.registerLangHandler(PR.createSimpleLexer([["com",/^#[^\n\r]*/,null,"#"],["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r Â\xa0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,null,'"']],[["kwd",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/,
+null],["typ",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[ES]?BANK=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],["lit",/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[!-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["apollo","agc","aea"]);
View
18 public/javascripts/prettyprint/lang-clj.js
@@ -0,0 +1,18 @@
+/*
+ Copyright (C) 2011 Google 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.
+*/
+var a=null;
+PR.registerLangHandler(PR.createSimpleLexer([["opn",/^[([{]+/,a,"([{"],["clo",/^[)\]}]+/,a,")]}"],["com",/^;[^\n\r]*/,a,";"],["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \xa0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"']],[["kwd",/^(?:def|if|do|let|quote|var|fn|loop|recur|throw|try|monitor-enter|monitor-exit|defmacro|defn|defn-|macroexpand|macroexpand-1|for|doseq|dosync|dotimes|and|or|when|not|assert|doto|proxy|defstruct|first|rest|cons|defprotocol|deftype|defrecord|reify|defmulti|defmethod|meta|with-meta|ns|in-ns|create-ns|import|intern|refer|alias|namespace|resolve|ref|deref|refset|new|set!|memfn|to-array|into-array|aset|gen-class|reduce|map|filter|find|nil?|empty?|hash-map|hash-set|vec|vector|seq|flatten|reverse|assoc|dissoc|list|list?|disj|get|union|difference|intersection|extend|extend-type|extend-protocol|prn)\b/,a],
+["typ",/^:[\dA-Za-z-]+/]]),["clj"]);
View
2 public/javascripts/prettyprint/lang-css.js
@@ -0,0 +1,2 @@
+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"]);
View
1 public/javascripts/prettyprint/lang-go.js
@@ -0,0 +1 @@
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r Â\xa0"],["pln",/^(?:"(?:[^"\\]|\\[\S\s])*(?:"|$)|'(?:[^'\\]|\\[\S\s])+(?:'|$)|`[^`]*(?:`|$))/,null,"\"'"]],[["com",/^(?:\/\/[^\n\r]*|\/\*[\S\s]*?\*\/)/],["pln",/^(?:[^"'/`]|\/(?![*/]))+/]]),["go"]);
View
2 public/javascripts/prettyprint/lang-hs.js
@@ -0,0 +1,2 @@
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t-\r ]+/,null,"\t\n \r "],["str",/^"(?:[^\n\f\r"\\]|\\[\S\s])*(?:"|$)/,null,'"'],["str",/^'(?:[^\n\f\r'\\]|\\[^&])'?/,null,"'"],["lit",/^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)/i,null,"0123456789"]],[["com",/^(?:--+[^\n\f\r]*|{-(?:[^-]|-+[^}-])*-})/],["kwd",/^(?:case|class|data|default|deriving|do|else|if|import|in|infix|infixl|infixr|instance|let|module|newtype|of|then|type|where|_)(?=[^\d'A-Za-z]|$)/,
+null],["pln",/^(?:[A-Z][\w']*\.)*[A-Za-z][\w']*/],["pun",/^[^\d\t-\r "'A-Za-z]+/]]),["hs"]);
View
3 public/javascripts/prettyprint/lang-lisp.js
@@ -0,0 +1,3 @@
+var a=null;
+PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,a,"("],["clo",/^\)+/,a,")"],["com",/^;[^\n\r]*/,a,";"],["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \xa0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,a],
+["lit",/^[+-]?(?:[#0]x[\da-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[de][+-]?\d+)?)/i],["lit",/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[_a-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/i],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["cl","el","lisp","scm"]);
View
2 public/javascripts/prettyprint/lang-lua.js
@@ -0,0 +1,2 @@
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r Â\xa0"],["str",/^(?:"(?:[^"\\]|\\[\S\s])*(?:"|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$))/,null,"\"'"]],[["com",/^--(?:\[(=*)\[[\S\s]*?(?:]\1]|$)|[^\n\r]*)/],["str",/^\[(=*)\[[\S\s]*?(?:]\1]|$)/],["kwd",/^(?:and|break|do|else|elseif|end|false|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,null],["lit",/^[+-]?(?:0x[\da-f]+|(?:\.\d+|\d+(?:\.\d*)?)(?:e[+-]?\d+)?)/i],
+["pln",/^[_a-z]\w*/i],["pun",/^[^\w\t\n\r \xa0][^\w\t\n\r "'+=\xa0-]*/]]),["lua"]);
View
2 public/javascripts/prettyprint/lang-ml.js
@@ -0,0 +1,2 @@
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r Â\xa0"],["com",/^#(?:if[\t\n\r \xa0]+(?:[$_a-z][\w']*|``[^\t\n\r`]*(?:``|$))|else|endif|light)/i,null,"#"],["str",/^(?:"(?:[^"\\]|\\[\S\s])*(?:"|$)|'(?:[^'\\]|\\[\S\s])(?:'|$))/,null,"\"'"]],[["com",/^(?:\/\/[^\n\r]*|\(\*[\S\s]*?\*\))/],["kwd",/^(?:abstract|and|as|assert|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|if|in|inherit|inline|interface|internal|lazy|let|match|member|module|mutable|namespace|new|null|of|open|or|override|private|public|rec|return|static|struct|then|to|true|try|type|upcast|use|val|void|when|while|with|yield|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|global|include|method|mixin|object|parallel|process|protected|pure|sealed|trait|virtual|volatile)\b/],
+["lit",/^[+-]?(?:0x[\da-f]+|(?:\.\d+|\d+(?:\.\d*)?)(?:e[+-]?\d+)?)/i],["pln",/^(?:[_a-z][\w']*[!#?]?|``[^\t\n\r`]*(?:``|$))/i],["pun",/^[^\w\t\n\r "'\xa0]+/]]),["fs","ml"]);
View
4 public/javascripts/prettyprint/lang-n.js
@@ -0,0 +1,4 @@
+var a=null;
+PR.registerLangHandler(PR.createSimpleLexer([["str",/^(?:'(?:[^\n\r'\\]|\\.)*'|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,a,'"'],["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,a,"#"],["pln",/^\s+/,a," \r\n\t\xa0"]],[["str",/^@"(?:[^"]|"")*(?:"|$)/,a],["str",/^<#[^#>]*(?:#>|$)/,a],["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,a],["com",/^\/\/[^\n\r]*/,a],["com",/^\/\*[\S\s]*?(?:\*\/|$)/,
+a],["kwd",/^(?:abstract|and|as|base|catch|class|def|delegate|enum|event|extern|false|finally|fun|implements|interface|internal|is|macro|match|matches|module|mutable|namespace|new|null|out|override|params|partial|private|protected|public|ref|sealed|static|struct|syntax|this|throw|true|try|type|typeof|using|variant|virtual|volatile|when|where|with|assert|assert2|async|break|checked|continue|do|else|ensures|for|foreach|if|late|lock|new|nolate|otherwise|regexp|repeat|requires|return|surroundwith|unchecked|unless|using|while|yield)\b/,
+a],["typ",/^(?:array|bool|byte|char|decimal|double|float|int|list|long|object|sbyte|short|string|ulong|uint|ufloat|ulong|ushort|void)\b/,a],["lit",/^@[$_a-z][\w$@]*/i,a],["typ",/^@[A-Z]+[a-z][\w$@]*/,a],["pln",/^'?[$_a-z][\w$@]*/i,a],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,a,"0123456789"],["pun",/^.[^\s\w"-$'./@`]*/,a]]),["n","nemerle"]);
View
1 public/javascripts/prettyprint/lang-proto.js
@@ -0,0 +1 @@
+PR.registerLangHandler(PR.sourceDecorator({keywords:"bytes,default,double,enum,extend,extensions,false,group,import,max,message,option,optional,package,repeated,required,returns,rpc,service,syntax,to,true",types:/^(bool|(double|s?fixed|[su]?int)(32|64)|float|string)\b/,cStyleComments:!0}),["proto"]);
View
2 public/javascripts/prettyprint/lang-scala.js
@@ -0,0 +1,2 @@
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r Â\xa0"],["str",/^"(?:""(?:""?(?!")|[^"\\]|\\.)*"{0,3}|(?:[^\n\r"\\]|\\.)*"?)/,null,'"'],["lit",/^`(?:[^\n\r\\`]|\\.)*`?/,null,"`"],["pun",/^[!#%&(--:-@[-^{-~]+/,null,"!#%&()*+,-:;<=>?@[\\]^{|}~"]],[["str",/^'(?:[^\n\r'\\]|\\(?:'|[^\n\r']+))'/],["lit",/^'[$A-Z_a-z][\w$]*(?![\w$'])/],["kwd",/^(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|object|override|package|private|protected|requires|return|sealed|super|throw|trait|try|type|val|var|while|with|yield)\b/],
+["lit",/^(?:true|false|null|this)\b/],["lit",/^(?:0(?:[0-7]+|x[\da-f]+)l?|(?:0|[1-9]\d*)(?:(?:\.\d+)?(?:e[+-]?\d+)?f?|l?)|\\.\d+(?:e[+-]?\d+)?f?)/i],["typ",/^[$_]*[A-Z][\d$A-Z_]*[a-z][\w$]*/],["pln",/^[$A-Z_a-z][\w$]*/],["com",/^\/(?:\/.*|\*(?:\/|\**[^*/])*(?:\*+\/?)?)/],["pun",/^(?:\.+|\/)/]]),["scala"]);
View
2 public/javascripts/prettyprint/lang-sql.js
@@ -0,0 +1,2 @@
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r Â\xa0"],["str",/^(?:"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/,null,"\"'"]],[["com",/^(?:--[^\n\r]*|\/\*[\S\s]*?(?:\*\/|$))/],["kwd",/^(?:add|all|alter|and|any|as|asc|authorization|backup|begin|between|break|browse|bulk|by|cascade|case|check|checkpoint|close|clustered|coalesce|collate|column|commit|compute|constraint|contains|containstable|continue|convert|create|cross|current|current_date|current_time|current_timestamp|current_user|cursor|database|dbcc|deallocate|declare|default|delete|deny|desc|disk|distinct|distributed|double|drop|dummy|dump|else|end|errlvl|escape|except|exec|execute|exists|exit|fetch|file|fillfactor|for|foreign|freetext|freetexttable|from|full|function|goto|grant|group|having|holdlock|identity|identitycol|identity_insert|if|in|index|inner|insert|intersect|into|is|join|key|kill|left|like|lineno|load|match|merge|national|nocheck|nonclustered|not|null|nullif|of|off|offsets|on|open|opendatasource|openquery|openrowset|openxml|option|or|order|outer|over|percent|plan|precision|primary|print|proc|procedure|public|raiserror|read|readtext|reconfigure|references|replication|restore|restrict|return|revoke|right|rollback|rowcount|rowguidcol|rule|save|schema|select|session_user|set|setuser|shutdown|some|statistics|system_user|table|textsize|then|to|top|tran|transaction|trigger|truncate|tsequal|union|unique|update|updatetext|use|user|using|values|varying|view|waitfor|when|where|while|with|writetext)(?=[^\w-]|$)/i,
+null],["lit",/^[+-]?(?:0x[\da-f]+|(?:\.\d+|\d+(?:\.\d*)?)(?:e[+-]?\d+)?)/i],["pln",/^[_a-z][\w-]*/i],["pun",/^[^\w\t\n\r "'\xa0][^\w\t\n\r "'+\xa0-]*/]]),["sql"]);
View
1 public/javascripts/prettyprint/lang-tex.js
@@ -0,0 +1 @@
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r Â\xa0"],["com",/^%[^\n\r]*/,null,"%"]],[["kwd",/^\\[@-Za-z]+/],["kwd",/^\\./],["typ",/^[$&]/],["lit",/[+-]?(?:\.\d+|\d+(?:\.\d*)?)(cm|em|ex|in|pc|pt|bp|mm)/i],["pun",/^[()=[\]{}]+/]]),["latex","tex"]);
View
2 public/javascripts/prettyprint/lang-vb.js
@@ -0,0 +1,2 @@
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0\u2028\u2029]+/,null,"\t\n\r Â\xa0

"],["str",/^(?:["\u201c\u201d](?:[^"\u201c\u201d]|["\u201c\u201d]{2})(?:["\u201c\u201d]c|$)|["\u201c\u201d](?:[^"\u201c\u201d]|["\u201c\u201d]{2})*(?:["\u201c\u201d]|$))/i,null,'"“”'],["com",/^['\u2018\u2019].*/,null,"'‘’"]],[["kwd",/^(?:addhandler|addressof|alias|and|andalso|ansi|as|assembly|auto|boolean|byref|byte|byval|call|case|catch|cbool|cbyte|cchar|cdate|cdbl|cdec|char|cint|class|clng|cobj|const|cshort|csng|cstr|ctype|date|decimal|declare|default|delegate|dim|directcast|do|double|each|else|elseif|end|endif|enum|erase|error|event|exit|finally|for|friend|function|get|gettype|gosub|goto|handles|if|implements|imports|in|inherits|integer|interface|is|let|lib|like|long|loop|me|mod|module|mustinherit|mustoverride|mybase|myclass|namespace|new|next|not|notinheritable|notoverridable|object|on|option|optional|or|orelse|overloads|overridable|overrides|paramarray|preserve|private|property|protected|public|raiseevent|readonly|redim|removehandler|resume|return|select|set|shadows|shared|short|single|static|step|stop|string|structure|sub|synclock|then|throw|to|try|typeof|unicode|until|variant|wend|when|while|with|withevents|writeonly|xor|endif|gosub|let|variant|wend)\b/i,
+null],["com",/^rem.*/i],["lit",/^(?:true\b|false\b|nothing\b|\d+(?:e[+-]?\d+[dfr]?|[dfilrs])?|(?:&h[\da-f]+|&o[0-7]+)[ils]?|\d*\.\d+(?:e[+-]?\d+)?[dfr]?|#\s+(?:\d+[/-]\d+[/-]\d+(?:\s+\d+:\d+(?::\d+)?(\s*(?:am|pm))?)?|\d+:\d+(?::\d+)?(\s*(?:am|pm))?)\s+#)/i],["pln",/^(?:(?:[a-z]|_\w)\w*|\[(?:[a-z]|_\w)\w*])/i],["pun",/^[^\w\t\n\r "'[\]\xa0\u2018\u2019\u201c\u201d\u2028\u2029]+/],["pun",/^(?:\[|])/]]),["vb","vbs"]);
View
3 public/javascripts/prettyprint/lang-vhdl.js
@@ -0,0 +1,3 @@
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r Â\xa0"]],[["str",/^(?:[box]?"(?:[^"]|"")*"|'.')/i],["com",/^--[^\n\r]*/],["kwd",/^(?:abs|access|after|alias|all|and|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|mod|nand|new|next|nor|not|null|of|on|open|or|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|rem|report|return|rol|ror|select|severity|shared|signal|sla|sll|sra|srl|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with|xnor|xor)(?=[^\w-]|$)/i,
+null],["typ",/^(?:bit|bit_vector|character|boolean|integer|real|time|string|severity_level|positive|natural|signed|unsigned|line|text|std_u?logic(?:_vector)?)(?=[^\w-]|$)/i,null],["typ",/^'(?:active|ascending|base|delayed|driving|driving_value|event|high|image|instance_name|last_active|last_event|last_value|left|leftof|length|low|path_name|pos|pred|quiet|range|reverse_range|right|rightof|simple_name|stable|succ|transaction|val|value)(?=[^\w-]|$)/i,null],["lit",/^\d+(?:_\d+)*(?:#[\w.\\]+#(?:[+-]?\d+(?:_\d+)*)?|(?:\.\d+(?:_\d+)*)?(?:e[+-]?\d+(?:_\d+)*)?)/i],
+["pln",/^(?:[a-z]\w*|\\[^\\]*\\)/i],["pun",/^[^\w\t\n\r "'\xa0][^\w\t\n\r "'\xa0-]*/]]),["vhdl","vhd"]);
View
2 public/javascripts/prettyprint/lang-wiki.js
@@ -0,0 +1,2 @@
+PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\d\t a-gi-z\xa0]+/,null,"\t Â\xa0abcdefgijklmnopqrstuvwxyz0123456789"],["pun",/^[*=[\]^~]+/,null,"=*~^[]"]],[["lang-wiki.meta",/(?:^^|\r\n?|\n)(#[a-z]+)\b/],["lit",/^[A-Z][a-z][\da-z]+[A-Z][a-z][^\W_]+\b/],["lang-",/^{{{([\S\s]+?)}}}/],["lang-",/^`([^\n\r`]+)`/],["str",/^https?:\/\/[^\s#/?]*(?:\/[^\s#?]*)?(?:\?[^\s#]*)?(?:#\S*)?/i],["pln",/^(?:\r\n|[\S\s])[^\n\r#*=A-[^`h{~]*/]]),["wiki"]);
+PR.registerLangHandler(PR.createSimpleLexer([["kwd",/^#[a-z]+/i,null,"#"]],[]),["wiki.meta"]);
View
3 public/javascripts/prettyprint/lang-xq.js
@@ -0,0 +1,3 @@
+PR.registerLangHandler(PR.createSimpleLexer([["var pln",/^\$[\w-]+/,null,"$"]],[["pln",/^[\s=][<>][\s=]/],["lit",/^@[\w-]+/],["tag",/^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["com",/^\(:[\S\s]*?:\)/],["pln",/^[(),/;[\]{}]$/],["str",/^(?:"(?:[^"\\{]|\\[\S\s])*(?:"|$)|'(?:[^'\\{]|\\[\S\s])*(?:'|$))/,null,"\"'"],["kwd",/^(?:xquery|where|version|variable|union|typeswitch|treat|to|then|text|stable|sortby|some|self|schema|satisfies|returns|return|ref|processing-instruction|preceding-sibling|preceding|precedes|parent|only|of|node|namespace|module|let|item|intersect|instance|in|import|if|function|for|follows|following-sibling|following|external|except|every|else|element|descending|descendant-or-self|descendant|define|default|declare|comment|child|cast|case|before|attribute|assert|ascending|as|ancestor-or-self|ancestor|after|eq|order|by|or|and|schema-element|document-node|node|at)\b/],
+["typ",/^(?:xs:yearMonthDuration|xs:unsignedLong|xs:time|xs:string|xs:short|xs:QName|xs:Name|xs:long|xs:integer|xs:int|xs:gYearMonth|xs:gYear|xs:gMonthDay|xs:gDay|xs:float|xs:duration|xs:double|xs:decimal|xs:dayTimeDuration|xs:dateTime|xs:date|xs:byte|xs:boolean|xs:anyURI|xf:yearMonthDuration)\b/,null],["fun pln",/^(?:xp:dereference|xinc:node-expand|xinc:link-references|xinc:link-expand|xhtml:restructure|xhtml:clean|xhtml:add-lists|xdmp:zip-manifest|xdmp:zip-get|xdmp:zip-create|xdmp:xquery-version|xdmp:word-convert|xdmp:with-namespaces|xdmp:version|xdmp:value|xdmp:user-roles|xdmp:user-last-login|xdmp:user|xdmp:url-encode|xdmp:url-decode|xdmp:uri-is-file|xdmp:uri-format|xdmp:uri-content-type|xdmp:unquote|xdmp:unpath|xdmp:triggers-database|xdmp:trace|xdmp:to-json|xdmp:tidy|xdmp:subbinary|xdmp:strftime|xdmp:spawn-in|xdmp:spawn|xdmp:sleep|xdmp:shutdown|xdmp:set-session-field|xdmp:set-response-encoding|xdmp:set-response-content-type|xdmp:set-response-code|xdmp:set-request-time-limit|xdmp:set|xdmp:servers|xdmp:server-status|xdmp:server-name|xdmp:server|xdmp:security-database|xdmp:security-assert|xdmp:schema-database|xdmp:save|xdmp:role-roles|xdmp:role|xdmp:rethrow|xdmp:restart|xdmp:request-timestamp|xdmp:request-status|xdmp:request-cancel|xdmp:request|xdmp:redirect-response|xdmp:random|xdmp:quote|xdmp:query-trace|xdmp:query-meters|xdmp:product-edition|xdmp:privilege-roles|xdmp:privilege|xdmp:pretty-print|xdmp:powerpoint-convert|xdmp:platform|xdmp:permission|xdmp:pdf-convert|xdmp:path|xdmp:octal-to-integer|xdmp:node-uri|xdmp:node-replace|xdmp:node-kind|xdmp:node-insert-child|xdmp:node-insert-before|xdmp:node-insert-after|xdmp:node-delete|xdmp:node-database|xdmp:mul64|xdmp:modules-root|xdmp:modules-database|xdmp:merging|xdmp:merge-cancel|xdmp:merge|xdmp:md5|xdmp:logout|xdmp:login|xdmp:log-level|xdmp:log|xdmp:lock-release|xdmp:lock-acquire|xdmp:load|xdmp:invoke-in|xdmp:invoke|xdmp:integer-to-octal|xdmp:integer-to-hex|xdmp:http-put|xdmp:http-post|xdmp:http-options|xdmp:http-head|xdmp:http-get|xdmp:http-delete|xdmp:hosts|xdmp:host-status|xdmp:host-name|xdmp:host|xdmp:hex-to-integer|xdmp:hash64|xdmp:hash32|xdmp:has-privilege|xdmp:groups|xdmp:group-serves|xdmp:group-servers|xdmp:group-name|xdmp:group-hosts|xdmp:group|xdmp:get-session-field-names|xdmp:get-session-field|xdmp:get-response-encoding|xdmp:get-response-code|xdmp:get-request-username|xdmp:get-request-user|xdmp:get-request-url|xdmp:get-request-protocol|xdmp:get-request-path|xdmp:get-request-method|xdmp:get-request-header-names|xdmp:get-request-header|xdmp:get-request-field-names|xdmp:get-request-field-filename|xdmp:get-request-field-content-type|xdmp:get-request-field|xdmp:get-request-client-certificate|xdmp:get-request-client-address|xdmp:get-request-body|xdmp:get-current-user|xdmp:get-current-roles|xdmp:get|xdmp:function-name|xdmp:function-module|xdmp:function|xdmp:from-json|xdmp:forests|xdmp:forest-status|xdmp:forest-restore|xdmp:forest-restart|xdmp:forest-name|xdmp:forest-delete|xdmp:forest-databases|xdmp:forest-counts|xdmp:forest-clear|xdmp:forest-backup|xdmp:forest|xdmp:filesystem-file|xdmp:filesystem-directory|xdmp:exists|xdmp:excel-convert|xdmp:eval-in|xdmp:eval|xdmp:estimate|xdmp:email|xdmp:element-content-type|xdmp:elapsed-time|xdmp:document-set-quality|xdmp:document-set-property|xdmp:document-set-properties|xdmp:document-set-permissions|xdmp:document-set-collections|xdmp:document-remove-properties|xdmp:document-remove-permissions|xdmp:document-remove-collections|xdmp:document-properties|xdmp:document-locks|xdmp:document-load|xdmp:document-insert|xdmp:document-get-quality|xdmp:document-get-properties|xdmp:document-get-permissions|xdmp:document-get-collections|xdmp:document-get|xdmp:document-forest|xdmp:document-delete|xdmp:document-add-properties|xdmp:document-add-permissions|xdmp:document-add-collections|xdmp:directory-properties|xdmp:directory-locks|xdmp:directory-delete|xdmp:directory-create|xdmp:directory|xdmp:diacritic-less|xdmp:describe|xdmp:default-permissions|xdmp:default-collections|xdmp:databases|xdmp:database-restore-validate|xdmp:database-restore-status|xdmp:database-restore-cancel|xdmp:database-restore|xdmp:database-name|xdmp:database-forests|xdmp:database-backup-validate|xdmp:database-backup-status|xdmp:database-backup-purge|xdmp:database-backup-cancel|xdmp:database-backup|xdmp:database|xdmp:collection-properties|xdmp:collection-locks|xdmp:collection-delete|xdmp:collation-canonical-uri|xdmp:castable-as|xdmp:can-grant-roles|xdmp:base64-encode|xdmp:base64-decode|xdmp:architecture|xdmp:apply|xdmp:amp-roles|xdmp:amp|xdmp:add64|xdmp:add-response-header|xdmp:access|trgr:trigger-set-recursive|trgr:trigger-set-permissions|trgr:trigger-set-name|trgr:trigger-set-module|trgr:trigger-set-event|trgr:trigger-set-description|trgr:trigger-remove-permissions|trgr:trigger-module|trgr:trigger-get-permissions|trgr:trigger-enable|trgr:trigger-disable|trgr:trigger-database-online-event|trgr:trigger-data-event|trgr:trigger-add-permissions|trgr:remove-trigger|trgr:property-content|trgr:pre-commit|trgr:post-commit|trgr:get-trigger-by-id|trgr:get-trigger|trgr:document-scope|trgr:document-content|trgr:directory-scope|trgr:create-trigger|trgr:collection-scope|trgr:any-property-content|thsr:set-entry|thsr:remove-term|thsr:remove-synonym|thsr:remove-entry|thsr:query-lookup|thsr:lookup|thsr:load|thsr:insert|thsr:expand|thsr:add-synonym|spell:suggest-detailed|spell:suggest|spell:remove-word|spell:make-dictionary|spell:load|spell:levenshtein-distance|spell:is-correct|spell:insert|spell:double-metaphone|spell:add-word|sec:users-collection|sec:user-set-roles|sec:user-set-password|sec:user-set-name|sec:user-set-description|sec:user-set-default-permissions|sec:user-set-default-collections|sec:user-remove-roles|sec:user-privileges|sec:user-get-roles|sec:user-get-description|sec:user-get-default-permissions|sec:user-get-default-collections|sec:user-doc-permissions|sec:user-doc-collections|sec:user-add-roles|sec:unprotect-collection|sec:uid-for-name|sec:set-realm|sec:security-version|sec:security-namespace|sec:security-installed|sec:security-collection|sec:roles-collection|sec:role-set-roles|sec:role-set-name|sec:role-set-description|sec:role-set-default-permissions|sec:role-set-default-collections|sec:role-remove-roles|sec:role-privileges|sec:role-get-roles|sec:role-get-description|sec:role-get-default-permissions|sec:role-get-default-collections|sec:role-doc-permissions|sec:role-doc-collections|sec:role-add-roles|sec:remove-user|sec:remove-role-from-users|sec:remove-role-from-role|sec:remove-role-from-privileges|sec:remove-role-from-amps|sec:remove-role|sec:remove-privilege|sec:remove-amp|sec:protect-collection|sec:privileges-collection|sec:privilege-set-roles|sec:privilege-set-name|sec:privilege-remove-roles|sec:privilege-get-roles|sec:privilege-add-roles|sec:priv-doc-permissions|sec:priv-doc-collections|sec:get-user-names|sec:get-unique-elem-id|sec:get-role-names|sec:get-role-ids|sec:get-privilege|sec:get-distinct-permissions|sec:get-collection|sec:get-amp|sec:create-user-with-role|sec:create-user|sec:create-role|sec:create-privilege|sec:create-amp|sec:collections-collection|sec:collection-set-permissions|sec:collection-remove-permissions|sec:collection-get-permissions|sec:collection-add-permissions|sec:check-admin|sec:amps-collection|sec:amp-set-roles|sec:amp-remove-roles|sec:amp-get-roles|sec:amp-doc-permissions|sec:amp-doc-collections|sec:amp-add-roles|search:unparse|search:suggest|search:snippet|search:search|search:resolve-nodes|search:resolve|search:remove-constraint|search:parse|search:get-default-options|search:estimate|search:check-options|prof:value|prof:reset|prof:report|prof:invoke|prof:eval|prof:enable|prof:disable|prof:allowed|ppt:clean|pki:template-set-request|pki:template-set-name|pki:template-set-key-type|pki:template-set-key-options|pki:template-set-description|pki:template-in-use|pki:template-get-version|pki:template-get-request|pki:template-get-name|pki:template-get-key-type|pki:template-get-key-options|pki:template-get-id|pki:template-get-description|pki:need-certificate|pki:is-temporary|pki:insert-trusted-certificates|pki:insert-template|pki:insert-signed-certificates|pki:insert-certificate-revocation-list|pki:get-trusted-certificate-ids|pki:get-template-ids|pki:get-template-certificate-authority|pki:get-template-by-name|pki:get-template|pki:get-pending-certificate-requests-xml|pki:get-pending-certificate-requests-pem|pki:get-pending-certificate-request|pki:get-certificates-for-template-xml|pki:get-certificates-for-template|pki:get-certificates|pki:get-certificate-xml|pki:get-certificate-pem|pki:get-certificate|pki:generate-temporary-certificate-if-necessary|pki:generate-temporary-certificate|pki:generate-template-certificate-authority|pki:generate-certificate-request|pki:delete-template|pki:delete-certificate|pki:create-template|pdf:make-toc|pdf:insert-toc-headers|pdf:get-toc|pdf:clean|p:status-transition|p:state-transition|p:remove|p:pipelines|p:insert|p:get-by-id|p:get|p:execute|p:create|p:condition|p:collection|p:action|ooxml:runs-merge|ooxml:package-uris|ooxml:package-parts-insert|ooxml:package-parts|msword:clean|mcgm:polygon|mcgm:point|mcgm:geospatial-query-from-elements|mcgm:geospatial-query|mcgm:circle|math:tanh|math:tan|math:sqrt|math:sinh|math:sin|math:pow|math:modf|math:log10|math:log|math:ldexp|math:frexp|math:fmod|math:floor|math:fabs|math:exp|math:cosh|math:cos|math:ceil|math:atan2|math:atan|math:asin|math:acos|map:put|map:map|map:keys|map:get|map:delete|map:count|map:clear|lnk:to|lnk:remove|lnk:insert|lnk:get|lnk:from|lnk:create|kml:polygon|kml:point|kml:interior-polygon|kml:geospatial-query-from-elements|kml:geospatial-query|kml:circle|kml:box|gml:polygon|gml:point|gml:interior-polygon|gml:geospatial-query-from-elements|gml:geospatial-query|gml:circle|gml:box|georss:point|georss:geospatial-query|georss:circle|geo:polygon|geo:point|geo:interior-polygon|geo:geospatial-query-from-elements|geo:geospatial-query|geo:circle|geo:box|fn:zero-or-one|fn:years-from-duration|fn:year-from-dateTime|fn:year-from-date|fn:upper-case|fn:unordered|fn:true|fn:translate|fn:trace|fn:tokenize|fn:timezone-from-time|fn:timezone-from-dateTime|fn:timezone-from-date|fn:sum|fn:subtract-dateTimes-yielding-yearMonthDuration|fn:subtract-dateTimes-yielding-dayTimeDuration|fn:substring-before|fn:substring-after|fn:substring|fn:subsequence|fn:string-to-codepoints|fn:string-pad|fn:string-length|fn:string-join|fn:string|fn:static-base-uri|fn:starts-with|fn:seconds-from-time|fn:seconds-from-duration|fn:seconds-from-dateTime|fn:round-half-to-even|fn:round|fn:root|fn:reverse|fn:resolve-uri|fn:resolve-QName|fn:replace|fn:remove|fn:QName|fn:prefix-from-QName|fn:position|fn:one-or-more|fn:number|fn:not|fn:normalize-unicode|fn:normalize-space|fn:node-name|fn:node-kind|fn:nilled|fn:namespace-uri-from-QName|fn:namespace-uri-for-prefix|fn:namespace-uri|fn:name|fn:months-from-duration|fn:month-from-dateTime|fn:month-from-date|fn:minutes-from-time|fn:minutes-from-duration|fn:minutes-from-dateTime|fn:min|fn:max|fn:matches|fn:lower-case|fn:local-name-from-QName|fn:local-name|fn:last|fn:lang|fn:iri-to-uri|fn:insert-before|fn:index-of|fn:in-scope-prefixes|fn:implicit-timezone|fn:idref|fn:id|fn:hours-from-time|fn:hours-from-duration|fn:hours-from-dateTime|fn:floor|fn:false|fn:expanded-QName|fn:exists|fn:exactly-one|fn:escape-uri|fn:escape-html-uri|fn:error|fn:ends-with|fn:encode-for-uri|fn:empty|fn:document-uri|fn:doc-available|fn:doc|fn:distinct-values|fn:distinct-nodes|fn:default-collation|fn:deep-equal|fn:days-from-duration|fn:day-from-dateTime|fn:day-from-date|fn:data|fn:current-time|fn:current-dateTime|fn:current-date|fn:count|fn:contains|fn:concat|fn:compare|fn:collection|fn:codepoints-to-string|fn:codepoint-equal|fn:ceiling|fn:boolean|fn:base-uri|fn:avg|fn:adjust-time-to-timezone|fn:adjust-dateTime-to-timezone|fn:adjust-date-to-timezone|fn:abs|feed:unsubscribe|feed:subscription|feed:subscribe|feed:request|feed:item|feed:description|excel:clean|entity:enrich|dom:set-pipelines|dom:set-permissions|dom:set-name|dom:set-evaluation-context|dom:set-domain-scope|dom:set-description|dom:remove-pipeline|dom:remove-permissions|dom:remove|dom:get|dom:evaluation-context|dom:domains|dom:domain-scope|dom:create|dom:configuration-set-restart-user|dom:configuration-set-permissions|dom:configuration-set-evaluation-context|dom:configuration-set-default-domain|dom:configuration-get|dom:configuration-create|dom:collection|dom:add-pipeline|dom:add-permissions|dls:retention-rules|dls:retention-rule-remove|dls:retention-rule-insert|dls:retention-rule|dls:purge|dls:node-expand|dls:link-references|dls:link-expand|dls:documents-query|dls:document-versions-query|dls:document-version-uri|dls:document-version-query|dls:document-version-delete|dls:document-version-as-of|dls:document-version|dls:document-update|dls:document-unmanage|dls:document-set-quality|dls:document-set-property|dls:document-set-properties|dls:document-set-permissions|dls:document-set-collections|dls:document-retention-rules|dls:document-remove-properties|dls:document-remove-permissions|dls:document-remove-collections|dls:document-purge|dls:document-manage|dls:document-is-managed|dls:document-insert-and-manage|dls:document-include-query|dls:document-history|dls:document-get-permissions|dls:document-extract-part|dls:document-delete|dls:document-checkout-status|dls:document-checkout|dls:document-checkin|dls:document-add-properties|dls:document-add-permissions|dls:document-add-collections|dls:break-checkout|dls:author-query|dls:as-of-query|dbk:convert|dbg:wait|dbg:value|dbg:stopped|dbg:stop|dbg:step|dbg:status|dbg:stack|dbg:out|dbg:next|dbg:line|dbg:invoke|dbg:function|dbg:finish|dbg:expr|dbg:eval|dbg:disconnect|dbg:detach|dbg:continue|dbg:connect|dbg:clear|dbg:breakpoints|dbg:break|dbg:attached|dbg:attach|cvt:save-converted-documents|cvt:part-uri|cvt:destination-uri|cvt:basepath|cvt:basename|cts:words|cts:word-query-weight|cts:word-query-text|cts:word-query-options|cts:word-query|cts:word-match|cts:walk|cts:uris|cts:uri-match|cts:train|cts:tokenize|cts:thresholds|cts:stem|cts:similar-query-weight|cts:similar-query-nodes|cts:similar-query|cts:shortest-distance|cts:search|cts:score|cts:reverse-query-weight|cts:reverse-query-nodes|cts:reverse-query|cts:remainder|cts:registered-query-weight|cts:registered-query-options|cts:registered-query-ids|cts:registered-query|cts:register|cts:query|cts:quality|cts:properties-query-query|cts:properties-query|cts:polygon-vertices|cts:polygon|cts:point-longitude|cts:point-latitude|cts:point|cts:or-query-queries|cts:or-query|cts:not-query-weight|cts:not-query-query|cts:not-query|cts:near-query-weight|cts:near-query-queries|cts:near-query-options|cts:near-query-distance|cts:near-query|cts:highlight|cts:geospatial-co-occurrences|cts:frequency|cts:fitness|cts:field-words|cts:field-word-query-weight|cts:field-word-query-text|cts:field-word-query-options|cts:field-word-query-field-name|cts:field-word-query|cts:field-word-match|cts:entity-highlight|cts:element-words|cts:element-word-query-weight|cts:element-word-query-text|cts:element-word-query-options|cts:element-word-query-element-name|cts:element-word-query|cts:element-word-match|cts:element-values|cts:element-value-ranges|cts:element-value-query-weight|cts:element-value-query-text|cts:element-value-query-options|cts:element-value-query-element-name|cts:element-value-query|cts:element-value-match|cts:element-value-geospatial-co-occurrences|cts:element-value-co-occurrences|cts:element-range-query-weight|cts:element-range-query-value|cts:element-range-query-options|cts:element-range-query-operator|cts:element-range-query-element-name|cts:element-range-query|cts:element-query-query|cts:element-query-element-name|cts:element-query|cts:element-pair-geospatial-values|cts:element-pair-geospatial-value-match|cts:element-pair-geospatial-query-weight|cts:element-pair-geospatial-query-region|cts:element-pair-geospatial-query-options|cts:element-pair-geospatial-query-longitude-name|cts:element-pair-geospatial-query-latitude-name|cts:element-pair-geospatial-query-element-name|cts:element-pair-geospatial-query|cts:element-pair-geospatial-boxes|cts:element-geospatial-values|cts:element-geospatial-value-match|cts:element-geospatial-query-weight|cts:element-geospatial-query-region|cts:element-geospatial-query-options|cts:element-geospatial-query-element-name|cts:element-geospatial-query|cts:element-geospatial-boxes|cts:element-child-geospatial-values|cts:element-child-geospatial-value-match|cts:element-child-geospatial-query-weight|cts:element-child-geospatial-query-region|cts:element-child-geospatial-query-options|cts:element-child-geospatial-query-element-name|cts:element-child-geospatial-query-child-name|cts:element-child-geospatial-query|cts:element-child-geospatial-boxes|cts:element-attribute-words|cts:element-attribute-word-query-weight|cts:element-attribute-word-query-text|cts:element-attribute-word-query-options|cts:element-attribute-word-query-element-name|cts:element-attribute-word-query-attribute-name|cts:element-attribute-word-query|cts:element-attribute-word-match|cts:element-attribute-values|cts:element-attribute-value-ranges|cts:element-attribute-value-query-weight|cts:element-attribute-value-query-text|cts:element-attribute-value-query-options|cts:element-attribute-value-query-element-name|cts:element-attribute-value-query-attribute-name|cts:element-attribute-value-query|cts:element-attribute-value-match|cts:element-attribute-value-geospatial-co-occurrences|cts:element-attribute-value-co-occurrences|cts:element-attribute-range-query-weight|cts:element-attribute-range-query-value|cts:element-attribute-range-query-options|cts:element-attribute-range-query-operator|cts:element-attribute-range-query-element-name|cts:element-attribute-range-query-attribute-name|cts:element-attribute-range-query|cts:element-attribute-pair-geospatial-values|cts:element-attribute-pair-geospatial-value-match|cts:element-attribute-pair-geospatial-query-weight|cts:element-attribute-pair-geospatial-query-region|cts:element-attribute-pair-geospatial-query-options|cts:element-attribute-pair-geospatial-query-longitude-name|cts:element-attribute-pair-geospatial-query-latitude-name|cts:element-attribute-pair-geospatial-query-element-name|cts:element-attribute-pair-geospatial-query|cts:element-attribute-pair-geospatial-boxes|cts:document-query-uris|cts:document-query|cts:distance|cts:directory-query-uris|cts:directory-query-depth|cts:directory-query|cts:destination|cts:deregister|cts:contains|cts:confidence|cts:collections|cts:collection-query-uris|cts:collection-query|cts:collection-match|cts:classify|cts:circle-radius|cts:circle-center|cts:circle|cts:box-west|cts:box-south|cts:box-north|cts:box-east|cts:box|cts:bearing|cts:arc-intersection|cts:and-query-queries|cts:and-query-options|cts:and-query|cts:and-not-query-positive-query|cts:and-not-query-negative-query|cts:and-not-query|css:get|css:convert|cpf:success|cpf:failure|cpf:document-set-state|cpf:document-set-processing-status|cpf:document-set-last-updated|cpf:document-set-error|cpf:document-get-state|cpf:document-get-processing-status|cpf:document-get-last-updated|cpf:document-get-error|cpf:check-transition|alert:spawn-matching-actions|alert:rule-user-id-query|alert:rule-set-user-id|alert:rule-set-query|alert:rule-set-options|alert:rule-set-name|alert:rule-set-description|alert:rule-set-action|alert:rule-remove|alert:rule-name-query|alert:rule-insert|alert:rule-id-query|alert:rule-get-user-id|alert:rule-get-query|alert:rule-get-options|alert:rule-get-name|alert:rule-get-id|alert:rule-get-description|alert:rule-get-action|alert:rule-action-query|alert:remove-triggers|alert:make-rule|alert:make-log-action|alert:make-config|alert:make-action|alert:invoke-matching-actions|alert:get-my-rules|alert:get-all-rules|alert:get-actions|alert:find-matching-rules|alert:create-triggers|alert:config-set-uri|alert:config-set-trigger-ids|alert:config-set-options|alert:config-set-name|alert:config-set-description|alert:config-set-cpf-domain-names|alert:config-set-cpf-domain-ids|alert:config-insert|alert:config-get-uri|alert:config-get-trigger-ids|alert:config-get-options|alert:config-get-name|alert:config-get-id|alert:config-get-description|alert:config-get-cpf-domain-names|alert:config-get-cpf-domain-ids|alert:config-get|alert:config-delete|alert:action-set-options|alert:action-set-name|alert:action-set-module-root|alert:action-set-module-db|alert:action-set-module|alert:action-set-description|alert:action-remove|alert:action-insert|alert:action-get-options|alert:action-get-name|alert:action-get-module-root|alert:action-get-module-db|alert:action-get-module|alert:action-get-description|zero-or-one|years-from-duration|year-from-dateTime|year-from-date|upper-case|unordered|true|translate|trace|tokenize|timezone-from-time|timezone-from-dateTime|timezone-from-date|sum|subtract-dateTimes-yielding-yearMonthDuration|subtract-dateTimes-yielding-dayTimeDuration|substring-before|substring-after|substring|subsequence|string-to-codepoints|string-pad|string-length|string-join|string|static-base-uri|starts-with|seconds-from-time|seconds-from-duration|seconds-from-dateTime|round-half-to-even|round|root|reverse|resolve-uri|resolve-QName|replace|remove|QName|prefix-from-QName|position|one-or-more|number|not|normalize-unicode|normalize-space|node-name|node-kind|nilled|namespace-uri-from-QName|namespace-uri-for-prefix|namespace-uri|name|months-from-duration|month-from-dateTime|month-from-date|minutes-from-time|minutes-from-duration|minutes-from-dateTime|min|max|matches|lower-case|local-name-from-QName|local-name|last|lang|iri-to-uri|insert-before|index-of|in-scope-prefixes|implicit-timezone|idref|id|hours-from-time|hours-from-duration|hours-from-dateTime|floor|false|expanded-QName|exists|exactly-one|escape-uri|escape-html-uri|error|ends-with|encode-for-uri|empty|document-uri|doc-available|doc|distinct-values|distinct-nodes|default-collation|deep-equal|days-from-duration|day-from-dateTime|day-from-date|data|current-time|current-dateTime|current-date|count|contains|concat|compare|collection|codepoints-to-string|codepoint-equal|ceiling|boolean|base-uri|avg|adjust-time-to-timezone|adjust-dateTime-to-timezone|adjust-date-to-timezone|abs)\b/],
+["pln",/^[\w:-]+/],["pln",/^[\t\n\r \xa0]+/]]),["xq","xquery"]);
View
2 public/javascripts/prettyprint/lang-yaml.js
@@ -0,0 +1,2 @@
+var a=null;
+PR.registerLangHandler(PR.createSimpleLexer([["pun",/^[:>?|]+/,a,":|>?"],["dec",/^%(?:YAML|TAG)[^\n\r#]+/,a,"%"],["typ",/^&\S+/,a,"&"],["typ",/^!\S*/,a,"!"],["str",/^"(?:[^"\\]|\\.)*(?:"|$)/,a,'"'],["str",/^'(?:[^']|'')*(?:'|$)/,a,"'"],["com",/^#[^\n\r]*/,a,"#"],["pln",/^\s+/,a," \t\r\n"]],[["dec",/^(?:---|\.\.\.)(?:[\n\r]|$)/],["pun",/^-/],["kwd",/^\w+:[\n\r ]/],["pln",/^\w+/]]),["yaml","yml"]);
View
42 public/javascripts/prettyprint/prettify.css
@@ -0,0 +1,42 @@
+.com { color: #93a1a1; }
+.lit { color: #195f91; }
+.pun, .opn, .clo { color: #93a1a1; }
+.fun { color: #dc322f; }
+.str, .atv { color: #268bd2; }
+.kwd, .tag { color: #195f91; }
+.typ, .atn, .dec, .var { color: #CB4B16; }
+.pln { color: #93a1a1; }
+pre.prettyprint {
+ background: #fefbf3;
+ padding: 9px;
+ border: 1px solid rgba(0,0,0,.2);
+ -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.1);
+ -moz-box-shadow: 0 1px 2px rgba(0,0,0,.1);
+ box-shadow: 0 1px 2px rgba(0,0,0,.1);
+}
+
+/* Specify class=linenums on a pre to get line numbering */
+ol.linenums { margin: 0 0 0 40px; } /* IE indents via margin-left */
+ol.linenums li { color: rgba(0,0,0,.15); line-height: 20px; }
+/* Alternate shading for lines */
+li.L1, li.L3, li.L5, li.L7, li.L9 { }
+
+/*
+$base03: #002b36;
+$base02: #073642;
+$base01: #586e75;
+$base00: #657b83;
+$base0: #839496;
+$base1: #93a1a1;
+$base2: #eee8d5;
+$base3: #fdf6e3;
+$yellow: #b58900;
+$orange: #cb4b16;
+$red: #dc322f;
+$magenta: #d33682;
+$violet: #6c71c4;
+$blue: #268bd2;
+$cyan: #2aa198;
+$green: #859900;
+*/
+
View
28 public/javascripts/prettyprint/prettify.js
@@ -0,0 +1,28 @@
+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 comments on commit f41a55f

Please sign in to comment.