Skip to content

Commit f9d096d

Browse files
committed
Get demos to work. Start jsonp api work.
1 parent 7425781 commit f9d096d

File tree

6 files changed

+147
-4
lines changed

6 files changed

+147
-4
lines changed

entries2html.xsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@
392392
<xsl:value-of select="position() - 1"/>
393393
</xsl:attribute>
394394
<h4><xsl:if test="$number-examples &gt; 1">Example: </xsl:if><span class="desc"><xsl:value-of select="desc" /></span></h4>
395-
<pre><code data-linenos="true"><xsl:choose>
395+
<pre><code class="demo-code"><xsl:choose>
396396
<xsl:when test="html">&lt;!DOCTYPE html&gt;
397397
&lt;html&gt;
398398
&lt;head&gt;<xsl:if test="css/text()">

grunt.js

Lines changed: 87 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ var // files
55
pageFiles = grunt.file.expandFiles( "pages/*.html" ),
66
entryFiles = grunt.file.expandFiles( "entries/*.xml" ),
77
noteFiles = grunt.file.expandFiles( "notes/*.xml" ),
8-
8+
path = require( "path" ),
9+
rimraf = require( "rimraf" ),
910
xmlFiles = [].concat( entryFiles, noteFiles, "cat2tax.xsl", "categories.xml", "entries2html.xsl", "xml2json.xsl" );
1011

1112
grunt.loadNpmTasks( "grunt-clean" );
@@ -39,6 +40,91 @@ grunt.initConfig({
3940
}, grunt.file.readJSON( "config.json" ) )
4041
});
4142

43+
44+
grunt.registerMultiTask( "build-pages", "Process html files as pages", function() {
45+
var task = this,
46+
taskDone = task.async(),
47+
files = this.data,
48+
targetDir = grunt.config( "wordpress.dir" ) + "/posts/page/";
49+
50+
grunt.file.mkdir( targetDir );
51+
52+
grunt.utils.async.forEachSeries( files, function( fileName, fileDone ) {
53+
var targetFileName = targetDir + fileName.replace( /^.+?\//, "" );
54+
55+
grunt.verbose.write( "Processing " + fileName + "..." );
56+
grunt.file.copy( fileName, targetFileName );
57+
fileDone();
58+
59+
}, function() {
60+
if ( task.errorCount ) {
61+
grunt.warn( "Task \"" + task.name + "\" failed." );
62+
taskDone();
63+
return;
64+
}
65+
grunt.log.writeln( "Built " + files.length + " pages." );
66+
taskDone();
67+
});
68+
});
69+
70+
grunt.registerMultiTask( "build-xml-entries", "Process API xml files with xsl", function() {
71+
var task = this,
72+
taskDone = task.async(),
73+
files = this.data,
74+
// TODO make `entry` a custom post type instead of (ab)using `post`?
75+
targetDir = grunt.config( "wordpress.dir" ) + "/posts/post/";
76+
77+
grunt.file.mkdir( targetDir );
78+
79+
grunt.utils.async.forEachSeries( files, function( fileName, fileDone ) {
80+
grunt.verbose.write( "Transforming (pass 1: preproc-xinclude.xsl) " + fileName + "..." );
81+
grunt.utils.spawn({
82+
cmd: "xsltproc",
83+
args: [ "preproc-xinclude.xsl", fileName ]
84+
}, function( err, pass1result ) {
85+
if ( err ) {
86+
grunt.verbose.error();
87+
grunt.log.error( err );
88+
fileDone();
89+
return;
90+
}
91+
grunt.verbose.ok();
92+
93+
var targetXMLFileName = "entries_tmp/" + path.basename( fileName );
94+
95+
grunt.file.write( targetXMLFileName, pass1result );
96+
97+
grunt.verbose.write( "Transforming (pass 2: entries2html.xsl) " + fileName + "..." );
98+
grunt.utils.spawn({
99+
cmd: "xsltproc",
100+
args: [ "--xinclude", "entries2html.xsl", targetXMLFileName ]
101+
}, function( err, pass2result ) {
102+
if ( err ) {
103+
grunt.verbose.error();
104+
grunt.log.error( err );
105+
fileDone();
106+
return;
107+
}
108+
grunt.verbose.ok();
109+
110+
var targetHTMLFileName = targetDir + path.basename( fileName );
111+
targetHTMLFileName = targetHTMLFileName.substr( 0, targetHTMLFileName.length - "xml".length ) + "html";
112+
grunt.file.write( targetHTMLFileName, pass2result );
113+
fileDone();
114+
});
115+
});
116+
}, function() {
117+
if ( task.errorCount ) {
118+
grunt.warn( "Task \"" + task.name + "\" failed." );
119+
taskDone();
120+
return;
121+
}
122+
rimraf.sync( "entries_tmp" );
123+
grunt.log.writeln( "Built " + files.length + " entries." );
124+
taskDone();
125+
});
126+
});
127+
42128
grunt.registerTask( "default", "build-wordpress" );
43129
grunt.registerTask( "build-wordpress", "clean lint xmllint build-pages build-xml-entries build-xml-categories build-resources" );
44130
grunt.registerTask( "tidy", "xmllint xmltidy" );

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@
2323
"dependencies": {
2424
"grunt": "0.3.x",
2525
"grunt-clean": "0.1.0",
26-
"grunt-wordpress": "1.0.0",
27-
"grunt-jquery-content": "0.2.2"
26+
"grunt-wordpress": "1.0.1",
27+
"grunt-jquery-content": "0.2.2",
28+
"rimraf": "2.0.2"
2829
},
2930
"devDependencies": {},
3031
"keywords": []

pages/jsonp.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<script>
2+
{
3+
"title": "jsonp",
4+
"pageTemplate": "api.json.php"
5+
}
6+
</script>

resources/demo.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
$("code.demo-code").each(function(index) {
2+
var $example = $(this),
3+
$demo = $('div.code-demo').eq(index);
4+
5+
var source = $example.html()
6+
.replace(/<\/?a.*?>/ig, "")
7+
.replace(/<\/?strong.*?>/ig, "")
8+
.replace(/&lt;/g, "<").replace(/&gt;/g, ">")
9+
.replace(/&amp;/g, "&");
10+
11+
var iframe = document.createElement("iframe");
12+
iframe.src = "/resources/index-blank.html";
13+
iframe.width = "100%";
14+
iframe.height = $demo.attr("rel") || "125";
15+
iframe.style.border = "none";
16+
$demo.html(iframe);
17+
18+
var doc = iframe.contentDocument ||
19+
(iframe.contentWindow && iframe.contentWindow.document) ||
20+
iframe.document ||
21+
null;
22+
23+
if (doc == null) {
24+
return true;
25+
}
26+
var example = $example.text();
27+
28+
var reTmpl = /((?:<|>|&gt;|&lt;)\/?)tmpl/g;
29+
if ( reTmpl.test(example) ) {
30+
$example.text( example.replace(reTmpl,'$1script') );
31+
}
32+
33+
source = source
34+
.replace(/<script>([^<])/g,"<script>window.onload = (function(){\r\ntry{$1")
35+
.replace(/([^>])<\/sc/g, "$1\r\n}catch(e){}});</sc")
36+
.replace(/(<\/?)tmpl/g,'$1script');
37+
38+
source = source
39+
.replace("</head>", "<style>html,body{border:0; margin:0; padding:0;}</style></head>");
40+
41+
doc.open();
42+
doc.write( source );
43+
doc.close();
44+
45+
});
46+
47+
48+
if (typeof prettyPrint == 'function') {
49+
prettyPrint();
50+
}

resources/index-blank.html

Whitespace-only changes.

0 commit comments

Comments
 (0)