diff --git a/README.md b/README.md index 72e643f..71e3d57 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,11 @@ 2. Go to http://localhost:8000/wp-admin/ 3. Enter site info 4. Log in -5. Go to Plugins page -6. Search for, install, and activate "Demo Data Creator" plugin -7. Search for, install, and activate "Proxy Cache Purge" plugin -8. Go to Tools > Demo Data Creator -9. Create demo users -10. Create demo categories -11. Create demo pages -12. Create demo posts -13. Create demo comments -14. Go to Settings > Permalinks -15. Select a scheme other than "Plain" (to enable cleaner JSON URLs) +5. Go to Settings > Permalinks +6. Select a scheme other than "Plain" (to enable clean JSON URLs) +7. Go to Plugins page +8. Search for, install, and activate "Proxy Cache Purge" plugin +9. Search for, install, and activate "FakerPress" plugin + + +docker exec server_wordpress_1 php -r "echo gethostbyname('node');" diff --git a/package-lock.json b/package-lock.json index dc720b7..2427171 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1413,10 +1413,9 @@ } }, "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" }, "bn.js": { "version": "4.11.8", @@ -1893,19 +1892,24 @@ "dev": true }, "compressible": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz", - "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=", - "dev": true, + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", + "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", "requires": { - "mime-db": ">= 1.34.0 < 2" + "mime-db": ">= 1.36.0 < 2" + }, + "dependencies": { + "mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + } } }, "compression": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", - "dev": true, "requires": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -6638,15 +6642,15 @@ } }, "relaks": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/relaks/-/relaks-1.1.8.tgz", - "integrity": "sha512-bu9mI7qEvKdPMJ+9wykM1TryRORvX+0CC0LSEIo9zglSgRbMDVdFHQP41mOafA7JWSkYWN8BjvFoVILIcYwGGw==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/relaks/-/relaks-1.1.9.tgz", + "integrity": "sha512-FY3pBgbTS25+/mv4Q8plNOBivUlZCN5KScBgxUprmUPk+clcOnptSi3x8GjRBoWdV2/bx89XzzCP4fApdJ1kNA==", "dev": true }, "relaks-event-emitter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/relaks-event-emitter/-/relaks-event-emitter-0.0.1.tgz", - "integrity": "sha512-h2O9+308vjxkR9YTt3pJYwwVr0JpHi4A6mK7KHBXqhigWbG1gXAZ0O6bHV6E8HjWY3A16zMTqtotGq+T8xtSMw==", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/relaks-event-emitter/-/relaks-event-emitter-0.0.6.tgz", + "integrity": "sha512-scNhLQeH7v1q+CRJFRWVYDUI4kES+P4suQzoW9bbayrwhpbSm5oZtofins8MDRLh+Hp55QEUmoIkfb1NGlljgw==", "dev": true }, "relaks-harvest": { @@ -6656,12 +6660,12 @@ "dev": true }, "relaks-route-manager": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/relaks-route-manager/-/relaks-route-manager-0.0.18.tgz", - "integrity": "sha512-Srxe5KaKtIbyrtckTwoNY8/j2A4DTRGB+DUN7vVaguiPxqygY2tDLc0dYcUAcoDxoq/iHKNFu6/wGZM3t2duqw==", + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/relaks-route-manager/-/relaks-route-manager-0.0.20.tgz", + "integrity": "sha512-OQ51fvpI18S/kgBhpo77xjcBYWwE62TTEHLTMVfAb38m+HkXtWM6o/FNZrKP0N+7vJg5muTsh5DfTuN73XdQVA==", "dev": true, "requires": { - "relaks-event-emitter": "0.0.1" + "relaks-event-emitter": "0.0.6" } }, "relateurl": { @@ -6822,8 +6826,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", diff --git a/package.json b/package.json index e945fa4..f8db885 100644 --- a/package.json +++ b/package.json @@ -40,9 +40,9 @@ "react": "^16.6.3", "react-html-parser": "^2.0.2", "regenerator-runtime": "^0.12.0", - "relaks": "^1.1.8", + "relaks": "^1.1.9", "relaks-harvest": "^0.0.3", - "relaks-route-manager": "0.0.18", + "relaks-route-manager": "0.0.20", "sass-loader": "^6.0.5", "uglifyjs-webpack-plugin": "^0.4.6", "webpack": "^3.1.0", @@ -51,6 +51,8 @@ }, "dependencies": { "@fortawesome/fontawesome-free": "^5.6.3", + "bluebird": "^3.5.3", + "compression": "^1.7.3", "cross-fetch": "^2.2.2", "dnscache": "^1.0.1", "express": "^4.16.3", diff --git a/server/client/af7ae505a9eed503f8b8e6982036873e.woff2 b/server/client/af7ae505a9eed503f8b8e6982036873e.woff2 deleted file mode 100644 index 4d13fc6..0000000 Binary files a/server/client/af7ae505a9eed503f8b8e6982036873e.woff2 and /dev/null differ diff --git a/server/client/fee66e712a8a08eef5805a46892932ad.woff b/server/client/fee66e712a8a08eef5805a46892932ad.woff deleted file mode 100644 index 400014a..0000000 Binary files a/server/client/fee66e712a8a08eef5805a46892932ad.woff and /dev/null differ diff --git a/server/client/app.js b/server/client/front-end.js similarity index 51% rename from server/client/app.js rename to server/client/front-end.js index a850993..3fcb350 100644 --- a/server/client/app.js +++ b/server/client/front-end.js @@ -1,14 +1,14 @@ -module.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="/",t(t.s="./main.js")}({"../../relaks-route-manager/index.js":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e){T.call(this),this.active=!1,this.preloaded=!1,this.options={},this.routes={},this.rewrites=[],this.name="",this.params="",this.context={},this.route=null,this.url="",this.path="",this.query={},this.search="",this.hash="",this.history=[],this.startTime=y(),this.queue=[];for(var t in S)e&&void 0!==e[t]?this.options[t]=e[t]:this.options[t]=S[t];if(e){if(e.basePath){var n={from:function(t,n){var r=c(e.basePath,t.path);r&&(t.path=r)},to:function(t,n){t.path=e.basePath+t.path}};this.addRewrites([n])}e.routes&&this.addRoutes(e.routes),e.rewrites&&this.addRewrites(e.rewrites)}this.handleLinkClick=this.handleLinkClick.bind(this),this.handlePopState=this.handlePopState.bind(this)}function s(e,t,n){if(!e)return null;var r=e.replace(P,function(e){var r,o=e.substr(2,e.length-3),s=t?t[o]:String;return s===Number||s===Boolean?r="[\\d\\.]*":"object"===(void 0===s?"undefined":(0,Y.default)(s))&&(r=s.pattern),r||(r=n?"[^/]*":".*"),"("+r+")"});if(n){r+="/"===r.charAt(r-1)?"?":"/?",r="^"+r+"$"}var o=H[r];return o||(o=H[r]=new RegExp(r)),o}function a(e){var t=e.match(P),n=[];if(t)for(var r=0;r=0;r--){var o=this.rewrites[r];if(o.to&&!1===o.to(t,n))break}},E.load=function(e){try{var t,n=this,r=e?this.routes[e.name]:null;if(!r)throw new b(404,"No route");return r.load&&(t=r.load(e)),j.default.resolve(t).catch(function(e){throw n.options.reloadFaultyScript&&/Loading chunk/i.test(e.message)&&"object"===("undefined"==typeof performance?"undefined":(0,Y.default)(performance))&&"object"===(0,Y.default)(performance.navigation)&&1!==performance.navigation.type&&navigator.onLine&&(console.log("Reloading page..."),location.reload(!0)),e})}catch(e){return j.default.reject(e)}},E.preload=function(){var e=[];for(var t in this.routes){var n=this.routes[t];if(n&&n.load){var r={params:{},context:{}};e.push(n.load(r))}}return j.default.all(e)},E.getLocationURL=function(e){var t=window.location;if(e!==t){if(e.host!==t.host)throw new b(400,"Host does not match");if(e.protocol!==t.protocol)throw new b(400,"Protocol does not match");if(this.options.useHashFallback){if(e.pathname!==t.pathname)throw new b(400,"Path does not match");if(e.search!==t.search)throw new b(400,"Query string does not match")}}if(this.options.useHashFallback){return e.hash.substr(1)||"/"}return e.pathname+e.search+e.hash},E.updateHistory=function(e,t,n){if(e.time>=this.startTime){if(!t){for(var r=-1,o=null,s=0;s0?this.history[this.history.length-1]=e:this.history.push(e),e},E.setLocationURL=function(e,t,n){if(this.options.trackLocation){this.getLocationURL(location)!==e&&(this.options.useHashFallback&&(e="#"+e),n?window.history.replaceState(t,"",e):window.history.pushState(t,"",e))}},E.handleLinkClick=function(e){if(0===e.button&&!e.defaultPrevented){var t=p(e.target);if(t&&!t.target&&!t.download)try{var n=this.getLocationURL(t);if(n){var r=this.match(n);if(r){var o=y();e.preventDefault(),e.stopPropagation(),this.apply(r,o,!0,!1)}}}catch(e){}}},E.handlePopState=function(e){var t=e.state?e.state.time:y(),n=this.getLocationURL(window.location),r=this.match(n),o=this.apply(r,t,!1,!1),s=this.backResolve,a=this.backReject;s&&(this.backResolve=void 0,this.backReject=void 0,o.then(s,a))};var P=/\$\{\w+\}/g,H={},O=0;v.prototype=(0,k.default)(D.prototype),b.prototype=(0,k.default)(Error.prototype),e.exports=o,e.exports.RelaksRouteManager=o,e.exports.RelaksRouteManagerEvent=v,e.exports.RelaksRouteManagerError=b},"../node_modules/@fortawesome/fontawesome-free/scss/fontawesome.scss":function(e,t){},"../node_modules/@fortawesome/fontawesome-free/scss/regular.scss":function(e,t){},"../node_modules/@fortawesome/fontawesome-free/scss/solid.scss":function(e,t){},"../node_modules/babel-runtime/core-js/get-iterator.js":function(e,t,n){e.exports={default:n("../node_modules/core-js/library/fn/get-iterator.js"),__esModule:!0}},"../node_modules/babel-runtime/core-js/json/stringify.js":function(e,t,n){e.exports={default:n("../node_modules/core-js/library/fn/json/stringify.js"),__esModule:!0}},"../node_modules/babel-runtime/core-js/object/assign.js":function(e,t,n){e.exports={default:n("../node_modules/core-js/library/fn/object/assign.js"),__esModule:!0}},"../node_modules/babel-runtime/core-js/object/create.js":function(e,t,n){e.exports={default:n("../node_modules/core-js/library/fn/object/create.js"),__esModule:!0}},"../node_modules/babel-runtime/core-js/object/define-property.js":function(e,t,n){e.exports={default:n("../node_modules/core-js/library/fn/object/define-property.js"),__esModule:!0}},"../node_modules/babel-runtime/core-js/object/get-prototype-of.js":function(e,t,n){e.exports={default:n("../node_modules/core-js/library/fn/object/get-prototype-of.js"),__esModule:!0}},"../node_modules/babel-runtime/core-js/object/set-prototype-of.js":function(e,t,n){e.exports={default:n("../node_modules/core-js/library/fn/object/set-prototype-of.js"),__esModule:!0}},"../node_modules/babel-runtime/core-js/promise.js":function(e,t,n){e.exports={default:n("../node_modules/core-js/library/fn/promise.js"),__esModule:!0}},"../node_modules/babel-runtime/core-js/symbol.js":function(e,t,n){e.exports={default:n("../node_modules/core-js/library/fn/symbol/index.js"),__esModule:!0}},"../node_modules/babel-runtime/core-js/symbol/iterator.js":function(e,t,n){e.exports={default:n("../node_modules/core-js/library/fn/symbol/iterator.js"),__esModule:!0}},"../node_modules/babel-runtime/helpers/asyncToGenerator.js":function(e,t,n){"use strict";t.__esModule=!0;var r=n("../node_modules/babel-runtime/core-js/promise.js"),o=function(e){return e&&e.__esModule?e:{default:e}}(r);t.default=function(e){return function(){var t=e.apply(this,arguments);return new o.default(function(e,n){function r(s,a){try{var i=t[s](a),u=i.value}catch(e){return void n(e)}if(!i.done)return o.default.resolve(u).then(function(e){r("next",e)},function(e){r("throw",e)});e(u)}return r("next")})}}},"../node_modules/babel-runtime/helpers/classCallCheck.js":function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},"../node_modules/babel-runtime/helpers/createClass.js":function(e,t,n){"use strict";t.__esModule=!0;var r=n("../node_modules/babel-runtime/core-js/object/define-property.js"),o=function(e){return e&&e.__esModule?e:{default:e}}(r);t.default=function(){function e(e,t){for(var n=0;nd;)if((i=u[d++])!=i)return!0}else for(;l>d;d++)if((e||d in u)&&u[d]===n)return e||d||0;return!e&&-1}}},"../node_modules/core-js/library/modules/_classof.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_cof.js"),o=n("../node_modules/core-js/library/modules/_wks.js")("toStringTag"),s="Arguments"==r(function(){return arguments}()),a=function(e,t){try{return e[t]}catch(e){}};e.exports=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=a(t=Object(e),o))?n:s?r(t):"Object"==(i=r(t))&&"function"==typeof t.callee?"Arguments":i}},"../node_modules/core-js/library/modules/_cof.js":function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},"../node_modules/core-js/library/modules/_core.js":function(e,t){var n=e.exports={version:"2.5.7"};"number"==typeof __e&&(__e=n)},"../node_modules/core-js/library/modules/_ctx.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_a-function.js");e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},"../node_modules/core-js/library/modules/_defined.js":function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},"../node_modules/core-js/library/modules/_descriptors.js":function(e,t,n){e.exports=!n("../node_modules/core-js/library/modules/_fails.js")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},"../node_modules/core-js/library/modules/_dom-create.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_is-object.js"),o=n("../node_modules/core-js/library/modules/_global.js").document,s=r(o)&&r(o.createElement);e.exports=function(e){return s?o.createElement(e):{}}},"../node_modules/core-js/library/modules/_enum-bug-keys.js":function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},"../node_modules/core-js/library/modules/_enum-keys.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_object-keys.js"),o=n("../node_modules/core-js/library/modules/_object-gops.js"),s=n("../node_modules/core-js/library/modules/_object-pie.js");e.exports=function(e){var t=r(e),n=o.f;if(n)for(var a,i=n(e),u=s.f,l=0;i.length>l;)u.call(e,a=i[l++])&&t.push(a);return t}},"../node_modules/core-js/library/modules/_export.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_global.js"),o=n("../node_modules/core-js/library/modules/_core.js"),s=n("../node_modules/core-js/library/modules/_ctx.js"),a=n("../node_modules/core-js/library/modules/_hide.js"),i=n("../node_modules/core-js/library/modules/_has.js"),u=function(e,t,n){var l,d,c,m=e&u.F,f=e&u.G,_=e&u.S,h=e&u.P,p=e&u.B,y=e&u.W,g=f?o:o[t]||(o[t]={}),v=g.prototype,b=f?r:_?r[t]:(r[t]||{}).prototype;f&&(n=t);for(l in n)(d=!m&&b&&void 0!==b[l])&&i(g,l)||(c=d?b[l]:n[l],g[l]=f&&"function"!=typeof b[l]?n[l]:p&&d?s(c,r):y&&b[l]==c?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(c):h&&"function"==typeof c?s(Function.call,c):c,h&&((g.virtual||(g.virtual={}))[l]=c,e&u.R&&v&&!v[l]&&a(v,l,c)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,e.exports=u},"../node_modules/core-js/library/modules/_fails.js":function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},"../node_modules/core-js/library/modules/_for-of.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_ctx.js"),o=n("../node_modules/core-js/library/modules/_iter-call.js"),s=n("../node_modules/core-js/library/modules/_is-array-iter.js"),a=n("../node_modules/core-js/library/modules/_an-object.js"),i=n("../node_modules/core-js/library/modules/_to-length.js"),u=n("../node_modules/core-js/library/modules/core.get-iterator-method.js"),l={},d={},t=e.exports=function(e,t,n,c,m){var f,_,h,p,y=m?function(){return e}:u(e),g=r(n,c,t?2:1),v=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(s(y)){for(f=i(e.length);f>v;v++)if((p=t?g(a(_=e[v])[0],_[1]):g(e[v]))===l||p===d)return p}else for(h=y.call(e);!(_=h.next()).done;)if((p=o(h,g,_.value,t))===l||p===d)return p};t.BREAK=l,t.RETURN=d},"../node_modules/core-js/library/modules/_global.js":function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},"../node_modules/core-js/library/modules/_has.js":function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},"../node_modules/core-js/library/modules/_hide.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_object-dp.js"),o=n("../node_modules/core-js/library/modules/_property-desc.js");e.exports=n("../node_modules/core-js/library/modules/_descriptors.js")?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},"../node_modules/core-js/library/modules/_html.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_global.js").document;e.exports=r&&r.documentElement},"../node_modules/core-js/library/modules/_ie8-dom-define.js":function(e,t,n){e.exports=!n("../node_modules/core-js/library/modules/_descriptors.js")&&!n("../node_modules/core-js/library/modules/_fails.js")(function(){return 7!=Object.defineProperty(n("../node_modules/core-js/library/modules/_dom-create.js")("div"),"a",{get:function(){return 7}}).a})},"../node_modules/core-js/library/modules/_invoke.js":function(e,t){e.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},"../node_modules/core-js/library/modules/_iobject.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_cof.js");e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},"../node_modules/core-js/library/modules/_is-array-iter.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_iterators.js"),o=n("../node_modules/core-js/library/modules/_wks.js")("iterator"),s=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||s[o]===e)}},"../node_modules/core-js/library/modules/_is-array.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_cof.js");e.exports=Array.isArray||function(e){return"Array"==r(e)}},"../node_modules/core-js/library/modules/_is-object.js":function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},"../node_modules/core-js/library/modules/_iter-call.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_an-object.js");e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(t){var s=e.return;throw void 0!==s&&r(s.call(e)),t}}},"../node_modules/core-js/library/modules/_iter-create.js":function(e,t,n){"use strict";var r=n("../node_modules/core-js/library/modules/_object-create.js"),o=n("../node_modules/core-js/library/modules/_property-desc.js"),s=n("../node_modules/core-js/library/modules/_set-to-string-tag.js"),a={};n("../node_modules/core-js/library/modules/_hide.js")(a,n("../node_modules/core-js/library/modules/_wks.js")("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(a,{next:o(1,n)}),s(e,t+" Iterator")}},"../node_modules/core-js/library/modules/_iter-define.js":function(e,t,n){"use strict";var r=n("../node_modules/core-js/library/modules/_library.js"),o=n("../node_modules/core-js/library/modules/_export.js"),s=n("../node_modules/core-js/library/modules/_redefine.js"),a=n("../node_modules/core-js/library/modules/_hide.js"),i=n("../node_modules/core-js/library/modules/_iterators.js"),u=n("../node_modules/core-js/library/modules/_iter-create.js"),l=n("../node_modules/core-js/library/modules/_set-to-string-tag.js"),d=n("../node_modules/core-js/library/modules/_object-gpo.js"),c=n("../node_modules/core-js/library/modules/_wks.js")("iterator"),m=!([].keys&&"next"in[].keys()),f=function(){return this};e.exports=function(e,t,n,_,h,p,y){u(n,t,_);var g,v,b,M=function(e){if(!m&&e in w)return w[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},j=t+" Iterator",L="values"==h,k=!1,w=e.prototype,Y=w[c]||w["@@iterator"]||h&&w[h],T=Y||M(h),D=h?L?M("entries"):T:void 0,x="Array"==t?w.entries||Y:Y;if(x&&(b=d(x.call(new e)))!==Object.prototype&&b.next&&(l(b,j,!0),r||"function"==typeof b[c]||a(b,c,f)),L&&Y&&"values"!==Y.name&&(k=!0,T=function(){return Y.call(this)}),r&&!y||!m&&!k&&w[c]||a(w,c,T),i[t]=T,i[j]=f,h)if(g={values:L?T:M("values"),keys:p?T:M("keys"),entries:D},y)for(v in g)v in w||s(w,v,g[v]);else o(o.P+o.F*(m||k),t,g);return g}},"../node_modules/core-js/library/modules/_iter-detect.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_wks.js")("iterator"),o=!1;try{var s=[7][r]();s.return=function(){o=!0},Array.from(s,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var s=[7],a=s[r]();a.next=function(){return{done:n=!0}},s[r]=function(){return a},e(s)}catch(e){}return n}},"../node_modules/core-js/library/modules/_iter-step.js":function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},"../node_modules/core-js/library/modules/_iterators.js":function(e,t){e.exports={}},"../node_modules/core-js/library/modules/_library.js":function(e,t){e.exports=!0},"../node_modules/core-js/library/modules/_meta.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_uid.js")("meta"),o=n("../node_modules/core-js/library/modules/_is-object.js"),s=n("../node_modules/core-js/library/modules/_has.js"),a=n("../node_modules/core-js/library/modules/_object-dp.js").f,i=0,u=Object.isExtensible||function(){return!0},l=!n("../node_modules/core-js/library/modules/_fails.js")(function(){return u(Object.preventExtensions({}))}),d=function(e){a(e,r,{value:{i:"O"+ ++i,w:{}}})},c=function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!s(e,r)){if(!u(e))return"F";if(!t)return"E";d(e)}return e[r].i},m=function(e,t){if(!s(e,r)){if(!u(e))return!0;if(!t)return!1;d(e)}return e[r].w},f=function(e){return l&&_.NEED&&u(e)&&!s(e,r)&&d(e),e},_=e.exports={KEY:r,NEED:!1,fastKey:c,getWeak:m,onFreeze:f}},"../node_modules/core-js/library/modules/_microtask.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_global.js"),o=n("../node_modules/core-js/library/modules/_task.js").set,s=r.MutationObserver||r.WebKitMutationObserver,a=r.process,i=r.Promise,u="process"==n("../node_modules/core-js/library/modules/_cof.js")(a);e.exports=function(){var e,t,n,l=function(){var r,o;for(u&&(r=a.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(u)n=function(){a.nextTick(l)};else if(!s||r.navigator&&r.navigator.standalone)if(i&&i.resolve){var d=i.resolve(void 0);n=function(){d.then(l)}}else n=function(){o.call(r,l)};else{var c=!0,m=document.createTextNode("");new s(l).observe(m,{characterData:!0}),n=function(){m.data=c=!c}}return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}}},"../node_modules/core-js/library/modules/_new-promise-capability.js":function(e,t,n){"use strict";function r(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=r}),this.resolve=o(t),this.reject=o(n)}var o=n("../node_modules/core-js/library/modules/_a-function.js");e.exports.f=function(e){return new r(e)}},"../node_modules/core-js/library/modules/_object-assign.js":function(e,t,n){"use strict";var r=n("../node_modules/core-js/library/modules/_object-keys.js"),o=n("../node_modules/core-js/library/modules/_object-gops.js"),s=n("../node_modules/core-js/library/modules/_object-pie.js"),a=n("../node_modules/core-js/library/modules/_to-object.js"),i=n("../node_modules/core-js/library/modules/_iobject.js"),u=Object.assign;e.exports=!u||n("../node_modules/core-js/library/modules/_fails.js")(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=u({},e)[n]||Object.keys(u({},t)).join("")!=r})?function(e,t){for(var n=a(e),u=arguments.length,l=1,d=o.f,c=s.f;u>l;)for(var m,f=i(arguments[l++]),_=d?r(f).concat(d(f)):r(f),h=_.length,p=0;h>p;)c.call(f,m=_[p++])&&(n[m]=f[m]);return n}:u},"../node_modules/core-js/library/modules/_object-create.js":function(e,t,n){var r=n("../node_modules/core-js/library/modules/_an-object.js"),o=n("../node_modules/core-js/library/modules/_object-dps.js"),s=n("../node_modules/core-js/library/modules/_enum-bug-keys.js"),a=n("../node_modules/core-js/library/modules/_shared-key.js")("IE_PROTO"),i=function(){},u=function(){var e,t=n("../node_modules/core-js/library/modules/_dom-create.js")("iframe"),r=s.length;for(t.style.display="none",n("../node_modules/core-js/library/modules/_html.js").appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(" +
+ diff --git a/server/client/styles.css b/server/client/styles.css index 2baf79e..8c6a260 100644 --- a/server/client/styles.css +++ b/server/client/styles.css @@ -24,10 +24,13 @@ A:link, A:visited { background-color: #66023c; overflow: hidden; color: #cccccc; } - .side-nav A:link, .side-nav A:visited { - color: #cccccc; } - .side-nav A:link:hover, .side-nav A:visited:hover { - color: #eeccdd; } + .side-nav A { + opacity: 0.5; } + .side-nav A:link, .side-nav A:visited { + opacity: 1; + color: #cccccc; } + .side-nav A:link:hover, .side-nav A:visited:hover { + color: #eeccdd; } .side-nav .archive LI { margin-top: 0.1em; margin-bottom: 0.1em; } @@ -85,6 +88,7 @@ A:link, A:visited { .top-nav .page-bar A:link:hover, .top-nav .page-bar A:visited:hover { color: #eecccc; } .top-nav .page-bar .button { + flex: 0 0 auto; padding-left: 0.5em; padding-right: 0.5em; border-right: 1px solid rgba(204, 204, 204, 0.25); } @@ -138,9 +142,13 @@ A:link, A:visited { max-width: 60em; } .page-container .page .meta, .page-container .post .meta { float: right; - text-align: right; } + text-align: right; + margin-left: 1em; + margin-top: 0.4em; } .page-container .page .meta .author, .page-container .post .meta .author { margin-top: 0.25em; } + .page-container .page .post-list-view .excerpt, .page-container .post .post-list-view .excerpt { + margin-top: -0.7em; } .page-container .page .comments, .page-container .post .comments { font-size: 0.9em; padding-left: 1.5em; } @@ -154,6 +162,8 @@ A:link, A:visited { vertical-align: middle; } .page-container .page .comments .replies, .page-container .post .comments .replies { padding-left: 1.5em; } + .page-container .page IMG, .page-container .post IMG { + max-width: 100%; } @media only screen and (max-width: 800px) { .page-container { diff --git a/server/docker-compose.yml b/server/docker-compose.yml index 6028361..633510a 100644 --- a/server/docker-compose.yml +++ b/server/docker-compose.yml @@ -16,6 +16,8 @@ services: depends_on: - db image: wordpress:latest + volumes: + - wp_content:/var/www/html/wp-content environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress @@ -45,4 +47,5 @@ services: restart: always volumes: db_data: + wp_content: web_cache: diff --git a/server/index.js b/server/index.js index b1e51ec..fa3d9ff 100644 --- a/server/index.js +++ b/server/index.js @@ -1,22 +1,22 @@ -const FS = require('fs'); +const Bluebird = require('bluebird'); +const FS = Bluebird.promisifyAll(require('fs')); const OS = require('os'); const Express = require('express'); -const CrossFetch = require('cross-fetch'); -const DNSCache = require('dnscache'); -const Crypto = require('crypto'); +const Compression = require('compression'); const SpiderDetector = require('spider-detector') +const DNSCache = require('dnscache'); +const CrossFetch = require('cross-fetch'); const ReactDOMServer = require('react-dom/server'); -const ClientApp = require('./client/app'); +const FrontEnd = require('./client/front-end'); +const NginxCache = require('./nginx-cache'); // enable DNS caching let dnsCache = DNSCache({ enable: true, ttl: 300, cachesize: 100 }); -const basePath = `/`; const perPage = 10; const serverPort = 80; const wordpressHost = process.env.WORDPRESS_HOST; const nginxHost = process.env.NGINX_HOST; -const nginxCache = process.env.NGINX_CACHE; let wordpressIP; dnsCache.lookup(wordpressHost, (err, result) => { @@ -27,14 +27,40 @@ dnsCache.lookup(wordpressHost, (err, result) => { let app = Express(); app.set('json spaces', 2); +app.use(Compression()) app.use(SpiderDetector.middleware()); app.use(`/`, Express.static(`${__dirname}/www`)); app.get('/.mtime', handleTimestampRequest); +app.get('/json/*', handleJSONRequest); app.get(`/*`, handlePageRequest); app.purge(`/*`, handlePurgeRequest); app.use(handleError); app.listen(serverPort); +let pageDependencies = {}; + +async function handleJSONRequest(req, res, next) { + try { + let path = `/wp-json/${req.url.substr(6)}`; + let url = `http://${wordpressHost}${path}`; + let sres = await CrossFetch(url); + let text = await sres.text(); + res.send(text); + } catch (err) { + next(err); + } +} + +function handleTimestampRequest(req, res, next) { + try { + let now = new Date; + let ts = now.toISOString(); + res.type('text').send(ts); + } catch (err) { + next(err); + } +} + async function handlePageRequest(req, res, next) { try { let host = `http://${nginxHost}`; @@ -52,10 +78,10 @@ async function handlePageRequest(req, res, next) { return CrossFetch(url, options); }; let options = { host, path, target, fetch }; - let rootNode = await ClientApp.render(options); + let rootNode = await FrontEnd.render(options); let appHTML = ReactDOMServer.renderToString(rootNode); let indexHTMLPath = `${__dirname}/client/index.html`; - let html = await replaceHTMLComment(indexHTMLPath, 'APP', appHTML); + let html = await replaceHTMLComment(indexHTMLPath, 'REACT', appHTML); if (target === 'hydrate') { // add