Repository: Tmeister/wppb-gen-site Branch: master Commit: 0f9fc0a285e5 Files: 23 Total size: 98.0 KB Directory structure: gitextract_nhld34y9/ ├── .github/ │ └── FUNDING.yml ├── .gitignore ├── .vscode/ │ └── launch.json ├── Procfile ├── README.md ├── app.json ├── package.json ├── public/ │ ├── css/ │ │ ├── ie/ │ │ │ ├── PIE.htc │ │ │ ├── backgroundsize.min.htc │ │ │ ├── html5shiv.js │ │ │ └── v8.css │ │ ├── skel.css │ │ ├── style-mobile.css │ │ ├── style-mobilep.css │ │ ├── style-narrow.css │ │ ├── style-narrower.css │ │ ├── style-normal.css │ │ ├── style-wide.css │ │ └── style.css │ ├── fonts/ │ │ └── FontAwesome.otf │ └── js/ │ └── init.js ├── server.js └── views/ └── index.ejs ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/FUNDING.yml ================================================ # These are supported funding model platforms patreon: tcoding ================================================ FILE: .gitignore ================================================ node_modules tmp source npm-debug.log .idea ================================================ FILE: .vscode/launch.json ================================================ { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Launch Program", "program": "${workspaceFolder}/server.js" } ] } ================================================ FILE: Procfile ================================================ web: node server.js ================================================ FILE: README.md ================================================ # IMPORTANT - This version is not used and maintained anymore The new generator site repo can be found at https://github.com/Tmeister/wppb-generator # WordPress Plugin Boilerplate Generator A Node.js small application to generate a custom zip file based on the WPPB by Tom McFarlin ( [wppb.io](http://wppb.io) ). This app will find and replace plugin-name, Plugin_Name, plugin_name and author information from the original code and will send a zip file with the new code, ready to use. ## Running Locally Make sure you have [Node.js](http://nodejs.org/) installed. ```sh $ git clone git@github.com:Tmeister/wppb-gen-site.git # or clone your own fork $ cd wppb-gen-site $ npm install $ node server ``` Your app should now be running on [localhost:3000](http://localhost:3000/). Comments and requests at [@tmeister](https://twitter.com/tmeister) or noone at tmeister dot net ================================================ FILE: app.json ================================================ { "name": "Wppb Online Generator", "description": "A wppb online generator", "repository": "https://github.com/tmeister/wppb-gen", "logo": "http://node-js-sample.herokuapp.com/node.svg", "keywords": ["node", "express", "static"] } ================================================ FILE: package.json ================================================ { "name": "wppb-gen", "version": "0.1.0", "description": "wppb-gen", "main": "index.js", "scripts": { "start": "node index.js" }, "dependencies": { "body-parser": "^1.12.4", "cron": "^1.0.9", "easy-zip": "0.0.4", "ejs": "^2.3.1", "express": "4.16.4", "fs-extra": "7.0.1", "github-download": "0.5.0", "mime": "^2.4.0", "replace": "^1.1.0", "rimraf": "^2.4.0", "universal-analytics": "^0.4.20" }, "engines": { "node": "10.15.x" }, "repository": { "type": "git", "url": "https://github.com/tmeister/wppb-gen" }, "keywords": [ "node", "heroku", "express" ], "license": "MIT" } ================================================ FILE: public/css/ie/PIE.htc ================================================ ================================================ FILE: public/css/ie/backgroundsize.min.htc ================================================ ================================================ FILE: public/css/ie/html5shiv.js ================================================ /* HTML5 Shiv v3.6.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed */ (function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| "undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video",version:"3.6.2",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment(); for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d * { position: relative; z-index: 1; } #header .logo { -ms-behavior: url("css/ie/PIE.htc"); } /* Footer */ #footer { background-image: none !important; margin-top: 0 !important; padding: 4em 0 !important; color: white; } /* Main */ #main { padding: 4em 0; } ================================================ FILE: public/css/skel.css ================================================ /* Resets (http://meyerweb.com/eric/tools/css/reset/ | v2.0 | 20110126 | License: none (public domain)) */ html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block;}body{line-height:1;}ol,ul{list-style:none;}blockquote,q{quotes:none;}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none;}table{border-collapse:collapse;border-spacing:0;}body{-webkit-text-size-adjust:none} /* Box Model */ *, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } /* Container */ body { /* min-width: (containers) */ min-width: 51em; } .container { margin-left: auto; margin-right: auto; /* width: (containers) */ width: 51em; } /* Modifiers */ /* 125% */ .container.\31 25\25 { width: 100%; /* max-width: (containers * 1.25) */ max-width: 63.75em; /* min-width: (containers) */ min-width: 51em; } /* 75% */ .container.\37 5\25 { /* width: (containers * 0.75) */ width: 38.25em; } /* 50% */ .container.\35 0\25 { /* width: (containers * 0.50) */ width: 25.5em; } /* 25% */ .container.\32 5\25 { /* width: (containers * 0.25) */ width: 12.75em; } /* Grid */ .row { border-bottom: solid 1px transparent; } .row > * { float: left; } .row:after, .row:before { content: ''; display: block; clear: both; height: 0; } .row.uniform > * > :first-child { margin-top: 0; } .row.uniform > * > :last-child { margin-bottom: 0; } /* Gutters */ /* Normal */ .row > * { /* padding: (gutters.horizontal) 0 0 (gutters.vertical) */ padding: 30px 0 0 30px; } .row { /* margin: -(gutters.horizontal) 0 0 -(gutters.vertical) */ margin: -30px 0 0 -30px; } .row.uniform > * { /* padding: (gutters.vertical) 0 0 (gutters.vertical) */ padding: 30px 0 0 30px; } .row.uniform { /* margin: -(gutters.vertical) 0 0 -(gutters.vertical) */ margin: -30px 0 0 -30px; } /* 200% */ .row.\32 00\25 > * { /* padding: (gutters.horizontal) 0 0 (gutters.vertical) */ padding: 60px 0 0 60px; } .row.\32 00\25 { /* margin: -(gutters.horizontal) 0 0 -(gutters.vertical) */ margin: -60px 0 0 -60px; } .row.uniform.\32 00\25 > * { /* padding: (gutters.vertical) 0 0 (gutters.vertical) */ padding: 60px 0 0 60px; } .row.uniform.\32 00\25 { /* margin: -(gutters.vertical) 0 0 -(gutters.vertical) */ margin: -60px 0 0 -60px; } /* 150% */ .row.\31 50\25 > * { /* padding: (gutters.horizontal) 0 0 (gutters.vertical) */ padding: 45px 0 0 45px; } .row.\31 50\25 { /* margin: -(gutters.horizontal) 0 0 -(gutters.vertical) */ margin: -45px 0 0 -45px; } .row.uniform.\31 50\25 > * { /* padding: (gutters.vertical) 0 0 (gutters.vertical) */ padding: 45px 0 0 45px; } .row.uniform.\31 50\25 { /* margin: -(gutters.vertical) 0 0 -(gutters.vertical) */ margin: -45px 0 0 -45px; } /* 50% */ .row.\35 0\25 > * { /* padding: (gutters.horizontal) 0 0 (gutters.vertical) */ padding: 15px 0 0 15px; } .row.\35 0\25 { /* margin: -(gutters.horizontal) 0 0 -(gutters.vertical) */ margin: -15px 0 0 -15px; } .row.uniform.\35 0\25 > * { /* padding: (gutters.vertical) 0 0 (gutters.vertical) */ padding: 15px 0 0 15px; } .row.uniform.\35 0\25 { /* margin: -(gutters.vertical) 0 0 -(gutters.vertical) */ margin: -15px 0 0 -15px; } /* 25% */ .row.\32 5\25 > * { /* padding: (gutters.horizontal) 0 0 (gutters.vertical) */ padding: 7.5px 0 0 7.5px; } .row.\32 5\25 { /* margin: -(gutters.horizontal) 0 0 -(gutters.vertical) */ margin: -7.5px 0 0 -7.5px; } .row.uniform.\32 5\25 > * { /* padding: (gutters.vertical) 0 0 (gutters.vertical) */ padding: 7.5px 0 0 7.5px; } .row.uniform.\32 5\25 { /* margin: -(gutters.vertical) 0 0 -(gutters.vertical) */ margin: -7.5px 0 0 -7.5px; } /* 0% */ .row.\30 \25 > * { /* padding: (gutters.horizontal) 0 0 (gutters.vertical) */ padding: 0; } .row.\30 \25 { /* margin: -(gutters.horizontal) 0 0 -(gutters.vertical) */ margin: 0; } /* Cells */ .\31 2u, .\31 2u\24, .\31 2u\28 1\29, .\31 2u\24\28 1\29 { width: 100%; clear: none; } .\31 1u, .\31 1u\24, .\31 1u\28 1\29, .\31 1u\24\28 1\29 { width: 91.6666666667%; clear: none; } .\31 0u, .\31 0u\24, .\31 0u\28 1\29, .\31 0u\24\28 1\29 { width: 83.3333333333%; clear: none; } .\39 u, .\39 u\24, .\39 u\28 1\29, .\39 u\24\28 1\29 { width: 75%; clear: none; } .\38 u, .\38 u\24, .\38 u\28 1\29, .\38 u\24\28 1\29 { width: 66.6666666667%; clear: none; } .\37 u, .\37 u\24, .\37 u\28 1\29, .\37 u\24\28 1\29 { width: 58.3333333333%; clear: none; } .\36 u, .\36 u\24, .\36 u\28 1\29, .\36 u\24\28 1\29 { width: 50%; clear: none; } .\35 u, .\35 u\24, .\35 u\28 1\29, .\35 u\24\28 1\29 { width: 41.6666666667%; clear: none; } .\34 u, .\34 u\24, .\34 u\28 1\29, .\34 u\24\28 1\29 { width: 33.3333333333%; clear: none; } .\33 u, .\33 u\24, .\33 u\28 1\29, .\33 u\24\28 1\29 { width: 25%; clear: none; } .\32 u, .\32 u\24, .\32 u\28 1\29, .\32 u\24\28 1\29 { width: 16.6666666667%; clear: none; } .\31 u, .\31 u\24, .\31 u\28 1\29, .\31 u\24\28 1\29 { width: 8.3333333333%; clear: none; } .\31 2u\24 + *, .\31 2u\24\28 1\29 + *, .\31 1u\24 + *, .\31 1u\24\28 1\29 + *, .\31 0u\24 + *, .\31 0u\24\28 1\29 + *, .\39 u\24 + *, .\39 u\24\28 1\29 + *, .\38 u\24 + *, .\38 u\24\28 1\29 + *, .\37 u\24 + *, .\37 u\24\28 1\29 + *, .\36 u\24 + *, .\36 u\24\28 1\29 + *, .\35 u\24 + *, .\35 u\24\28 1\29 + *, .\34 u\24 + *, .\34 u\24\28 1\29 + *, .\33 u\24 + *, .\33 u\24\28 1\29 + *, .\32 u\24 + *, .\32 u\24\28 1\29 + *, .\31 u\24 + *, .\31 u\24\28 1\29 + * { clear: left; } .\-11u { margin-left: 91.6666666667% } .\-10u { margin-left: 83.3333333333% } .\-9u { margin-left: 75% } .\-8u { margin-left: 66.6666666667% } .\-7u { margin-left: 58.3333333333% } .\-6u { margin-left: 50% } .\-5u { margin-left: 41.6666666667% } .\-4u { margin-left: 33.3333333333% } .\-3u { margin-left: 25% } .\-2u { margin-left: 16.6666666667% } .\-1u { margin-left: 8.3333333333% } ================================================ FILE: public/css/style-mobile.css ================================================ /* Directive by HTML5 UP html5up.net | @n33co Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) */ /* Basic */ h2 { font-size: 1em; } h3 { font-size: 1em; } /* Section/Article */ header p { font-size: 0.8em; } header.major { margin-bottom: 2em; } header.major br { display: none; } header.major p { font-size: 0.8em; } footer.major { margin-top: 2em; } footer.major br { display: none; } /* List */ ul.actions li { padding: 0 0 0 15px; } ul.actions.vertical li { padding: 15px 0 0 0; } /* Box */ .box { padding: 2em; margin-bottom: 2em; } /* Feature */ .feature { background: white; display: block; height: auto; margin-bottom: 2em; } .feature:last-child { margin-bottom: 0; } .feature:before, .feature:after { display: none; } .feature .image { float: none; height: 15em; width: 100%; } .feature .content { border: solid 1px rgba(224, 224, 224, 0.75); padding: 2em !important; text-align: center; width: 100%; } /* Header */ #header { background-image: url("images/top-1280.svg"), url("images/overlay.png"), url("../images/header.jpg"); background-size: 1280px 184px, auto, cover; padding: 3em 0 7em 0; } #header:before { height: calc(100% - 20px); } #header:after { height: 20px; } #header .logo { font-size: 1.5em; } #header h1 { font-size: 1.25em; } #header p { font-size: 1em; } /* Footer */ #footer { background-image: url("images/bottom-1280.svg"); background-size: 1280px 184px; margin-top: -75px; padding: calc(184px + 2em) 0 2em 0; } #footer:before { height: calc(184px + 2em); } #footer form { padding-bottom: 0; } /* Main */ #main { padding: 2em 0 2em 0; } ================================================ FILE: public/css/style-mobilep.css ================================================ /* Directive by HTML5 UP html5up.net | @n33co Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) */ /* Section/Article */ header.major { padding-left: 1em; padding-right: 1em; } footer.major { padding-left: 1em; padding-right: 1em; } /* List */ ul.icons li { padding: 0.2em; } ul.actions li { display: block; padding: 15px 0 0 0; } ul.actions li:first-child { padding: 0; } /* Button */ input[type="submit"], input[type="reset"], input[type="button"], .button { display: block; width: 100%; } /* Box */ .box { padding: 2em 1em; } /* Feature */ .feature { margin-bottom: 1em; } .feature .content { padding: 2em 1em !important; } /* Main */ #main { padding-left: 1em; padding-right: 1em; } /* Footer */ #footer { margin-top: -100px; padding-left: 1em; padding-right: 1em; } #footer .copyright li { border: 0; display: block; margin: 0; padding: 0.75em 0 0 0; } /* Header */ #header { padding-left: 2em; padding-right: 2em; } #header br { display: none; } ================================================ FILE: public/css/style-narrow.css ================================================ /* Directive by HTML5 UP html5up.net | @n33co Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) */ /* Basic */ body, input, select, textarea { font-size: 12pt; } ================================================ FILE: public/css/style-narrower.css ================================================ /* Directive by HTML5 UP html5up.net | @n33co Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) */ /* Section/Article */ header.major { padding-left: 2em; padding-right: 2em; } footer.major { padding-left: 2em; padding-right: 2em; } ================================================ FILE: public/css/style-normal.css ================================================ /* Directive by HTML5 UP html5up.net | @n33co Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) */ /* Basic */ body, input, select, textarea { font-size: 13pt; } h2 { font-size: 1.35em; } h3 { font-size: 1.15em; } /* Section/Article */ header.major { margin-bottom: 4em; padding: 3em 0; } header.major p { font-size: 1.15em; } footer.major { margin-top: 4em; padding: 3em 0; } /* Box */ .box { padding: 2.5em; margin-bottom: 4em; } /* Feature */ .feature { height: 18em; } .feature .content { padding: 2.5em; } /* Header */ #header { background-attachment: scroll, scroll, scroll; background-image: url("images/top-1600.svg"), url("images/overlay.png"), url("../images/header.jpg"); background-size: 1600px 230px, auto, cover; padding: 6em 0 12em 0; } #header:before { height: calc(100% - 25px); } #header:after { height: 25px; } #header h1 { font-size: 2em; } #header p { font-size: 1.15em; } /* Footer */ #footer { background-image: url("images/bottom-1600.svg"); background-size: 1600px 230px; margin-top: -100px; padding: calc(230px + 4em) 0 6em 0; } #footer:before { height: calc(230px + 4em); } /* Main */ #main { padding: 4em 0 3em 0; } ================================================ FILE: public/css/style-wide.css ================================================ /* Directive by HTML5 UP html5up.net | @n33co Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) */ /* Basic */ body, input, select, textarea { font-size: 14pt; } h2 { font-size: 1.5em; } h3 { font-size: 1.25em; } /* Section/Article */ header.major p { font-size: 1.25em; } /* Header */ #header { padding: 8em 0 16em 0; } #header h1 { font-size: 2.25em; } #header p { font-size: 1.25em; line-height: 1.65em; } ================================================ FILE: public/css/style.css ================================================ @import url("font-awesome.min.css"); @import url("http://fonts.googleapis.com/css?family=Source+Sans+Pro:300,300italic,400,400italic,600,600italic,700,700italic"); /* Directive by HTML5 UP html5up.net | @n33co Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) */ /* Basic */ html, body { height: 100%; } body { background: white; } body.is-loading * { -moz-transition: none !important; -webkit-transition: none !important; -o-transition: none !important; -ms-transition: none !important; transition: none !important; -moz-animation: none !important; -webkit-animation: none !important; -o-animation: none !important; -ms-animation: none !important; animation: none !important; } body, input, select, textarea { color: #6e6e6e; font-family: 'Source Sans Pro', sans-serif; font-size: 16pt; font-weight: 400; line-height: 1.75em; } a { -moz-transition: color 0.2s ease-in-out, border-bottom-color 0.2s ease-in-out; -webkit-transition: color 0.2s ease-in-out, border-bottom-color 0.2s ease-in-out; -o-transition: color 0.2s ease-in-out, border-bottom-color 0.2s ease-in-out; -ms-transition: color 0.2s ease-in-out, border-bottom-color 0.2s ease-in-out; transition: color 0.2s ease-in-out, border-bottom-color 0.2s ease-in-out; border-bottom: dotted 1px; color: #4eb980; text-decoration: none; } a:hover { border-bottom-color: transparent; } strong, b { font-weight: 600; color: #5b5b5b; } em, i { font-style: italic; } p, ul, ol, dl, table, blockquote, form { margin: 0 0 2em 0; } h1, h2, h3, h4, h5, h6 { color: #5b5b5b; font-weight: 700; letter-spacing: 0.125em; line-height: 1.75em; margin-bottom: 1em; text-transform: uppercase; text-align: center; } h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { color: inherit; text-decoration: none; } h2 { font-size: 1.75em; } h3 { font-size: 1.5em; } sub { font-size: 0.8em; position: relative; top: 0.5em; } sup { font-size: 0.8em; position: relative; top: -0.5em; } hr { border: 0; border-top: solid 1px rgba(224, 224, 224, 0.75); margin-bottom: 1.5em; } blockquote { border-left: solid 0.5em rgba(224, 224, 224, 0.75); font-style: italic; padding: 1em 0 1em 2em; } /* Section/Article */ section.special, article.special { text-align: center; } header { text-align: center; } header p { position: relative; top: -1em; color: #888888; text-transform: uppercase; letter-spacing: 0.075em; } header.major { border-bottom-width: 1px; border-color: rgba(224, 224, 224, 0.75); border-style: solid; border-top-width: 1px; margin-bottom: 6em; padding: 4em 0; position: relative; } header.major:before, header.major:after { background: rgba(224, 224, 224, 0.75); content: ''; display: block; height: 1px; left: 0; position: absolute; width: 100%; } header.major:before { top: 10px; } header.major:after { bottom: 10px; } header.major h2 { margin: 0; } header.major p { top: 0; margin: 1.5em 0 0 0; padding: 1.5em 1.5em 0 1.5em; font-size: 1.5em; line-height: 1.75em; border-top: solid 1px rgba(224, 224, 224, 0.75); display: inline-block; } header.major.last { border-bottom: 0; margin-bottom: 0; padding-bottom: 0; } header.major.last:after { display: none; } header.major.last h2 { margin-bottom: 1em; } footer { text-align: center; } footer.major { border-bottom-width: 1px; border-color: rgba(224, 224, 224, 0.75); border-style: solid; border-top-width: 1px; margin-top: 6em; padding: 4em 0; position: relative; } footer.major:before, footer.major:after { background: rgba(224, 224, 224, 0.75); content: ''; display: block; height: 1px; left: 0; position: absolute; width: 100%; } footer.major:before { top: 10px; } footer.major:after { bottom: 10px; } /* Form */ label { display: block; color: #5b5b5b; font-size: 0.8em; font-weight: 700; letter-spacing: 0.125em; line-height: 1.75em; text-transform: uppercase; margin: 0 0 0.5em 0; } input[type="text"], input[type="password"], input[type="email"], select, textarea { -moz-appearance: none; -webkit-appearance: none; -o-appearance: none; -ms-appearance: none; appearance: none; -moz-transition: background-color 0.2s ease-in-out; -webkit-transition: background-color 0.2s ease-in-out; -o-transition: background-color 0.2s ease-in-out; -ms-transition: background-color 0.2s ease-in-out; transition: background-color 0.2s ease-in-out; background: none; border-radius: 4px; border: 0; border: solid 1px rgba(224, 224, 224, 0.75); color: inherit; display: block; outline: 0; padding: 0.75em; text-decoration: none; width: 100%; opacity: 1; } input[type="text"]:focus, input[type="password"]:focus, input[type="email"]:focus, select:focus, textarea:focus { background: rgba(224, 224, 224, 0.15); border-color: #4eb980; } input[type="text"], input[type="password"], input[type="email"], select { line-height: 1em; } textarea { padding: 0.5em 0.75em; } ::-webkit-input-placeholder { color: inherit; opacity: 0.5; position: relative; top: 3px; } :-moz-placeholder { color: inherit; opacity: 0.5; } ::-moz-placeholder { color: inherit; opacity: 0.5; } :-ms-input-placeholder { color: inherit; opacity: 0.5; } .formerize-placeholder { color: rgba(110, 110, 110, 0.5) !important; } .form-error{ color:red; } /* Image */ .image { border: 0; display: inline-block; position: relative; } .image:after { -moz-transition: opacity 0.25s ease-in-out; -webkit-transition: opacity 0.25s ease-in-out; -o-transition: opacity 0.25s ease-in-out; -ms-transition: opacity 0.25s ease-in-out; transition: opacity 0.25s ease-in-out; background-image: url("images/overlay.png"); content: ''; display: block; height: 100%; left: 0; opacity: 0.2; position: absolute; top: 0; width: 100%; } .image img { display: block; } .image.fit { display: block; } .image.fit img { display: block; width: 100%; } .image.feature { display: block; margin: 0 0 2em 0; } .image.feature img { display: block; width: 100%; } .image.icon { -moz-perspective: 500px; -webkit-perspective: 500px; -o-perspective: 500px; -ms-perspective: 500px; perspective: 500px; } .image.icon:before { -moz-transition: transform 0.1s ease-in-out, font-size 0.1s ease-in-out; -webkit-transition: transform 0.1s ease-in-out, font-size 0.1s ease-in-out; -o-transition: transform 0.1s ease-in-out, font-size 0.1s ease-in-out; -ms-transition: transform 0.1s ease-in-out, font-size 0.1s ease-in-out; transition: transform 0.1s ease-in-out, font-size 0.1s ease-in-out; color: #fff; font-size: 6em; height: 1em; left: 50%; line-height: 1em; margin: -0.5em 0 0 -0.5em; position: absolute; text-align: center; top: 50%; width: 1em; z-index: 1; } .image.icon:hover:before { -moz-transform: translateZ(1em); -webkit-transform: translateZ(1em); -o-transform: translateZ(1em); -ms-transform: translateZ(1em); transform: translateZ(1em); } .image.icon:hover:after { opacity: 1; } span.image.icon { cursor: default; } /* Icon */ .icon { text-decoration: none; border-bottom: none; position: relative; } .icon:before { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; font-family: FontAwesome; font-style: normal; font-weight: normal; text-transform: none !important; } .icon > .label { display: none; } /* List */ ol.default { list-style: decimal; padding-left: 1.25em; } ol.default li { padding-left: 0.25em; } ul.default { list-style: disc; padding-left: 1em; } ul.default li { padding-left: 0.5em; } ul.icons { cursor: default; } ul.icons li { display: inline-block; font-size: 1.25em; line-height: 1em; padding-left: 0.5em; } ul.icons li:first-child { padding-left: 0; } ul.icons li a, ul.icons li span { -moz-transition: background-color 0.2s ease-in-out; -webkit-transition: background-color 0.2s ease-in-out; -o-transition: background-color 0.2s ease-in-out; -ms-transition: background-color 0.2s ease-in-out; transition: background-color 0.2s ease-in-out; border-radius: 100%; border: solid 1px rgba(224, 224, 224, 0.75); display: inline-block; height: 2em; line-height: 2em; text-align: center; width: 2em; } ul.icons li a:hover, ul.icons li span:hover { background: rgba(224, 224, 224, 0.15); } ul.actions { cursor: default; text-align: center; } ul.actions:last-child { margin-bottom: 0; } ul.actions li { display: inline-block; padding: 0 0 0 1.5em; } ul.actions li:first-child { padding: 0; } ul.actions.vertical li { display: block; padding: 1.5em 0 0 0; } ul.actions.vertical li:first-child { padding: 0; } /* Table */ .table-wrapper { overflow-x: auto; -webkit-overflow-scrolling: touch; } table { width: 100%; } table.default { width: 100%; } table.default tbody tr { border-bottom: solid 1px rgba(224, 224, 224, 0.75); } table.default tbody tr:nth-child(2n - 1) { background: rgba(224, 224, 224, 0.15); } table.default td { padding: 0.5em 1em 0.5em 1em; } table.default th { color: #5b5b5b; font-size: 0.8em; font-weight: 700; letter-spacing: 0.125em; line-height: 1.75em; padding: 0.5em 1em 0.5em 1em; text-align: left; text-transform: uppercase; } table.default thead { border-bottom: solid 1px rgba(224, 224, 224, 0.75); } /* Button */ input[type="submit"], input[type="reset"], input[type="button"], .button { -moz-appearance: none; -webkit-appearance: none; -o-appearance: none; -ms-appearance: none; appearance: none; -moz-transition: color 0.2s ease-in-out, background-color 0.2s ease-in-out; -webkit-transition: color 0.2s ease-in-out, background-color 0.2s ease-in-out; -o-transition: color 0.2s ease-in-out, background-color 0.2s ease-in-out; -ms-transition: color 0.2s ease-in-out, background-color 0.2s ease-in-out; transition: color 0.2s ease-in-out, background-color 0.2s ease-in-out; background: #544d55; border-radius: 4px; border: 0; color: white; cursor: pointer; display: inline-block; font-size: 0.9em; font-weight: 700; letter-spacing: 0.125em; line-height: 3.25em; min-width: 15em; padding: 0 1.5em; text-align: center; text-decoration: none; text-transform: uppercase; } input[type="submit"]:hover, input[type="reset"]:hover, input[type="button"]:hover, .button:hover { background: #6e6570; } input[type="submit"]:active, input[type="reset"]:active, input[type="button"]:active, .button:active { background: #474148; } input[type="submit"].alt, input[type="reset"].alt, input[type="button"].alt, .button.alt { background: none; box-shadow: inset 0 0 0 1px rgba(224, 224, 224, 0.75); color: #544d55; } input[type="submit"].alt:hover, input[type="reset"].alt:hover, input[type="button"].alt:hover, .button.alt:hover { background: rgba(224, 224, 224, 0.15); } input[type="submit"].alt:active, input[type="reset"].alt:active, input[type="button"].alt:active, .button.alt:active { background: rgba(224, 224, 224, 0.35); } input[type="submit"].fit, input[type="reset"].fit, input[type="button"].fit, .button.fit { width: 100%; } input[type="submit"].small, input[type="reset"].small, input[type="button"].small, .button.small { font-size: 0.8em; } /* Box */ .box { background: white; border: solid 1px rgba(224, 224, 224, 0.75); margin-bottom: 6em; padding: 3.5em; } .box.alt { background: none; border: none; padding: 0; } /* Feature */ .feature { position: relative; height: 20em; } .feature:after { clear: both; content: ''; display: block; } .feature h3, .feature h4, .feature h5, .feature h6 { text-align: inherit; } .feature .image { display: inline-block; height: 100%; overflow: hidden; position: relative; width: 50%; } .feature .image img { display: block; min-height: 100%; min-width: 100%; position: absolute; } .feature:before { background: blue; content: ''; display: inline-block; height: 100%; vertical-align: middle; } .feature .content { display: inline-block; padding: 3.5em; vertical-align: middle; width: 48%; } .feature .content h3 { margin-bottom: 0.5em; } .feature .content :last-child { margin: 0; } .feature.left { text-align: left; } .feature.left .image { float: left; } .feature.left .image img { right: 0; top: 0; } .feature.left .content { padding-right: 0; } .feature.right { text-align: right; } .feature.right .image { float: right; } .feature.right .image img { left: 0; top: 0; } .feature.right .content { padding-left: 0; } .feature.long .content { padding-top: 0; } /* Header */ #header { background-attachment: scroll, scroll, fixed; background-image: url("images/top-3200.svg"), url("images/overlay.png"), url("../images/header.jpg"); background-position: bottom center, top left, center center; background-repeat: repeat-x, repeat, no-repeat; background-size: 3200px 460px, auto, cover; color: rgba(255, 255, 255, 0.8); padding: 10em 0 20em 0; position: relative; text-align: center; } #header:before, #header:after { background: rgba(224, 224, 224, 0.75); content: ''; left: 50%; position: absolute; width: 1px; z-index: 0; } #header:before { height: calc(100% - 50px); opacity: 0.15; top: 0; } #header:after { bottom: 0; height: 50px; } #header a { border-bottom-color: rgba(255, 255, 255, 0.35); color: rgba(255, 255, 255, 0.8); } #header a:hover { border-bottom-color: transparent; color: #4eb980; } #header strong, #header b { color: white; } #header h1, #header h2, #header h3, #header h4, #header h5, #header h6 { color: white; } #header input[type="submit"], #header input[type="reset"], #header input[type="button"], #header .button { background: white; color: #544d55; } #header .logo { background: #4eb980; border-radius: 100%; color: white; cursor: default; display: inline-block; font-size: 2.25em; height: 2.35em; line-height: 2.35em; margin: 0 0 0.75em 0; text-align: center; width: 2.35em; } #header .logo.fa-paper-plane-o:before { left: -0.075em; position: relative; } #header h1 { font-size: 2.5em; margin: 0; } #header p { font-size: 1.5em; line-height: 1.5em; margin: 0.25em 0 0 0; } /* Footer */ #footer { background-attachment: scroll; background-color: #4eb980; background-image: url("images/bottom-3200.svg"); background-position: top center; background-repeat: repeat-x; background-size: 3200px 460px; color: rgba(255, 255, 255, 0.8); /* Since the SVG background occupies a lot of vertical space, we'll add additional top padding (to move our content out of its way) and a negative margin (to move everything up a bit). */ margin-top: -260px; padding: calc(460px + 6em) 0 10em 0; position: relative; text-align: center; } #footer:before { background: rgba(224, 224, 224, 0.75); content: ''; height: calc(460px + 6em); left: 50%; position: absolute; top: 0; width: 1px; z-index: 0; } #footer a { color: white; } #footer strong, #footer b { color: white; } #footer h1, #footer h2, #footer h3, #footer h4, #footer h5, #footer h6 { color: white; } #footer header p { color: rgba(255, 255, 255, 0.5); } #footer input[type="submit"], #footer input[type="reset"], #footer input[type="button"], #footer .button { background: white; box-shadow: inset 0 0 0 1px white; color: #4eb980; } #footer input[type="submit"]:hover, #footer input[type="reset"]:hover, #footer input[type="button"]:hover, #footer .button:hover { background: rgba(224, 224, 224, 0.15); color: white; } #footer input[type="text"]:focus, #footer input[type="password"]:focus, #footer input[type="email"]:focus, #footer select:focus, #footer textarea:focus { border-color: white; } #footer .formerize-placeholder { color: rgba(255, 255, 255, 0.3) !important; } #footer form { margin: 3em 0; } #footer .copyright { color: rgba(255, 255, 255, 0.5); font-size: 0.8em; line-height: 1em; margin: 3em 0 0 0; } #footer .copyright li { border-left: dotted 1px; display: inline-block; margin-left: 1em; padding-left: 1em; } #footer .copyright li:first-child { padding: 0; margin: 0; border: 0; } #footer .copyright li a, #footer .copyright li span { color: inherit; } #footer .copyright li a:hover, #footer .copyright li span:hover { color: white; } /* Main */ #main { padding: 6em 0 5em 0; position: relative; z-index: 1; } #main:before { background: rgba(224, 224, 224, 0.75); content: ''; height: 100%; left: 50%; position: absolute; top: 0; width: 1px; z-index: -1; } #main header.major, #main footer.major { background: white; } ================================================ FILE: public/js/init.js ================================================ /* Directive by HTML5 UP html5up.net | @n33co Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) */ (function($) { skel.init({ reset: 'full', breakpoints: { global: { range: '*', href: 'css/style.css', containers: '51em', grid: { gutters: 30 } }, wide: { range: '-1680', href: 'css/style-wide.css' }, normal: { range: '-1280', href: 'css/style-normal.css', containers: '48em' }, narrow: { range: '-980', href: 'css/style-narrow.css', containers: '95%', grid: { gutters: 30 } }, narrower: { range: '-840', href: 'css/style-narrower.css', containers: '95%!', grid: { zoom: 2, gutters: 20 } }, mobile: { range: '-736', href: 'css/style-mobile.css', containers: '90%!', grid: { gutters: 20 }, viewport: { scalable: false } }, mobilep: { range: '-480', href: 'css/style-mobilep.css', containers: '100%!', grid: { zoom: 3 } } } }); $(function() { var $window = $(window), $body = $('body'); // Disable animations/transitions until the page has loaded. $body.addClass('is-loading'); $window.on('load', function() { $body.removeClass('is-loading'); }); // Forms (IE<10). var $form = $('form'); if ($form.length > 0) { $form.find('.form-button-submit') .on('click', function() { $(this).parents('form').submit(); return false; }); if (skel.vars.IEVersion < 10) { $.fn.n33_formerize=function(){var _fakes=new Array(),_form = $(this);_form.find('input[type=text],textarea').each(function() { var e = $(this); if (e.val() == '' || e.val() == e.attr('placeholder')) { e.addClass('formerize-placeholder'); e.val(e.attr('placeholder')); } }).blur(function() { var e = $(this); if (e.attr('name').match(/_fakeformerizefield$/)) return; if (e.val() == '') { e.addClass('formerize-placeholder'); e.val(e.attr('placeholder')); } }).focus(function() { var e = $(this); if (e.attr('name').match(/_fakeformerizefield$/)) return; if (e.val() == e.attr('placeholder')) { e.removeClass('formerize-placeholder'); e.val(''); } }); _form.find('input[type=password]').each(function() { var e = $(this); var x = $($('
').append(e.clone()).remove().html().replace(/type="password"/i, 'type="text"').replace(/type=password/i, 'type=text')); if (e.attr('id') != '') x.attr('id', e.attr('id') + '_fakeformerizefield'); if (e.attr('name') != '') x.attr('name', e.attr('name') + '_fakeformerizefield'); x.addClass('formerize-placeholder').val(x.attr('placeholder')).insertAfter(e); if (e.val() == '') e.hide(); else x.hide(); e.blur(function(event) { event.preventDefault(); var e = $(this); var x = e.parent().find('input[name=' + e.attr('name') + '_fakeformerizefield]'); if (e.val() == '') { e.hide(); x.show(); } }); x.focus(function(event) { event.preventDefault(); var x = $(this); var e = x.parent().find('input[name=' + x.attr('name').replace('_fakeformerizefield', '') + ']'); x.hide(); e.show().focus(); }); x.keypress(function(event) { event.preventDefault(); x.val(''); }); }); _form.submit(function() { $(this).find('input[type=text],input[type=password],textarea').each(function(event) { var e = $(this); if (e.attr('name').match(/_fakeformerizefield$/)) e.attr('name', ''); if (e.val() == e.attr('placeholder')) { e.removeClass('formerize-placeholder'); e.val(''); } }); }).bind("reset", function(event) { event.preventDefault(); $(this).find('select').val($('option:first').val()); $(this).find('input,textarea').each(function() { var e = $(this); var x; e.removeClass('formerize-placeholder'); switch (this.type) { case 'submit': case 'reset': break; case 'password': e.val(e.attr('defaultValue')); x = e.parent().find('input[name=' + e.attr('name') + '_fakeformerizefield]'); if (e.val() == '') { e.hide(); x.show(); } else { e.show(); x.hide(); } break; case 'checkbox': case 'radio': e.attr('checked', e.attr('defaultValue')); break; case 'text': case 'textarea': e.val(e.attr('defaultValue')); if (e.val() == '') { e.addClass('formerize-placeholder'); e.val(e.attr('placeholder')); } break; default: e.val(e.attr('defaultValue')); break; } }); window.setTimeout(function() { for (x in _fakes) _fakes[x].trigger('formerize_sync'); }, 10); }); return _form; }; $form.n33_formerize(); } } // Validate Form $.validate({ form : '#wppb-form' }); }); })(jQuery); ================================================ FILE: server.js ================================================ /** * WPPB GENERATOR SITE * Author: Enrique Chavez * Author URI: http://enriquechavez.co */ var express = require('express'); var app = express(); var port = process.env.PORT || 3000; var path = require('path'); var ghdownload = require('github-download'); var rimraf = require('rimraf'); var fs = require('fs-extra'); var mime = require('mime'); var replace = require('replace'); var bodyParser = require('body-parser'); var EasyZip = require('easy-zip').EasyZip; var CronJob = require('cron').CronJob; var ua = require('universal-analytics'); app.set('port', port); app.set('view engine', 'ejs'); app.set('views', path.join(__dirname, 'views')); app.use(express.static(__dirname + '/public')); app.use(bodyParser.urlencoded({ extended: true })); app .route( '/.well-known/acme-challenge/miU-q9A8ox1btoayRB8tM6wcWPisl42aR4wnixiK2UU' ) .get(function(req, res) { res.send( 'miU-q9A8ox1btoayRB8tM6wcWPisl42aR4wnixiK2UU.9s9UoMhX5iRzhJpZG6oAd-7PRFIBTPxbwd7nVTPfGcM' ); }); app .route('/') //GET REQUEST DRAW THE HOME PAGE .get(function(req, res) { res.send('Please visit https://wppb.me'); //res.redirect('https://wppb.me'); }) // END GET ROUTE .post(function(req, res) { var origin = process.cwd() + '/source/'; var pluginSlug = ''; var pluginName = ''; var pluginURI = ''; var pluginAuthor = ''; var pluginAuthorURI = ''; var pluginDescription = ''; var pluginNamePackage = ''; var pluginNameInstance = ''; var pluginAuthorEmail = ''; var pluginAuthorFull = ''; var pluginNameVersion = ''; var destination = ''; var data = req.body; var visitor = ua('UA-56742268-1'); //Track Event visitor.event('build', 'click', 'download', 1).send(); // ALL FIELDS REQUIRED IF EMPTY SET DEFAULT VALUES pluginSlug = String(data.slug).length ? String(data.slug).toLowerCase() : 'amazing-plugin'; pluginName = String(data.name).length ? data.name : 'Amazing Plugin'; pluginURI = String(data.uri).length ? data.uri : 'http://example.com/amazing-plugin-uri/'; pluginAuthor = String(data.author.name).length ? data.author.name : 'Plugin Author'; pluginAuthorURI = String(data.author.uri).length ? data.author.uri : 'http://mydomain.tld'; pluginAuthorEmail = String(data.author.email).length ? data.author.email : 'my@email.tld'; pluginNamePackage = capitalize(pluginSlug); pluginNameInstance = pluginSlug.replace(/-/gi, '_'); pluginNameVersion = (pluginNameInstance + '_VERSION').toUpperCase(); pluginAuthorFull = pluginAuthor + ' <' + pluginAuthorEmail + '>'; destination = process.cwd() + '/tmp/' + pluginSlug + '-' + new Date().getTime(); fs.copy(origin, destination, function(err) { if (err) { console.error(err); return; } //RENAME THE MAIN PLUGIN DIRECTORY fs.renameSync( destination + '/plugin-name', destination + '/' + pluginSlug ); //FIND AND REPLACE FILES NAMES walker(destination + '/' + pluginSlug, function(err, files) { if (err) { console.error(err); return; } files.forEach(function(file) { var newName; var re = /plugin-name/gi; newName = file.replace(re, pluginSlug); fs.renameSync(file, newName); }); // Plugin URI replace({ regex: 'http://example.com/plugin-name-uri/', replacement: pluginURI, paths: [destination + '/' + pluginSlug + '/' + pluginSlug + '.php'], recursive: false, silent: true }); // Plugin Name replace({ regex: 'WordPress Plugin Boilerplate', replacement: pluginName, paths: [destination + '/' + pluginSlug + '/' + pluginSlug + '.php'], recursive: true, silent: true }); //Plugin URI replace({ regex: 'http://example.com/plugin-name-uri/', replacement: pluginURI, paths: [destination + '/' + pluginSlug + '/' + pluginSlug + '.php'], recursive: true, silent: true }); //find Plugin Author replace({ regex: 'Your Name or Your Company', replacement: pluginAuthor, paths: [destination + '/' + pluginSlug + '/' + pluginSlug + '.php'], recursive: true, silent: true }); //find Plugin Author Full replace({ regex: 'Your Name ', replacement: pluginAuthorFull, paths: [destination + '/' + pluginSlug], recursive: true, silent: true }); //find Plugin_Name replace({ regex: 'Plugin_Name', replacement: pluginNamePackage, paths: [destination + '/' + pluginSlug], recursive: true, silent: true }); //find Plugin slug replace({ regex: 'plugin-name', replacement: pluginSlug, paths: [destination + '/' + pluginSlug], recursive: true, silent: true }); //find Author URI replace({ regex: 'http://example.com/?', replacement: pluginAuthorURI, paths: [destination + '/' + pluginSlug], recursive: true, silent: true }); //find Plugin Version replace({ regex: 'PLUGIN_NAME_VERSION', replacement: pluginNameVersion, paths: [destination + '/' + pluginSlug], recursive: true, silent: true }); //find Author URI replace({ regex: 'plugin_name', replacement: pluginNameInstance, paths: [destination + '/' + pluginSlug + '/' + pluginSlug + '.php'], recursive: true, silent: true }); //Replace done ZIP it var zip = new EasyZip(); zip.zipFolder(destination + '/' + pluginSlug, function() { zip.writeToResponse(res, pluginSlug); }); }); }); }); //END ROUTE /** * CRON JOB TO GET NEW CODE FROM GITHUB EVERY DAY AT 1:30AM */ var job = new CronJob( '30 1 * * *', function() { //GET FRESH CODE getSourceCode(); }, true, 'America/Los_Angeles' ); job.start(); /** * CRON JOB TO CLEAN THE TMP FOLDER EVERY HOUR */ var clean = new CronJob( '0 * * * *', function() { var destination = process.cwd() + '/tmp/'; rimraf(destination, function() {}); }, true, 'America/Los_Angeles' ); clean.start(); /** * GET PLUGIN CODE FROM GITHUB */ var getSourceCode = function() { var repo = { user: 'DevinVinson', repo: 'WordPress-Plugin-Boilerplate', ref: 'master' }; var destination = process.cwd() + '/source/'; //DELETE OLD CODE rimraf(destination, function() {}); //GET THE NEW CODE FORM THE REPO ghdownload(repo, destination) .on('zip', function(zipUrl) { console.log('zip: ' + zipUrl); }) .on('error', function(err) { console.error('error ' + err); }) .on('end', function() { console.log('Finish Github Download '); }); }; /** * RECURSIVE WALKER TO GET ALL THE FILES IN DIRECTORY */ var walker = function(dir, done) { var results = []; fs.readdir(dir, function(err, list) { if (err) return done(err); var i = 0; (function next() { var file = list[i++]; if (!file) return done(null, results); file = dir + '/' + file; fs.stat(file, function(err, stat) { if (stat && stat.isDirectory()) { walker(file, function(err, res) { results = results.concat(res); next(); }); } else { results.push(file); next(); } }); })(); }); }; var capitalize = function(name) { var newName = ''; name = name.replace(/-/gi, ' '); pieces = name.split(' '); pieces.forEach(function(word) { newName += word.charAt(0).toUpperCase() + word.slice(1) + ' '; }); return newName.trim().replace(/ /gi, '_'); }; // On Init get initial code getSourceCode(); //Start web app. app.listen(app.get('port'), function() { console.log('Node app is running at localhost:' + app.get('port')); }); ================================================ FILE: views/index.ejs ================================================ WordPress Plugin Boilerplate Generator | Ready to use WordPress Plugin Boilerplate

You only need to type your plugin
details in the form below
and a zip file will be generated

Create your amazing wppb based plugin