Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Pulled in grunt wordpress deploy bits from api.jquery.com.

  • Loading branch information...
commit 0231e6fa78a7a555e11e51bfac725493d0e071da 1 parent f5a5781
@rdworth rdworth authored
View
9 .gitignore
@@ -0,0 +1,9 @@
+dist
+node_modules
+config.json
+.project
+*~
+*.diff
+*.patch
+.DS_Store
+.settings
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
15 categories.xml
@@ -0,0 +1,15 @@
+<categories>
+ <category name="Effects" slug="effects">
+ <desc></desc>
+ </category>
+ <category name="Interactions" slug="interactions">
+ <desc></desc>
+ </category>
+ <category name="Uncategorized" slug="Uncategorized"/>
+ <category name="Utilities" slug="utilities">
+ <desc></desc>
+ </category>
+ <category name="Widgets" slug="widgets">
+ <desc></desc>
+ </category>
+</categories>
View
5 config-sample.json
@@ -0,0 +1,5 @@
+{
+ "url": "wordpress.dev",
+ "username": "admin",
+ "password": "admin"
+}
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
30 package.json
@@ -0,0 +1,30 @@
+{
+ "name": "api.jqueryui.com",
+ "title": "jQuery UI API Docs",
+ "description": "API reference documentation for jQuery UI.",
+ "version": "1.8.20",
+ "homepage": "https://github.com/jquery/api.jqueryui.com",
+ "author": {
+ "name": "jQuery Foundation (http://jquery.org/)"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/jquery/api.jqueryui.com.git"
+ },
+ "bugs": {
+ "url": "https://github.com/jquery/api.jqueryui.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.0"
+ },
+ "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>
Please sign in to comment.
Something went wrong with that request. Please try again.