| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417 |
- /* jshint node:true */
- module.exports = function(grunt) {
- 'use strict';
- var path = require('path');
- var basedir = path.dirname(grunt.file.findup('Gruntfile.js'));
- var theme_name = grunt.file.readJSON(path.join(basedir, 'package.json')).name;
- var builddir = path.join(basedir, 'build', theme_name);
- var secrets_path = grunt.file.findup('secrets.json');
- var secrets = secrets_path ? require( secrets_path ) : {
- livepath: '',
- ssh_host: '',
- export_api_url: '',
- export_api_key: ''
- };
- function exportApiCall(action, callback) {
- var http = require('https');
- var url = secrets.export_api_url + secrets.export_api_key + '/' + action;
- grunt.log.writeln( url );
- http.get(url, function(res) {
- var body = '';
- res.on('data', function(chunk) {
- body += chunk;
- });
- res.on('end', function() {
- var response = body;
- try {
- response = JSON.parse(body.trim());
- } catch(e) {}
- if ( 'error' in response ) {
- return callback( response.error );
- }
- callback(null, response);
- });
- }).on('error', function(err) {
- callback(err);
- });
- }
- grunt.registerTask('scp-download-samples', function() {
- var done = this.async();
- var files = [
- ['cache/all.css', 'samples/all-default.css'],
- ], fi = -1;
- var next = function() {
- if(++fi >= files.length)
- return done();
- grunt.log.writeln('Downloading '+files[fi][0]+' to '+files[fi][1]);
- var exec = require('child_process').exec;
- var scp = grunt.template.process("scp <%= ssh_host %>:<%= remotepath %> <%= localpath %>", {
- data: {
- ssh_host: secrets.ssh_host,
- remotepath: path.join( grunt.template.process(secrets.livepath, grunt.config()), files[fi][0] ),
- localpath: path.join(builddir, files[fi][1]),
- }
- });
- exec(scp, function(error) {
- if(error) return done(grunt.util.error(error));
- next();
- });
- };
- next();
- });
- grunt.registerTask('download-layerslider', function() {
- var done = this.async();
- var exec = require('child_process').exec;
- var fs = require("fs");
- var localdir = path.join(builddir, 'samples/layerslider/');
- grunt.file.mkdir(localdir);
- grunt.log.writeln('Downloading layerslider-export.zip');
- var temp_file = '/tmp/layerslider-export.zip';
- exportApiCall( 'layerslider', function(err, res) {
- if(err) return done(false);
- var curl = "curl -o " + temp_file + " " + res.exported;
- exec(curl, function(error) {
- if(error) return done(grunt.util.error(error));
- var data = grunt.file.read( temp_file, { encoding: 'binary' } );
- var Zip = require('node-zip');
- var spread = new Zip( data, { base64: false, checkCRC32: true});
- Object.keys(spread.files).forEach( function( f ) {
- if ( ! f.match( /json$/ ) ) {
- return true;
- }
- var single = new Zip();
- single.file( f, spread.file(f).asText() );
- var data = single.generate( { base64: false } );
- var spath = path.join( localdir, f.split( '/' )[0] );
- grunt.file.mkdir( spath );
- fs.writeFileSync( path.join( spath, 'slider.zip' ), data, 'binary' );
- grunt.file.copy( path.join( basedir, 'samples', 'small.png' ), path.join( spath, 'preview.png' ) );
- } );
- done();
- });
- });
- });
- grunt.registerTask('download-revslider', function() {
- var done = this.async();
- exportApiCall('revslider', function(err, res) {
- if(err) return done(grunt.util.error("API error:"+err));
- if ( res.length === 0 ) {
- done( grunt.util.error( 'No sliders found, possibly something went wrong.' ) );
- console.error( res );
- return;
- }
- var exec = require('child_process').exec;
- var localdir = path.join(builddir, 'samples/revslider/');
- grunt.file.mkdir(localdir);
- var ri = -1;
- var next = function() {
- if(++ri >= res.length)
- return done();
- grunt.log.writeln('Downloading '+res[ri]);
- var url = secrets.export_api_url + secrets.export_api_key + '/revslider-single/' + res[ri];
- var curl = "curl -o '" + path.join(localdir, res[ri] + '.zip') + "' '" + url + "'";
- exec(curl, function(error) {
- if(error) return done(grunt.util.error(error));
- next();
- });
- };
- next();
- });
- });
- grunt.registerTask('download-ninjaforms', function() {
- var done = this.async();
- exportApiCall('ninja-forms-list', function(err, res) {
- if ( err ) {
- done( grunt.util.error("API error: "+err ) );
- return;
- }
- if ( res.length === 0 ) {
- done( grunt.util.error( 'No forms found, possibly something went wrong.' ) );
- console.error( res );
- return;
- }
- var exec = require('child_process').exec;
- var localdir = path.join(builddir, 'samples/ninja-forms/');
- grunt.file.mkdir(localdir);
- var ri = -1;
- var next = function() {
- if(++ri >= res.length)
- return done();
- grunt.log.writeln('Downloading '+res[ri]);
- var url = secrets.export_api_url + secrets.export_api_key + '/ninja-forms-download/' + res[ri];
- var curl = "curl -o " + path.join(localdir, res[ri] + '.nff') + " " + url;
- exec(curl, function(error) {
- if(error) return done(grunt.util.error(error));
- next();
- });
- };
- next();
- });
- });
- grunt.registerTask('download-booked', function() {
- var done = this.async();
- exportApiCall('booked-settings', function(err, res) {
- if ( err ) {
- done( grunt.util.error("API error: " + err ) );
- return;
- }
- var exec = require('child_process').exec;
- var localpath = path.join(builddir, 'samples/booked-settings.json');
- grunt.file.write( localpath, JSON.stringify( res ) );
- done();
- });
- });
- grunt.registerTask('download-gmp-easy', function() {
- var done = this.async();
- var exec = require('child_process').exec;
- var localdir = path.join(builddir, 'samples/');
- var url = secrets.export_api_url + secrets.export_api_key + '/google-maps-easy-download';
- var curl = "curl -o " + path.join(localdir, 'gmp-easy.csv') + " " + url;
- grunt.log.writeln( url );
- exec(curl, function(error) {
- if ( error ) {
- return done( grunt.util.error( error ) );
- }
- done();
- });
- });
- grunt.registerTask('download-json', function( name ) {
- var done = this.async();
- exportApiCall( name, function(err, res) {
- if ( err ) {
- done( grunt.util.error("API error: " + err ) );
- return;
- }
- var exec = require('child_process').exec;
- var localpath = path.join(builddir, 'samples/', name + '.json');
- grunt.file.write( localpath, JSON.stringify( res ) )
- done();
- });
- });
- grunt.registerTask('check-api', function() {
- var done = this.async();
- exportApiCall('api-version', function(err, res) {
- if(err) return done(false);
- if(!('version' in res) || res.version < grunt.config('pkg').vamtamApi)
- return done(grunt.util.error("Old Export API. Please update the plugin to version " + grunt.config('pkg').vamtamApi));
- done();
- });
- });
- grunt.registerTask('download-sidebars-options', function() {
- var done = this.async();
- var parts = [
- ['sidebars', 'sidebars', 'sidebars'],
- ['default-options-beaver', 'default-options.php', 'options'],
- ], pi = -1;
- var next = function() {
- if(++pi >= parts.length)
- return done();
- grunt.log.writeln('Downloading '+parts[pi][1]);
- exportApiCall(parts[pi][0], function(err, res) {
- if(err) return done(false);
- grunt.file.write(path.join(builddir, "samples", parts[pi][1]), res[parts[pi][2]].replace(/(\r\n|\r|\n)/g, "\n"));
- next();
- });
- };
- next();
- });
- grunt.registerTask('download-content-xml', function() {
- var done = this.async();
- exportApiCall('content.xml-beaver', function(err, res) {
- if(err) return done(grunt.util.error("API error:"+err));
- console.log(res);
- var exec = require('child_process').exec;
- var curl = "curl -o "+path.join(builddir, 'samples', 'content.xml')+" "+res.download_url;
- exec(curl, function(err) {
- if(err) return done(grunt.util.error(err));
- grunt.log.writeln("saved content.xml");
- done();
- });
- });
- });
- grunt.registerTask('download-images', function() {
- var done = this.async();
- var localdir = path.join(builddir, 'samples/images/');
- grunt.file.mkdir(localdir);
- exportApiCall('image-replacements', function(err, res) {
- if(!('images' in res))
- return done(grunt.util.error('No image info.'));
- var images = res.images.filter(function(s) { return s; }),
- i = 0;
- var next = function() {
- if(i >= images.length) return done();
- var image_url = images[i++];
- var localpath = path.join(localdir, path.basename(image_url));
- var exec = require('child_process').exec;
- var curl = "curl -o "+localpath+" "+image_url;
- exec(curl, function(err) {
- if(err) return done(grunt.util.error(err));
- grunt.log.writeln("saved: "+image_url);
- next();
- });
- };
- next();
- });
- });
- grunt.registerMultiTask('add-textdomain', function() {
- var files = grunt.file.expand(this.data);
- for(var fi in files) {
- grunt.file.write(files[fi],
- grunt.file.read(files[fi])
- .replace( /,\s*(['"])(vamtam|wpv)\1/g, ", '"+theme_name+"'")
- .replace( /(load_theme_textdomain|is_textdomain_loaded)\(\s*'(vamtam|wpv)'/g, "$1( '"+theme_name+"'")
- );
- }
- });
- grunt.registerTask('build-plugins', function() {
- var done = this.async();
- var prefix = 'vamtam/plugins/';
- var plugins = grunt.file.expand([
- prefix + '*',
- '!'+ prefix + '*.*',
- ]);
- plugins.forEach(function(dirname) {
- var plugin_name = dirname.replace(prefix, '');
- grunt.config.set('compress.plugin-'+plugin_name, {
- options: {
- archive: prefix + plugin_name + '.zip',
- mode: 'zip',
- pretty: true,
- level: 9,
- },
- files: [{
- expand: true,
- src: [
- plugin_name + '/**/*',
- '!' + plugin_name + '/node_modules/**',
- ],
- cwd: 'vamtam/plugins/'
- }]
- });
- grunt.task.run('compress:plugin-'+plugin_name);
- });
- done();
- });
- };
|