Browse files

Basic setup

  • Loading branch information...
1 parent 0434f17 commit aa89f39fd6bc203c4d83f777e2bc421763e38700 @jzaefferer jzaefferer committed Jun 5, 2012
View
9 .gitignore
@@ -0,0 +1,9 @@
+dist
+node_modules
+config.json
+.project
+*~
+*.diff
+*.patch
+.DS_Store
+.settings
View
24 LICENSE-MIT.txt
@@ -0,0 +1,24 @@
+Copyright (c) 2012 jQuery Foundation, http://jquery.org/
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+and logs, available at http://github.com/jquery/api.jquerymobile.com
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
18 README.md
@@ -1,4 +1,18 @@
api.qunitjs.com
-===============
+====================
-API documentation for QUnit
+## Building
+
+### Requirements
+* <a href="http://www.xmlsoft.org/">libxml2</a>
+* <a href="http://xmlsoft.org/XSLT/">libxslt</a>
+* <a href="http://pygments.org/">Pygments</a>
+
+The `xmllint` and `xsltproc` and `pygmentize` utilities need to be in your path. If you are on Windows, you can get libxml2 and libxslt from <a href="http://sourceforge.net/projects/gnuwin32/files/">GnuWin32</a>.
+
+### Build
+
+1. `npm install`
+2. `cp config-sample.json config.json`
+3. Edit config.json per https://github.com/scottgonzalez/grunt-wordpress#config
+4. `grunt`
View
25 cat2tax.xsl
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+ <xsl:template match="category">
+ <item>
+ <name><xsl:value-of select="@name"/></name>
+ <slug><xsl:value-of select="@slug"/></slug>
+ <xsl:if test="desc/child::node()">
+ <description><xsl:value-of select="desc"/></description>
+ </xsl:if>
+ <xsl:if test="category">
+ <children>
+ <xsl:apply-templates select="category"/>
+ </children>
+ </xsl:if>
+ </item>
+ </xsl:template>
+
+ <xsl:template match="categories">
+ <category>
+ <xsl:apply-templates select="node()"/>
+ </category>
+ </xsl:template>
+
+</xsl:stylesheet>
View
7 categories.xml
@@ -0,0 +1,7 @@
+<categories>
+ <category name="Uncategorized" slug="uncategorized"/>
+ <category name="Test" slug="test"></category>
+ <category name="Assert" slug="assert"></category>
+ <category name="Callbacks" slug="callbacks"></category>
+ <category name="Async Control" slug="async-control"></category>
+</categories>
View
5 config-sample.json
@@ -0,0 +1,5 @@
+{
+ "url": "dev.api.jquerymobile.com",
+ "username": "admin",
+ "password": "secret"
+}
View
9 entries/QUnit.begin.xml
@@ -0,0 +1,9 @@
+<entry type="method" name="QUnit.begin">
+ <signature>
+ <argument name="callback">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc></desc>
+ <category slug="callbacks"/>
+</entry>
View
9 entries/QUnit.done.xml
@@ -0,0 +1,9 @@
+<entry type="method" name="QUnit.done">
+ <signature>
+ <argument name="callback">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc></desc>
+ <category slug="callbacks"/>
+</entry>
View
9 entries/QUnit.log.xml
@@ -0,0 +1,9 @@
+<entry type="method" name="QUnit.log">
+ <signature>
+ <argument name="callback">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc></desc>
+ <category slug="callbacks"/>
+</entry>
View
9 entries/QUnit.moduleDone.xml
@@ -0,0 +1,9 @@
+<entry type="method" name="QUnit.moduleDone">
+ <signature>
+ <argument name="callback">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc></desc>
+ <category slug="callbacks"/>
+</entry>
View
9 entries/QUnit.moduleStart.xml
@@ -0,0 +1,9 @@
+<entry type="method" name="QUnit.moduleStart">
+ <signature>
+ <argument name="callback">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc></desc>
+ <category slug="callbacks"/>
+</entry>
View
9 entries/QUnit.testDone.xml
@@ -0,0 +1,9 @@
+<entry type="method" name="QUnit.testDone">
+ <signature>
+ <argument name="callback">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc></desc>
+ <category slug="callbacks"/>
+</entry>
View
9 entries/QUnit.testStart.xml
@@ -0,0 +1,9 @@
+<entry type="method" name="QUnit.testStart">
+ <signature>
+ <argument name="callback">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc></desc>
+ <category slug="callbacks"/>
+</entry>
View
17 entries/asyncTest.xml
@@ -0,0 +1,17 @@
+<entry type="method" name="asyncTest">
+ <signature>
+ <argument name="name">
+ <desc></desc>
+ </argument>
+ <argument name="expected">
+ <desc></desc>
+ </argument>
+ <argument name="test">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc>
+ Add an asynchronous test to run. The test must include a call to start().
+ </desc>
+ <category slug="test"/>
+</entry>
View
17 entries/deepEqual.xml
@@ -0,0 +1,17 @@
+<entry type="method" name="deepEqual">
+ <signature>
+ <argument name="actual">
+ <desc></desc>
+ </argument>
+ <argument name="expected">
+ <desc></desc>
+ </argument>
+ <argument name="message">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc>
+ A deep recursive comparison assertion, working on primitive types, arrays and objects.
+ </desc>
+ <category slug="assert"/>
+</entry>
View
17 entries/equal.xml
@@ -0,0 +1,17 @@
+<entry type="method" name="equal">
+ <signature>
+ <argument name="actual">
+ <desc></desc>
+ </argument>
+ <argument name="expected">
+ <desc></desc>
+ </argument>
+ <argument name="message">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc>
+ A comparison assertion, equivalent to JUnit’s assertEquals.
+ </desc>
+ <category slug="assert"/>
+</entry>
View
11 entries/expect.xml
@@ -0,0 +1,11 @@
+<entry type="method" name="expect">
+ <signature>
+ <argument name="amount">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc>
+ Specify how many assertions are expected to run within a test.
+ </desc>
+ <category slug="test"/>
+</entry>
View
14 entries/module.xml
@@ -0,0 +1,14 @@
+<entry type="method" name="module">
+ <signature>
+ <argument name="name">
+ <desc></desc>
+ </argument>
+ <argument name="lifecycle">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc>
+ Separate tests into modules.
+ </desc>
+ <category slug="test"/>
+</entry>
View
17 entries/notDeepEqual.xml
@@ -0,0 +1,17 @@
+<entry type="method" name="notDeepEqual">
+ <signature>
+ <argument name="actual">
+ <desc></desc>
+ </argument>
+ <argument name="expected">
+ <desc></desc>
+ </argument>
+ <argument name="message">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc>
+ A deep recursive comparison assertion, working on primitive types, arrays and objects, with the result inverted, passing when some property isn’t equal.
+ </desc>
+ <category slug="assert"/>
+</entry>
View
17 entries/notEqual.xml
@@ -0,0 +1,17 @@
+<entry type="method" name="notEqual">
+ <signature>
+ <argument name="actual">
+ <desc></desc>
+ </argument>
+ <argument name="expected">
+ <desc></desc>
+ </argument>
+ <argument name="message">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc>
+ A comparison assertion, equivalent to JUnit’s assertNotEquals.
+ </desc>
+ <category slug="assert"/>
+</entry>
View
17 entries/notStrictEqual.xml
@@ -0,0 +1,17 @@
+<entry type="method" name="notStrictEqual">
+ <signature>
+ <argument name="actual">
+ <desc></desc>
+ </argument>
+ <argument name="expected">
+ <desc></desc>
+ </argument>
+ <argument name="message">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc>
+ A stricter comparison assertion then notEqual.
+ </desc>
+ <category slug="assert"/>
+</entry>
View
14 entries/ok.xml
@@ -0,0 +1,14 @@
+<entry type="method" name="ok">
+ <signature>
+ <argument name="state">
+ <desc></desc>
+ </argument>
+ <argument name="message">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc>
+ A boolean assertion, equivalent to JUnit’s assertTrue. Passes if the first argument is truthy.
+ </desc>
+ <category slug="assert"/>
+</entry>
View
17 entries/raises.xml
@@ -0,0 +1,17 @@
+<entry type="method" name="raises">
+ <signature>
+ <argument name="block">
+ <desc></desc>
+ </argument>
+ <argument name="expected">
+ <desc></desc>
+ </argument>
+ <argument name="message">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc>
+ Assertion to test if a callback throws an exception when run.
+ </desc>
+ <category slug="assert"/>
+</entry>
View
11 entries/start.xml
@@ -0,0 +1,11 @@
+<entry type="method" name="start">
+ <signature>
+ <argument name="decrement">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc>
+ Start running tests again after the testrunner was stopped. See stop().
+ </desc>
+ <category slug="async-control"/>
+</entry>
View
11 entries/stop.xml
@@ -0,0 +1,11 @@
+<entry type="method" name="stop">
+ <signature>
+ <argument name="increment">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc>
+ Stop the testrunner to wait for async tests to run. Call start() to continue.
+ </desc>
+ <category slug="async-control"/>
+</entry>
View
17 entries/strictEqual.xml
@@ -0,0 +1,17 @@
+<entry type="method" name="strictEqual">
+ <signature>
+ <argument name="actual">
+ <desc></desc>
+ </argument>
+ <argument name="expected">
+ <desc></desc>
+ </argument>
+ <argument name="message">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc>
+ A stricter comparison assertion then equal.
+ </desc>
+ <category slug="assert"/>
+</entry>
View
17 entries/test.xml
@@ -0,0 +1,17 @@
+<entry type="method" name="test">
+ <signature>
+ <argument name="title">
+ <desc></desc>
+ </argument>
+ <argument name="expected">
+ <desc></desc>
+ </argument>
+ <argument name="test">
+ <desc></desc>
+ </argument>
+ </signature>
+ <desc>
+ Add a test to run.
+ </desc>
+ <category slug="test"/>
+</entry>
View
268 entries2html.xsl
@@ -0,0 +1,268 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<xsl:output method="html" omit-xml-declaration="yes"/>
+
+<xsl:template match="/">
+<script>
+ {
+ "title": "<xsl:value-of select="//entry/@name" />",
+ "termSlugs": {
+ "category": [
+ <xsl:for-each select="//entry/category"><xsl:if test="position() &gt; 1"><xsl:text>,</xsl:text></xsl:if>"<xsl:value-of select="@slug"/>"</xsl:for-each>
+ ]
+ }
+ }
+</script>
+ <xsl:for-each select="//entry">
+ <xsl:variable name="number-examples" select="count(example)"/>
+ <article>
+ <xsl:copy-of select="desc/node()"/>
+ <nav>
+ <ul>
+ <li>
+ <a href="#overview">Overview</a>
+ </li>
+ <li>
+ <a href="#options">Options</a>
+ <ul>
+ <xsl:for-each select="options/option">
+ <li>
+ <a href="#option-{@name}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </li>
+ <li>
+ <a href="#methods">Methods</a>
+ <ul>
+ <xsl:for-each select="methods/method">
+ <li>
+ <a href="#method-{@name}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </li>
+ <li>
+ <a href="#events">Events</a>
+ <ul>
+ <xsl:for-each select="events/event">
+ <li>
+ <a href="#event-{@name}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </li>
+ <li>
+ <a href="#theming">Theming</a>
+ <ul>
+ <xsl:for-each select="theming/theme">
+ <li>
+ <a href="#theme-{@name}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </li>
+ <li>
+ <a href="#examples">Examples</a>
+ </li>
+ </ul>
+ </nav>
+ <section id="overview">
+ <header>
+ <h2 class="underline">Overview</h2>
+ </header>
+ <p>
+ <xsl:copy-of select="longdesc/node()"/>
+ </p>
+ </section>
+ <section id="options">
+ <header>
+ <h2 class="underline">Options</h2>
+ </header>
+ <ul>
+ <xsl:for-each select="options/option">
+ <li id="option-{@name}">
+ <h3>
+ <xsl:value-of select="@name"/>
+ </h3>
+ <p>
+ <strong>Type: </strong>
+ <xsl:value-of select="@type"/>
+ <xsl:for-each select="type">
+ <xsl:if test="position() &gt; 1">, </xsl:if>
+ <xsl:value-of select="@name"/>
+ </xsl:for-each>
+ </p>
+ <p>
+ <strong>Default: </strong>
+ <xsl:value-of select="@default"/>
+ </p>
+ <p>
+ <xsl:copy-of select="desc/node()"/>
+ </p>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </section>
+ <section id="methods">
+ <header>
+ <h2 class="underline">Methods</h2>
+ </header>
+ <ul>
+ <xsl:for-each select="methods/method">
+ <li id="method-{@name}">
+ <h3><xsl:value-of select="@name"/>(
+ <xsl:for-each select="argument"><xsl:if test="position() &gt; 1">, </xsl:if><xsl:if test="@optional">[</xsl:if><xsl:value-of select="@name"/><xsl:if test="@optional">]</xsl:if></xsl:for-each>
+ )</h3>
+ <p>
+ <xsl:copy-of select="desc/node()"/>
+ </p>
+ <xsl:call-template name="arguments"/>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </section>
+ <section id="events">
+ <header>
+ <h2 class="underline">Events</h2>
+ </header>
+ <ul>
+ <xsl:for-each select="events/event">
+ <li id="event-{@name}">
+ <h3><xsl:value-of select="@name"/>(
+ <xsl:for-each select="argument"><xsl:if test="position() &gt; 1">, </xsl:if><xsl:value-of select="@name"/></xsl:for-each>
+ )</h3>
+ <p>
+ <xsl:copy-of select="desc/node()"/>
+ </p>
+ <xsl:call-template name="arguments"/>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </section>
+ <section id="theming">
+ <header>
+ <h2 class="underline">Theming</h2>
+ </header>
+ <ul>
+ <xsl:for-each select="theming/theme">
+ <li id="theme-{@name}">
+ <h3>
+ <xsl:value-of select="@name"/>
+ </h3>
+ <p>
+ <strong>Type: </strong>
+ <xsl:value-of select="@type"/>
+ <xsl:for-each select="type">
+ <xsl:if test="position() &gt; 1">, </xsl:if>
+ <xsl:value-of select="@name"/>
+ </xsl:for-each>
+ </p>
+ <p>
+ <strong>Default: </strong>
+ <xsl:value-of select="@default"/>
+ </p>
+ <p>
+ <xsl:copy-of select="desc/node()"/>
+ </p>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </section>
+ <section id="examples">
+ <header>
+ <h2 class="underline">Example<xsl:if test="$number-examples &gt; 1">s</xsl:if></h2>
+ </header>
+ <xsl:for-each select="example">
+ <h4>
+ <xsl:if test="$number-examples &gt; 1">Example: </xsl:if>
+ <span class="desc">
+ <xsl:value-of select="desc"/>
+ </span>
+ </h4>
+ <pre>
+ <code><xsl:choose><xsl:when test="html"><xsl:attribute name="class">example demo-code</xsl:attribute></xsl:when><xsl:otherwise><xsl:attribute name="class">example</xsl:attribute></xsl:otherwise></xsl:choose>&lt;!doctype html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;meta charset="utf-8"&gt;
+&lt;title&gt;<xsl:value-of select="desc"/>&lt;/title&gt;
+&lt;link rel="stylesheet" href="jquery-mobile.css"&gt;<xsl:if test="css">
+&lt;style&gt;<xsl:copy-of select="css/text()"/> &lt;/style&gt;</xsl:if>
+&lt;script src="jquery.js"&gt;&lt;/script&gt;
+&lt;script src="jquery-mobile.js"&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;div data-role="page"&gt;
+<xsl:copy-of select="html/text()"/>
+&lt;/div&gt;
+&lt;script&gt;<xsl:copy-of select="code/text()"/>&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
+</code>
+ </pre>
+ <xsl:if test="html">
+ <h4>Demo:</h4>
+ <div>
+ <xsl:choose>
+ <xsl:when test="html">
+ <xsl:attribute name="class">demo code-demo</xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:attribute name="class">demo</xsl:attribute>
+ </xsl:otherwise>
+ </xsl:choose>
+ </div>
+ </xsl:if>
+ </xsl:for-each>
+ </section>
+ </article>
+ </xsl:for-each>
+</xsl:template>
+<!-- arguments -->
+<xsl:template name="arguments">
+ <xsl:if test="argument">
+ <xsl:text> </xsl:text>
+ <ul>
+ <xsl:apply-templates select="argument"/>
+ </ul>
+ </xsl:if>
+</xsl:template>
+<!-- TODO consider optional arguments -->
+<xsl:template match="argument">
+ <li>
+ <xsl:value-of select="@name"/>
+ <xsl:text>: </xsl:text>
+ <xsl:value-of select="@type"/>
+ <xsl:if test="not(@null)">
+ <xsl:if test="desc">
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="desc"/>
+ </xsl:if>
+ <ul>
+ <xsl:apply-templates select="property"/>
+ </ul>
+ </xsl:if>
+ </li>
+</xsl:template>
+<!-- argument properties -->
+<xsl:template match="argument/property">
+ <li>
+ <xsl:value-of select="@name"/>
+ <xsl:text>: </xsl:text>
+ <xsl:value-of select="@type"/>
+ <xsl:if test="desc">
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="desc"/>
+ </xsl:if>
+ </li>
+</xsl:template>
+
+</xsl:stylesheet>
View
162 grunt.js
@@ -0,0 +1,162 @@
+/*jshint node:true */
+module.exports = function( grunt ) {
+
+var // modules
+ fs = require( "fs" ),
+ path = require( "path" ),
+ spawn = require( "child_process" ).spawn,
+
+ // files
+ entryFiles = grunt.file.expandFiles( "entries/*.xml" ),
+ resourceFiles = grunt.file.expandFiles( "resources/*" ),
+
+ xmlFiles = [].concat( entryFiles, "categories.xml" );
+
+function pathSlug( fileName ) {
+ return path.basename( fileName, path.extname( fileName ) );
+}
+
+grunt.loadNpmTasks( "grunt-clean" );
+grunt.loadNpmTasks( "grunt-wordpress" );
+
+grunt.initConfig({
+ clean: {
+ folder: "dist"
+ },
+ lint: {
+ grunt: "grunt.js"
+ },
+ xmllint: {
+ all: xmlFiles
+ },
+ wordpress: grunt.utils._.extend({
+ dir: "dist/wordpress"
+ }, grunt.file.readJSON( "config.json" ) )
+});
+
+grunt.registerTask( "xmllint", function() {
+ var task = this,
+ taskDone = task.async();
+ grunt.utils.async.forEachSeries( xmlFiles, function( fileName, fileDone ) {
+ grunt.verbose.write( "Linting " + fileName + "..." );
+ grunt.utils.spawn({
+ cmd: "xmllint",
+ args: [ "--noout", fileName ]
+ }, function( err, result ) {
+ if ( err ) {
+ grunt.verbose.error();
+ grunt.log.error( err );
+ fileDone();
+ return;
+ }
+ grunt.verbose.ok();
+ fileDone();
+ });
+ }, function() {
+ if ( task.errorCount ) {
+ grunt.warn( "Task \"" + task.name + "\" failed." );
+ taskDone();
+ return;
+ }
+ grunt.log.writeln( "Lint free files: " + entryFiles.length );
+ taskDone();
+ });
+});
+
+grunt.registerTask( "build-entries", function() {
+ var task = this,
+ taskDone = task.async(),
+ // TODO make `entry` a custom post type instead of (ab)using `post`?
+ targetDir = grunt.config( "wordpress.dir" ) + "/posts/post/";
+
+ grunt.file.mkdir( targetDir );
+
+ grunt.utils.async.forEachSeries( entryFiles, function( fileName, fileDone ) {
+ grunt.verbose.write( "Reading " + fileName + "..." );
+ grunt.utils.spawn({
+ cmd: "xsltproc",
+ args: [ "entries2html.xsl", fileName ]
+ }, function( err, result ) {
+ var targetFileName;
+ if ( err ) {
+ grunt.verbose.error();
+ grunt.log.error( err );
+ fileDone();
+ return;
+ }
+ grunt.verbose.ok();
+ targetFileName = targetDir + path.basename( fileName );
+ targetFileName = targetFileName.substr( 0, targetFileName.length - "xml".length ) + "html";
+ grunt.file.write( targetFileName, result );
+ fileDone();
+ });
+ }, function() {
+ if ( task.errorCount ) {
+ grunt.warn( "Task \"" + task.name + "\" failed." );
+ taskDone();
+ return;
+ }
+ grunt.log.writeln( "Built " + entryFiles.length + " entries." );
+ taskDone();
+ });
+});
+
+grunt.registerTask( "build-categories", function() {
+ var task = this,
+ taskDone = task.async(),
+ categories = {},
+ outFilename = grunt.config( "wordpress.dir" ) + "/taxonomies.json";
+
+ grunt.utils.spawn({
+ cmd: "xsltproc",
+ args: [ "--output", "taxonomies.xml", "cat2tax.xsl", "categories.xml" ]
+ }, function( err, result ) {
+ if ( err ) {
+ grunt.verbose.error();
+ grunt.log.error( err );
+ taskDone();
+ return;
+ }
+ grunt.utils.spawn({
+ cmd: "xsltproc",
+ args: [ "--output", outFilename, "xml2json.xsl", "taxonomies.xml" ]
+ }, function( err, result ) {
+ if ( err ) {
+ grunt.verbose.error();
+ grunt.log.error( err );
+ taskDone();
+ return;
+ }
+ fs.unlinkSync( "taxonomies.xml" );
+ grunt.verbose.ok();
+ taskDone();
+ });
+ });
+});
+
+grunt.registerTask( "build-resources", function() {
+ var task = this,
+ taskDone = task.async(),
+ targetDir = grunt.config( "wordpress.dir" ) + "/resources/";
+
+ grunt.file.mkdir( targetDir );
+
+ grunt.utils.async.forEachSeries( resourceFiles, function( fileName, fileDone ) {
+ grunt.file.copy( fileName, targetDir + path.basename( fileName ) );
+ fileDone();
+ }, function() {
+ if ( task.errorCount ) {
+ grunt.warn( "Task \"" + task.name + "\" failed." );
+ taskDone();
+ return;
+ }
+ grunt.log.writeln( "Built " + resourceFiles.length + " resources." );
+ taskDone();
+ });
+});
+
+grunt.registerTask( "default", "build-wordpress" );
+grunt.registerTask( "build-wordpress", "clean lint xmllint build-entries build-categories build-resources" );
+grunt.registerTask( "deploy", "wordpress-deploy" );
+
+};
View
31 package.json
@@ -0,0 +1,31 @@
+{
+ "name": "api.qunitjs.com",
+ "title": "QUnit API Docs",
+ "description": "API reference documentation for QUnit",
+ "version": "1.6.0",
+ "homepage": "https://github.comom/jquery/api.qunitjs.com",
+ "author": {
+ "name": "jQuery Foundation (http://jquery.org/)"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/jquery/api.qunitjs.com.git"
+ },
+ "bugs": {
+ "url": "https://github.com/jquery/api.qunitjs.com/issues"
+ },
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://www.opensource.org/licenses/MIT"
+ }
+ ],
+ "dependencies": {
+ "grunt": "0.3.x",
+ "grunt-clean": "0.1.0",
+ "grunt-wordpress": "0.1.1",
+ "pygmentize": "0.5.1"
+ },
+ "devDependencies": {},
+ "keywords": []
+}
View
183 xml2json.xsl
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!--
+ Copyright (c) 2006, Doeke Zanstra
+ All rights reserved.
+
+ Note: This is a hacked version of xml2json.xslt
+ **** All numbers will be output as strings to prevent version numbers like
+ **** 1.0 changing to 1
+ **** If you want the original version, get it from
+ **** http://code.google.com/p/xml2json-xslt/
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer. Redistributions in binary
+ form must reproduce the above copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other materials provided with
+ the distribution.
+
+ Neither the name of the dzLib nor the names of its contributors may be used to
+ endorse or promote products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ THE POSSIBILITY OF SUCH DAMAGE.
+-->
+
+ <xsl:output indent="no" omit-xml-declaration="yes" method="text" encoding="UTF-8" media-type="text/x-json"/>
+ <xsl:strip-space elements="*"/>
+ <!--contant-->
+ <xsl:variable name="d">0123456789</xsl:variable>
+
+ <!-- ignore document text -->
+ <xsl:template match="text()[preceding-sibling::node() or following-sibling::node()]"/>
+
+ <!-- string -->
+ <xsl:template match="text()">
+ <xsl:call-template name="escape-string">
+ <xsl:with-param name="s" select="."/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <!-- Main template for escaping strings; used by above template and for object-properties
+ Responsibilities: placed quotes around string, and chain up to next filter, escape-bs-string -->
+ <xsl:template name="escape-string">
+ <xsl:param name="s"/>
+ <xsl:text>"</xsl:text>
+ <xsl:call-template name="escape-bs-string">
+ <xsl:with-param name="s" select="$s"/>
+ </xsl:call-template>
+ <xsl:text>"</xsl:text>
+ </xsl:template>
+
+ <!-- Escape the backslash (\) before everything else. -->
+ <xsl:template name="escape-bs-string">
+ <xsl:param name="s"/>
+ <xsl:choose>
+ <xsl:when test="contains($s,'\')">
+ <xsl:call-template name="escape-quot-string">
+ <xsl:with-param name="s" select="concat(substring-before($s,'\'),'\\')"/>
+ </xsl:call-template>
+ <xsl:call-template name="escape-bs-string">
+ <xsl:with-param name="s" select="substring-after($s,'\')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="escape-quot-string">
+ <xsl:with-param name="s" select="$s"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- Escape the double quote ("). -->
+ <xsl:template name="escape-quot-string">
+ <xsl:param name="s"/>
+ <xsl:choose>
+ <xsl:when test="contains($s,'&quot;')">
+ <xsl:call-template name="encode-string">
+ <xsl:with-param name="s" select="concat(substring-before($s,'&quot;'),'\&quot;')"/>
+ </xsl:call-template>
+ <xsl:call-template name="escape-quot-string">
+ <xsl:with-param name="s" select="substring-after($s,'&quot;')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="encode-string">
+ <xsl:with-param name="s" select="$s"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- Replace tab, line feed and/or carriage return by its matching escape code. Can't escape backslash
+ or double quote here, because they don't replace characters (&#x0; becomes \t), but they prefix
+ characters (\ becomes \\). Besides, backslash should be seperate anyway, because it should be
+ processed first. This function can't do that. -->
+ <xsl:template name="encode-string">
+ <xsl:param name="s"/>
+ <xsl:choose>
+ <!-- tab -->
+ <xsl:when test="contains($s,'&#x9;')">
+ <xsl:call-template name="encode-string">
+ <xsl:with-param name="s" select="concat(substring-before($s,'&#x9;'),'\t',substring-after($s,'&#x9;'))"/>
+ </xsl:call-template>
+ </xsl:when>
+ <!-- line feed -->
+ <xsl:when test="contains($s,'&#xA;')">
+ <xsl:call-template name="encode-string">
+ <xsl:with-param name="s" select="concat(substring-before($s,'&#xA;'),'\n',substring-after($s,'&#xA;'))"/>
+ </xsl:call-template>
+ </xsl:when>
+ <!-- carriage return -->
+ <xsl:when test="contains($s,'&#xD;')">
+ <xsl:call-template name="encode-string">
+ <xsl:with-param name="s" select="concat(substring-before($s,'&#xD;'),'\r',substring-after($s,'&#xD;'))"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise><xsl:value-of select="$s"/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- number (no support for javascript mantise) -->
+ <xsl:template match="text()[not(string(number())='NaN')]">
+ &quot;<xsl:value-of select="."/>&quot;
+ </xsl:template>
+
+ <!-- boolean, case-insensitive -->
+ <xsl:template match="text()[translate(.,'TRUE','true')='true']">true</xsl:template>
+ <xsl:template match="text()[translate(.,'FALSE','false')='false']">false</xsl:template>
+
+ <!-- item:null -->
+ <xsl:template match="*[count(child::node())=0]">
+ <xsl:call-template name="escape-string">
+ <xsl:with-param name="s" select="local-name()"/>
+ </xsl:call-template>
+ <xsl:text>:null</xsl:text>
+ <xsl:if test="following-sibling::*">,</xsl:if>
+ </xsl:template>
+
+ <!-- object -->
+ <xsl:template match="*" name="base">
+ <xsl:if test="not(preceding-sibling::*)">{</xsl:if>
+ <xsl:call-template name="escape-string">
+ <xsl:with-param name="s" select="name()"/>
+ </xsl:call-template>
+ <xsl:text>:</xsl:text>
+ <xsl:apply-templates select="child::node()"/>
+ <xsl:if test="following-sibling::*">,</xsl:if>
+ <xsl:if test="not(following-sibling::*)">}</xsl:if>
+ </xsl:template>
+
+ <!-- array -->
+ <xsl:template match="*[count(../*[name(../*)=name(.)])=count(../*) and count(../*)&gt;1]">
+ <xsl:if test="not(preceding-sibling::*)">[</xsl:if>
+ <xsl:choose>
+ <xsl:when test="not(child::node())">
+ <xsl:text>null</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="child::node()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="following-sibling::*">,</xsl:if>
+ <xsl:if test="not(following-sibling::*)">]</xsl:if>
+ </xsl:template>
+
+ <!-- convert root element to an anonymous container -->
+ <xsl:template match="/">
+ <xsl:apply-templates select="node()"/>
+ </xsl:template>
+
+</xsl:stylesheet>

0 comments on commit aa89f39

Please sign in to comment.