Updated dep
This commit is contained in:
parent
b033619612
commit
babf056f7c
13 changed files with 157 additions and 131 deletions
|
@ -8,6 +8,7 @@ initializePlayground();
|
||||||
|
|
||||||
if (window.location.href.search && window.location.href.split("?url=")[1]) { // pre-fill example one if search parameter exists
|
if (window.location.href.search && window.location.href.split("?url=")[1]) { // pre-fill example one if search parameter exists
|
||||||
const searchParameter = window.location.href.split("?url=")[1];
|
const searchParameter = window.location.href.split("?url=")[1];
|
||||||
|
|
||||||
fetchMetadata(1, searchParameter);
|
fetchMetadata(1, searchParameter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +103,7 @@ function detectLanguageAndUpdate() { // eslint-disable-line
|
||||||
function debounce(func, wait, immediate) {
|
function debounce(func, wait, immediate) {
|
||||||
let timeout;
|
let timeout;
|
||||||
|
|
||||||
return function () {
|
return function() {
|
||||||
const context = this;
|
const context = this;
|
||||||
const args = arguments;
|
const args = arguments;
|
||||||
|
|
||||||
|
@ -112,6 +113,7 @@ function debounce(func, wait, immediate) {
|
||||||
};
|
};
|
||||||
|
|
||||||
const callNow = immediate && !timeout;
|
const callNow = immediate && !timeout;
|
||||||
|
|
||||||
clearTimeout(timeout);
|
clearTimeout(timeout);
|
||||||
|
|
||||||
timeout = setTimeout(later, wait);
|
timeout = setTimeout(later, wait);
|
||||||
|
@ -126,7 +128,7 @@ function initializePlayground() {
|
||||||
document.querySelector(".playground__navigation__example:nth-child(1)").classList.add("active");
|
document.querySelector(".playground__navigation__example:nth-child(1)").classList.add("active");
|
||||||
|
|
||||||
send(JSON.stringify({
|
send(JSON.stringify({
|
||||||
"message": "landed on playground"
|
message: "landed on playground"
|
||||||
}));
|
}));
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
@ -142,10 +144,10 @@ function fetchMetadata(exampleNumber, data) {
|
||||||
switch(exampleNumber) {
|
switch(exampleNumber) {
|
||||||
case 1:
|
case 1:
|
||||||
send(JSON.stringify({
|
send(JSON.stringify({
|
||||||
"claim": data,
|
claim: data,
|
||||||
"message": "fetch metadata",
|
message: "fetch metadata",
|
||||||
"method": "resolve",
|
method: "resolve",
|
||||||
"example": exampleNumber
|
example: exampleNumber
|
||||||
}));
|
}));
|
||||||
|
|
||||||
document.getElementById("fetch-claim-uri").value = data;
|
document.getElementById("fetch-claim-uri").value = data;
|
||||||
|
@ -165,10 +167,10 @@ curl --header <span class="token string">"Content-Type: application/json"</span>
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
send(JSON.stringify({
|
send(JSON.stringify({
|
||||||
"data": data,
|
data: data,
|
||||||
"message": "fetch metadata",
|
message: "fetch metadata",
|
||||||
"method": "publish",
|
method: "publish",
|
||||||
"example": exampleNumber
|
example: exampleNumber
|
||||||
}));
|
}));
|
||||||
|
|
||||||
document.getElementById("playground-results").innerHTML = `
|
document.getElementById("playground-results").innerHTML = `
|
||||||
|
@ -186,10 +188,10 @@ curl --header <span class="token string">"Content-Type: application/json"</span>
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
send(JSON.stringify({
|
send(JSON.stringify({
|
||||||
"claim": data,
|
claim: data,
|
||||||
"message": "fetch metadata",
|
message: "fetch metadata",
|
||||||
"method": "wallet_send",
|
method: "wallet_send",
|
||||||
"example": exampleNumber
|
example: exampleNumber
|
||||||
}));
|
}));
|
||||||
|
|
||||||
document.getElementById("fetch-claim-uri").value = data;
|
document.getElementById("fetch-claim-uri").value = data;
|
||||||
|
@ -269,7 +271,7 @@ const handleExamples = debounce(event => {
|
||||||
document.getElementById("playground-results").removeAttribute("style");
|
document.getElementById("playground-results").removeAttribute("style");
|
||||||
|
|
||||||
send(JSON.stringify({
|
send(JSON.stringify({
|
||||||
"message": `request for ${data.action}`
|
message: `request for ${data.action}`
|
||||||
}));
|
}));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -295,7 +297,7 @@ const handleExamples = debounce(event => {
|
||||||
document.getElementById("playground-results").removeAttribute("style");
|
document.getElementById("playground-results").removeAttribute("style");
|
||||||
|
|
||||||
send(JSON.stringify({
|
send(JSON.stringify({
|
||||||
"message": `request for ${data.action}`
|
message: `request for ${data.action}`
|
||||||
}));
|
}));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -324,7 +326,7 @@ const handleExamples = debounce(event => {
|
||||||
document.getElementById("playground-results").removeAttribute("style");
|
document.getElementById("playground-results").removeAttribute("style");
|
||||||
|
|
||||||
send(JSON.stringify({
|
send(JSON.stringify({
|
||||||
"message": `request for ${data.action}`
|
message: `request for ${data.action}`
|
||||||
}));
|
}));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -77,6 +77,6 @@ export default (state, emit) => {
|
||||||
|
|
||||||
// H E L P E R
|
// H E L P E R
|
||||||
|
|
||||||
String.prototype.capitalize = function () {
|
String.prototype.capitalize = function() {
|
||||||
return this.charAt(0).toUpperCase() + this.slice(1);
|
return this.charAt(0).toUpperCase() + this.slice(1);
|
||||||
};
|
};
|
||||||
|
|
8
app/dist/scripts/app.js
vendored
8
app/dist/scripts/app.js
vendored
|
@ -29,7 +29,7 @@ if ( // Toggle beta message
|
||||||
localStorage.getItem("hide lbry alert") === "true" // cannot set Booleans for some reason
|
localStorage.getItem("hide lbry alert") === "true" // cannot set Booleans for some reason
|
||||||
) document.querySelector("#alert-beta").style.display = "none";
|
) document.querySelector("#alert-beta").style.display = "none";
|
||||||
|
|
||||||
document.querySelector("#close-alert").onclick = function () {
|
document.querySelector("#close-alert").onclick = function() {
|
||||||
localStorage.setItem("hide lbry alert", true);
|
localStorage.setItem("hide lbry alert", true);
|
||||||
document.querySelector("#alert-beta").style.display = "none";
|
document.querySelector("#alert-beta").style.display = "none";
|
||||||
};
|
};
|
||||||
|
@ -60,11 +60,12 @@ document.querySelectorAll("a[href^='#']").forEach(anchor => {
|
||||||
// Newsletter
|
// Newsletter
|
||||||
document.querySelector("[data-action='subscribe to newsletter']").onclick = () => {
|
document.querySelector("[data-action='subscribe to newsletter']").onclick = () => {
|
||||||
const email = document.getElementById("emailAddress").value;
|
const email = document.getElementById("emailAddress").value;
|
||||||
|
|
||||||
if (!validateEmail(email)) return;
|
if (!validateEmail(email)) return;
|
||||||
|
|
||||||
send(JSON.stringify({
|
send(JSON.stringify({
|
||||||
"email": email,
|
email: email,
|
||||||
"message": "subscribe"
|
message: "subscribe"
|
||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -88,5 +89,6 @@ function scrollToElementOnLoad() {
|
||||||
|
|
||||||
function validateEmail(email) {
|
function validateEmail(email) {
|
||||||
const emailRegex = /^(([^<>()[\].,;:\s@"]+(\.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\\.,;:\s@"]{2,})$/i;
|
const emailRegex = /^(([^<>()[\].,;:\s@"]+(\.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\\.,;:\s@"]{2,})$/i;
|
||||||
|
|
||||||
return emailRegex.test(String(email));
|
return emailRegex.test(String(email));
|
||||||
}
|
}
|
||||||
|
|
74
app/dist/scripts/plugins/jets.js
vendored
74
app/dist/scripts/plugins/jets.js
vendored
|
@ -1,14 +1,14 @@
|
||||||
/* global define */
|
/* global define */
|
||||||
|
|
||||||
/*! Jets.js - v0.14.1 - 2018-06-22
|
/* ! Jets.js - v0.14.1 - 2018-06-22
|
||||||
* http://NeXTs.github.com/Jets.js/
|
* http://NeXTs.github.com/Jets.js/
|
||||||
* Copyright (c) 2015 Denis Lukov; Refactored 2018 Paul Anthony Webb; Licensed MIT */
|
* Copyright (c) 2015 Denis Lukov; Refactored 2018 Paul Anthony Webb; Licensed MIT */
|
||||||
|
|
||||||
(function (root, definition) {
|
(function(root, definition) {
|
||||||
if (typeof module !== "undefined") module.exports = definition();
|
if (typeof module !== "undefined") module.exports = definition();
|
||||||
else if (typeof define === "function" && typeof define.amd === "object") define(definition);
|
else if (typeof define === "function" && typeof define.amd === "object") define(definition);
|
||||||
else root["Jets"] = definition();
|
else root["Jets"] = definition();
|
||||||
}(this, function () {
|
}(this, function() {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function Jets(opts) {
|
function Jets(opts) {
|
||||||
|
@ -21,6 +21,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
self.options = {};
|
self.options = {};
|
||||||
|
|
||||||
[
|
[
|
||||||
|
@ -58,23 +59,23 @@
|
||||||
self.search = (search_query, optional_column) => {
|
self.search = (search_query, optional_column) => {
|
||||||
const new_search_query =
|
const new_search_query =
|
||||||
self.options.callSearchManually &&
|
self.options.callSearchManually &&
|
||||||
typeof search_query !== "undefined"
|
typeof search_query !== "undefined" ?
|
||||||
? search_query
|
search_query :
|
||||||
: self.search_tag
|
self.search_tag ?
|
||||||
? self.search_tag.value
|
self.search_tag.value :
|
||||||
: "";
|
"";
|
||||||
|
|
||||||
if (last_search_query === (last_search_query = new_search_query)) return;
|
if (last_search_query === (last_search_query = new_search_query)) return;
|
||||||
(0, self._applyCSS(last_search_query, optional_column));
|
(0, self._applyCSS(last_search_query, optional_column));
|
||||||
self.options.didSearch && self.options.didSearch(last_search_query);
|
self.options.didSearch && self.options.didSearch(last_search_query);
|
||||||
};
|
};
|
||||||
|
|
||||||
self._onSearch = function (event) {
|
self._onSearch = function(event) {
|
||||||
if (event.type === "keydown") return setTimeout(self.search, 0);
|
if (event.type === "keydown") return setTimeout(self.search, 0);
|
||||||
self.search();
|
self.search();
|
||||||
};
|
};
|
||||||
|
|
||||||
self.destroy = function () {
|
self.destroy = function() {
|
||||||
if (!self.options.callSearchManually) self._processEventListeners("remove");
|
if (!self.options.callSearchManually) self._processEventListeners("remove");
|
||||||
self._destroy();
|
self._destroy();
|
||||||
};
|
};
|
||||||
|
@ -88,17 +89,17 @@
|
||||||
|
|
||||||
Jets.prototype = {
|
Jets.prototype = {
|
||||||
constructor: Jets,
|
constructor: Jets,
|
||||||
_processEventListeners: function (action) {
|
_processEventListeners: function(action) {
|
||||||
[
|
[
|
||||||
"change",
|
"change",
|
||||||
"input",
|
"input",
|
||||||
"keydown"
|
"keydown"
|
||||||
].forEach(function (event_type) {
|
].forEach(function(event_type) {
|
||||||
this.search_tag[action + "EventListener"](event_type, this._onSearch);
|
this.search_tag[action + "EventListener"](event_type, this._onSearch);
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
},
|
},
|
||||||
|
|
||||||
_applyCSS: function (search_query, optional_column) {
|
_applyCSS: function(search_query, optional_column) {
|
||||||
const options = this.options;
|
const options = this.options;
|
||||||
|
|
||||||
const search_phrase = this.replaceDiacritics(
|
const search_phrase = this.replaceDiacritics(
|
||||||
|
@ -108,9 +109,9 @@
|
||||||
.replace(/\s\s+/g, " ")
|
.replace(/\s\s+/g, " ")
|
||||||
).replace(/\\/g, "\\\\");
|
).replace(/\\/g, "\\\\");
|
||||||
|
|
||||||
const words = options.searchSelectorMode
|
const words = options.searchSelectorMode ?
|
||||||
? search_phrase.split(" ").filter((item, pos, arr) => arr.indexOf(item) === pos)
|
search_phrase.split(" ").filter((item, pos, arr) => arr.indexOf(item) === pos) :
|
||||||
: [search_phrase];
|
[search_phrase];
|
||||||
|
|
||||||
const is_strict_selector = options.searchSelectorMode === "AND";
|
const is_strict_selector = options.searchSelectorMode === "AND";
|
||||||
const selectors = new Array(words.length);
|
const selectors = new Array(words.length);
|
||||||
|
@ -134,27 +135,30 @@
|
||||||
this.styleTag.innerHTML = search_phrase.length ? css_rule : "";
|
this.styleTag.innerHTML = search_phrase.length ? css_rule : "";
|
||||||
},
|
},
|
||||||
|
|
||||||
_addStyleTag: function () {
|
_addStyleTag: function() {
|
||||||
this.styleTag = document.createElement("style");
|
this.styleTag = document.createElement("style");
|
||||||
document.head.appendChild(this.styleTag);
|
document.head.appendChild(this.styleTag);
|
||||||
},
|
},
|
||||||
|
|
||||||
_getText: function (tag) {
|
_getText: function(tag) {
|
||||||
return tag && (tag.textContent || tag.innerText) || "";
|
return tag && (tag.textContent || tag.innerText) || "";
|
||||||
},
|
},
|
||||||
|
|
||||||
_sanitize: function (text) {
|
_sanitize: function(text) {
|
||||||
return this.replaceDiacritics(text).trim().replace(/\s+/g, " ").toLowerCase();
|
return this.replaceDiacritics(text).trim()
|
||||||
|
.replace(/\s+/g, " ")
|
||||||
|
.toLowerCase();
|
||||||
},
|
},
|
||||||
|
|
||||||
_getContentTags: function (query) {
|
_getContentTags: function(query) {
|
||||||
return Array.prototype.slice.call(this.content_tag).reduce((all, elem) => {
|
return Array.prototype.slice.call(this.content_tag).reduce((all, elem) => {
|
||||||
return all.concat(Array.prototype.slice.call(elem.querySelectorAll(query || ":scope > *")));
|
return all.concat(Array.prototype.slice.call(elem.querySelectorAll(query || ":scope > *")));
|
||||||
}, []);
|
}, []);
|
||||||
},
|
},
|
||||||
|
|
||||||
_handleSpecificColumns: function (tag, set) {
|
_handleSpecificColumns: function(tag, set) {
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
if (!self.options.searchInSpecificColumn) return;
|
if (!self.options.searchInSpecificColumn) return;
|
||||||
|
|
||||||
Array.prototype.slice.call(tag.children).map((children, i) => {
|
Array.prototype.slice.call(tag.children).map((children, i) => {
|
||||||
|
@ -168,7 +172,7 @@
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
_setJets: function (query, force) {
|
_setJets: function(query, force) {
|
||||||
const self = this;
|
const self = this;
|
||||||
const tags = self._getContentTags(force ? "" : query);
|
const tags = self._getContentTags(force ? "" : query);
|
||||||
let text;
|
let text;
|
||||||
|
@ -176,19 +180,19 @@
|
||||||
for (const tag of tags) {
|
for (const tag of tags) {
|
||||||
if (tag.hasAttribute("data-jets") && !force) continue;
|
if (tag.hasAttribute("data-jets") && !force) continue;
|
||||||
|
|
||||||
text = this.options.manualContentHandling
|
text = this.options.manualContentHandling ?
|
||||||
? this.options.manualContentHandling(tag)
|
this.options.manualContentHandling(tag) :
|
||||||
: self.options.columns &&
|
self.options.columns &&
|
||||||
self.options.columns.length
|
self.options.columns.length ?
|
||||||
? self.options.columns.map(column => self._getText(tag.children[column])).join(" ")
|
self.options.columns.map(column => self._getText(tag.children[column])).join(" ") :
|
||||||
: self._getText(tag);
|
self._getText(tag);
|
||||||
|
|
||||||
tag.setAttribute("data-jets", self._sanitize(text));
|
tag.setAttribute("data-jets", self._sanitize(text));
|
||||||
self._handleSpecificColumns(tag, "set");
|
self._handleSpecificColumns(tag, "set");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
replaceDiacritics: function (text) {
|
replaceDiacritics: function(text) {
|
||||||
const diacritics = this.options.diacriticsMap;
|
const diacritics = this.options.diacriticsMap;
|
||||||
|
|
||||||
for (const letter in diacritics) if (diacritics.hasOwnProperty(letter)) {
|
for (const letter in diacritics) if (diacritics.hasOwnProperty(letter)) {
|
||||||
|
@ -200,11 +204,11 @@
|
||||||
return text;
|
return text;
|
||||||
},
|
},
|
||||||
|
|
||||||
update: function (force) {
|
update: function(force) {
|
||||||
this._setJets(":scope > :not([data-jets])", force);
|
this._setJets(":scope > :not([data-jets])", force);
|
||||||
},
|
},
|
||||||
|
|
||||||
_destroy: function () {
|
_destroy: function() {
|
||||||
this.styleTag.parentNode && document.head.removeChild(this.styleTag);
|
this.styleTag.parentNode && document.head.removeChild(this.styleTag);
|
||||||
const tags = this._getContentTags();
|
const tags = this._getContentTags();
|
||||||
|
|
||||||
|
@ -217,20 +221,22 @@
|
||||||
|
|
||||||
// :scope polyfill
|
// :scope polyfill
|
||||||
// https://stackoverflow.com/a/17989803/1221082
|
// https://stackoverflow.com/a/17989803/1221082
|
||||||
;(function (doc, proto) {
|
;(function(doc, proto) {
|
||||||
try {
|
try {
|
||||||
doc.querySelector(":scope body");
|
doc.querySelector(":scope body");
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
["querySelector", "querySelectorAll"].forEach(method => {
|
["querySelector", "querySelectorAll"].forEach(method => {
|
||||||
const nativ = proto[method];
|
const nativ = proto[method];
|
||||||
|
|
||||||
proto[method] = function (selectors) {
|
proto[method] = function(selectors) {
|
||||||
if (/(^|,)\s*:scope/.test(selectors)) {
|
if (/(^|,)\s*:scope/.test(selectors)) {
|
||||||
const id = this.getAttribute("id");
|
const id = this.getAttribute("id");
|
||||||
|
|
||||||
this.id = "ID_" + Date.now();
|
this.id = "ID_" + Date.now();
|
||||||
selectors = selectors.replace(/((^|,)\s*):scope/g, "$1#" + this.getAttribute("id"));
|
selectors = selectors.replace(/((^|,)\s*):scope/g, "$1#" + this.getAttribute("id"));
|
||||||
|
|
||||||
const result = doc[method](selectors);
|
const result = doc[method](selectors);
|
||||||
|
|
||||||
this.id = id;
|
this.id = id;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -44,9 +44,9 @@ module.exports = exports = (data, socket) => {
|
||||||
let apiRequestMethod = "";
|
let apiRequestMethod = "";
|
||||||
|
|
||||||
if (allowedMethods.indexOf(resolveMethod) < 0) return socket.send(JSON.stringify({
|
if (allowedMethods.indexOf(resolveMethod) < 0) return socket.send(JSON.stringify({
|
||||||
"details": "Unallowed resolve method for tutorial",
|
details: "Unallowed resolve method for tutorial",
|
||||||
"message": "notification",
|
message: "notification",
|
||||||
"type": "error"
|
type: "error"
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|
||||||
|
@ -73,9 +73,9 @@ module.exports = exports = (data, socket) => {
|
||||||
return uploadImage(body.file_path).then(uploadResponse => {
|
return uploadImage(body.file_path).then(uploadResponse => {
|
||||||
if (!uploadResponse.status || uploadResponse.status !== "ok") {
|
if (!uploadResponse.status || uploadResponse.status !== "ok") {
|
||||||
socket.send(JSON.stringify({
|
socket.send(JSON.stringify({
|
||||||
"details": "Image upload failed",
|
details: "Image upload failed",
|
||||||
"message": "notification",
|
message: "notification",
|
||||||
"type": "error"
|
type: "error"
|
||||||
}));
|
}));
|
||||||
|
|
||||||
if (process.env.NODE_ENV !== "development") {
|
if (process.env.NODE_ENV !== "development") {
|
||||||
|
@ -94,9 +94,9 @@ module.exports = exports = (data, socket) => {
|
||||||
return publishMeme(body).then(publishResponse => {
|
return publishMeme(body).then(publishResponse => {
|
||||||
if (publishResponse.error) {
|
if (publishResponse.error) {
|
||||||
socket.send(JSON.stringify({
|
socket.send(JSON.stringify({
|
||||||
"details": "Meme publish failed",
|
details: "Meme publish failed",
|
||||||
"message": "notification",
|
message: "notification",
|
||||||
"type": "error"
|
type: "error"
|
||||||
}));
|
}));
|
||||||
|
|
||||||
if (process.env.NODE_ENV !== "development") {
|
if (process.env.NODE_ENV !== "development") {
|
||||||
|
@ -126,14 +126,14 @@ module.exports = exports = (data, socket) => {
|
||||||
`;
|
`;
|
||||||
|
|
||||||
return socket.send(JSON.stringify({
|
return socket.send(JSON.stringify({
|
||||||
"example": data.example,
|
example: data.example,
|
||||||
"html": raw(`
|
html: raw(`
|
||||||
<h3>Response</h3>
|
<h3>Response</h3>
|
||||||
${explorerNotice}
|
${explorerNotice}
|
||||||
<pre><code class="language-json">${renderedCode}</code></pre>
|
<pre><code class="language-json">${renderedCode}</code></pre>
|
||||||
`),
|
`),
|
||||||
"message": "show result",
|
message: "show result",
|
||||||
"selector": `#example${data.example}-result`
|
selector: `#example${data.example}-result`
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -160,13 +160,13 @@ module.exports = exports = (data, socket) => {
|
||||||
|
|
||||||
if (!approvedIds.includes(claimAddress)) {
|
if (!approvedIds.includes(claimAddress)) {
|
||||||
return socket.send(JSON.stringify({
|
return socket.send(JSON.stringify({
|
||||||
"example": data.example,
|
example: data.example,
|
||||||
"html": raw(`
|
html: raw(`
|
||||||
<h3>Response</h3>
|
<h3>Response</h3>
|
||||||
<pre><code class="language-text">Tipping creators not in the whitelist for this example is not allowed.</code></pre>
|
<pre><code class="language-text">Tipping creators not in the whitelist for this example is not allowed.</code></pre>
|
||||||
`),
|
`),
|
||||||
"message": "show result",
|
message: "show result",
|
||||||
"selector": `#example${data.example}-result`
|
selector: `#example${data.example}-result`
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -227,14 +227,14 @@ module.exports = exports = (data, socket) => {
|
||||||
);
|
);
|
||||||
|
|
||||||
return socket.send(JSON.stringify({
|
return socket.send(JSON.stringify({
|
||||||
"example": data.example,
|
example: data.example,
|
||||||
"html": raw(`
|
html: raw(`
|
||||||
<h3>Response</h3>
|
<h3>Response</h3>
|
||||||
${explorerNotice}
|
${explorerNotice}
|
||||||
<pre><code class="language-json">${renderedCode}</code></pre>
|
<pre><code class="language-json">${renderedCode}</code></pre>
|
||||||
`),
|
`),
|
||||||
"message": "show result",
|
message: "show result",
|
||||||
"selector": `#example${data.example}-result`
|
selector: `#example${data.example}-result`
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -280,7 +280,10 @@ function generateGitHubFeed(displayGitHubFeed) {
|
||||||
|
|
||||||
displayGitHubFeed(`
|
displayGitHubFeed(`
|
||||||
<h3>GitHub</h3>
|
<h3>GitHub</h3>
|
||||||
<h5 class="last-updated">Last updated: ${new Date().format("YYYY-MM-DD").replace(/-/g, "·")} at ${new Date().add(-4, "hours").format("UTC:H:mm:ss A").toLowerCase()} EST</h5>
|
<h5 class="last-updated">Last updated: ${new Date().format("YYYY-MM-DD")
|
||||||
|
.replace(/-/g, "·")} at ${new Date().add(-4, "hours")
|
||||||
|
.format("UTC:H:mm:ss A")
|
||||||
|
.toLowerCase()} EST</h5>
|
||||||
|
|
||||||
${renderedEvents.join("")}
|
${renderedEvents.join("")}
|
||||||
`);
|
`);
|
||||||
|
@ -336,13 +339,14 @@ function updateGithubFeed() {
|
||||||
else callback();
|
else callback();
|
||||||
});
|
});
|
||||||
}, () => client.zremrangebyrank("events", 0, -51)); // Keep the latest 50 events
|
}, () => client.zremrangebyrank("events", 0, -51)); // Keep the latest 50 events
|
||||||
}).catch(err => {
|
})
|
||||||
logSlackError(
|
.catch(err => {
|
||||||
"\n" +
|
logSlackError(
|
||||||
|
"\n" +
|
||||||
"> *GITHUB FEED ERROR:* ```" + JSON.parse(JSON.stringify(err)) + "```" + "\n" +
|
"> *GITHUB FEED ERROR:* ```" + JSON.parse(JSON.stringify(err)) + "```" + "\n" +
|
||||||
"> _Cause: GitHub feed refresh_\n"
|
"> _Cause: GitHub feed refresh_\n"
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,5 +12,6 @@ const crypto = require("crypto");
|
||||||
|
|
||||||
module.exports = exports = len => {
|
module.exports = exports = len => {
|
||||||
if (!Number.isFinite(len)) throw new TypeError("Expected a finite number");
|
if (!Number.isFinite(len)) throw new TypeError("Expected a finite number");
|
||||||
return crypto.randomBytes(Math.ceil(len / 2)).toString("hex").slice(0, len);
|
return crypto.randomBytes(Math.ceil(len / 2)).toString("hex")
|
||||||
|
.slice(0, len);
|
||||||
};
|
};
|
||||||
|
|
|
@ -59,6 +59,7 @@ function superscript(state, silent) {
|
||||||
|
|
||||||
if (content.match(regexForIds)) {
|
if (content.match(regexForIds)) {
|
||||||
const theLink = supText.match(regexForIds)[0].replace("(#", "").replace(")", "");
|
const theLink = supText.match(regexForIds)[0].replace("(#", "").replace(")", "");
|
||||||
|
|
||||||
token.attrPush([ "id", theLink ]);
|
token.attrPush([ "id", theLink ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,6 +67,7 @@ function superscript(state, silent) {
|
||||||
|
|
||||||
if (content.match(regexForIds)) {
|
if (content.match(regexForIds)) {
|
||||||
const theText = supText.match(regexForTextBeforeLink)[0];
|
const theText = supText.match(regexForTextBeforeLink)[0];
|
||||||
|
|
||||||
token.content = theText;
|
token.content = theText;
|
||||||
} else token.content = supText;
|
} else token.content = supText;
|
||||||
|
|
||||||
|
|
|
@ -29,9 +29,9 @@ module.exports = exports = (socket, action) => {
|
||||||
case (action.message === "landed on homepage"):
|
case (action.message === "landed on homepage"):
|
||||||
generateGitHubFeed(result => {
|
generateGitHubFeed(result => {
|
||||||
socket.send(JSON.stringify({
|
socket.send(JSON.stringify({
|
||||||
"html": result,
|
html: result,
|
||||||
"message": "updated html",
|
message: "updated html",
|
||||||
"selector": "#github-feed"
|
selector: "#github-feed"
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
@ -39,9 +39,9 @@ module.exports = exports = (socket, action) => {
|
||||||
case (action.message === "landed on playground"):
|
case (action.message === "landed on playground"):
|
||||||
generateContent(1, result => {
|
generateContent(1, result => {
|
||||||
socket.send(JSON.stringify({
|
socket.send(JSON.stringify({
|
||||||
"html": result,
|
html: result,
|
||||||
"message": "updated html",
|
message: "updated html",
|
||||||
"selector": "#playground-loader"
|
selector: "#playground-loader"
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
@ -49,9 +49,9 @@ module.exports = exports = (socket, action) => {
|
||||||
case (action.message === "request for playground, example 1"):
|
case (action.message === "request for playground, example 1"):
|
||||||
generateContent(1, result => {
|
generateContent(1, result => {
|
||||||
socket.send(JSON.stringify({
|
socket.send(JSON.stringify({
|
||||||
"html": result,
|
html: result,
|
||||||
"message": "updated html",
|
message: "updated html",
|
||||||
"selector": "#playground-loader"
|
selector: "#playground-loader"
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
@ -63,9 +63,9 @@ module.exports = exports = (socket, action) => {
|
||||||
case (action.message === "request for playground, example 3"):
|
case (action.message === "request for playground, example 3"):
|
||||||
generateContent(3, result => {
|
generateContent(3, result => {
|
||||||
socket.send(JSON.stringify({
|
socket.send(JSON.stringify({
|
||||||
"html": result,
|
html: result,
|
||||||
"message": "updated html",
|
message: "updated html",
|
||||||
"selector": "#playground-loader"
|
selector: "#playground-loader"
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
@ -291,10 +291,10 @@ function generateMemeCreator(socket) {
|
||||||
`;
|
`;
|
||||||
|
|
||||||
return socket.send(JSON.stringify({
|
return socket.send(JSON.stringify({
|
||||||
"example": 2,
|
example: 2,
|
||||||
"html": memeCreator,
|
html: memeCreator,
|
||||||
"message": "updated html",
|
message: "updated html",
|
||||||
"selector": "#playground-loader"
|
selector: "#playground-loader"
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -315,9 +315,9 @@ function newsletterSubscribe(data, socket) {
|
||||||
const email = data.email;
|
const email = data.email;
|
||||||
|
|
||||||
if (!validateEmail(email)) return socket.send(JSON.stringify({
|
if (!validateEmail(email)) return socket.send(JSON.stringify({
|
||||||
"html": "Your email is invalid",
|
html: "Your email is invalid",
|
||||||
"message": "updated html",
|
message: "updated html",
|
||||||
"selector": "#emailMessage"
|
selector: "#emailMessage"
|
||||||
}));
|
}));
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
@ -333,9 +333,9 @@ function newsletterSubscribe(data, socket) {
|
||||||
);
|
);
|
||||||
|
|
||||||
return resolve(socket.send(JSON.stringify({
|
return resolve(socket.send(JSON.stringify({
|
||||||
"html": "Something is terribly wrong",
|
html: "Something is terribly wrong",
|
||||||
"message": "updated html",
|
message: "updated html",
|
||||||
"selector": "#emailMessage"
|
selector: "#emailMessage"
|
||||||
})));
|
})));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,36 +349,38 @@ function newsletterSubscribe(data, socket) {
|
||||||
);
|
);
|
||||||
|
|
||||||
return reject(socket.send(JSON.stringify({
|
return reject(socket.send(JSON.stringify({
|
||||||
"html": body.error,
|
html: body.error,
|
||||||
"message": "updated html",
|
message: "updated html",
|
||||||
"selector": "#emailMessage"
|
selector: "#emailMessage"
|
||||||
})));
|
})));
|
||||||
}
|
}
|
||||||
|
|
||||||
return resolve(socket.send(JSON.stringify({
|
return resolve(socket.send(JSON.stringify({
|
||||||
"html": "Thank you! Please confirm subscription in your inbox.",
|
html: "Thank you! Please confirm subscription in your inbox.",
|
||||||
"message": "updated html",
|
message: "updated html",
|
||||||
"selector": "#emailMessage"
|
selector: "#emailMessage"
|
||||||
})));
|
})));
|
||||||
}).catch(welp => {
|
})
|
||||||
if (welp.statusCode === 409) {
|
.catch(welp => {
|
||||||
logSlackError(
|
if (welp.statusCode === 409) {
|
||||||
"\n" +
|
logSlackError(
|
||||||
|
"\n" +
|
||||||
"> *NEWSLETTER ERROR:* ```" + JSON.parse(JSON.stringify(welp.error)) + "```" + "\n" +
|
"> *NEWSLETTER ERROR:* ```" + JSON.parse(JSON.stringify(welp.error)) + "```" + "\n" +
|
||||||
`> _Cause: ${email} interacted with the form_\n`
|
`> _Cause: ${email} interacted with the form_\n`
|
||||||
);
|
);
|
||||||
|
|
||||||
return resolve(socket.send(JSON.stringify({
|
return resolve(socket.send(JSON.stringify({
|
||||||
"html": "You have already subscribed!",
|
html: "You have already subscribed!",
|
||||||
"message": "updated html",
|
message: "updated html",
|
||||||
"selector": "#emailMessage"
|
selector: "#emailMessage"
|
||||||
})));
|
})));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function validateEmail(email) {
|
function validateEmail(email) {
|
||||||
const emailRegex = /^(([^<>()[\].,;:\s@"]+(\.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\\.,;:\s@"]{2,})$/i;
|
const emailRegex = /^(([^<>()[\].,;:\s@"]+(\.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\\.,;:\s@"]{2,})$/i;
|
||||||
|
|
||||||
return emailRegex.test(String(email));
|
return emailRegex.test(String(email));
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,10 +51,11 @@ module.exports = exports = state => parseApiFile(state.params.wildcard).then(res
|
||||||
<script src="/assets/scripts/plugins/jets.js"></script>
|
<script src="/assets/scripts/plugins/jets.js"></script>
|
||||||
<script src="/assets/scripts/api.js"></script>
|
<script src="/assets/scripts/api.js"></script>
|
||||||
`;
|
`;
|
||||||
}).catch(() => {
|
})
|
||||||
const redirectUrl = redirects[state.href];
|
.catch(() => {
|
||||||
|
const redirectUrl = redirects[state.href];
|
||||||
|
|
||||||
return asyncHtml`
|
return asyncHtml`
|
||||||
<article class="page" itemtype="http://schema.org/BlogPosting">
|
<article class="page" itemtype="http://schema.org/BlogPosting">
|
||||||
<header class="page__header">
|
<header class="page__header">
|
||||||
<div class="page__header-wrap">
|
<div class="page__header-wrap">
|
||||||
|
@ -77,7 +78,7 @@ module.exports = exports = state => parseApiFile(state.params.wildcard).then(res
|
||||||
}, 2000);
|
}, 2000);
|
||||||
</script>
|
</script>
|
||||||
`;
|
`;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -88,6 +89,7 @@ function createApiContent(apiDetails) {
|
||||||
|
|
||||||
for (const apiDetail of apiDetails) {
|
for (const apiDetail of apiDetails) {
|
||||||
let apiDetailsReturns = "";
|
let apiDetailsReturns = "";
|
||||||
|
|
||||||
if (apiDetail.returns) apiDetailsReturns = JSON.parse(JSON.stringify(apiDetail.returns));
|
if (apiDetail.returns) apiDetailsReturns = JSON.parse(JSON.stringify(apiDetail.returns));
|
||||||
|
|
||||||
apiContent.push(`
|
apiContent.push(`
|
||||||
|
@ -165,7 +167,8 @@ function parseApiFile(urlSlug) {
|
||||||
|
|
||||||
return fetch(apiFileLink).then(() => fetch(apiFileLink, {
|
return fetch(apiFileLink).then(() => fetch(apiFileLink, {
|
||||||
cache: "no-cache" // forces a conditional request
|
cache: "no-cache" // forces a conditional request
|
||||||
})).then(res => res.json().then(body => body)); // res.status 304 = cache validated
|
}))
|
||||||
|
.then(res => res.json().then(body => body)); // res.status 304 = cache validated
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderArguments(args) {
|
function renderArguments(args) {
|
||||||
|
|
|
@ -44,6 +44,7 @@ const md = require("markdown-it")({
|
||||||
|
|
||||||
module.exports = exports = (state, emit) => { // eslint-disable-line
|
module.exports = exports = (state, emit) => { // eslint-disable-line
|
||||||
let path;
|
let path;
|
||||||
|
|
||||||
if (state.route === "resources/*") path = `resources/${state.params.wildcard}`;
|
if (state.route === "resources/*") path = `resources/${state.params.wildcard}`;
|
||||||
else path = state.params.wildcard;
|
else path = state.params.wildcard;
|
||||||
|
|
||||||
|
@ -69,6 +70,7 @@ module.exports = exports = (state, emit) => { // eslint-disable-line
|
||||||
}
|
}
|
||||||
|
|
||||||
let pageScript = "";
|
let pageScript = "";
|
||||||
|
|
||||||
if (path === "glossary") pageScript = "<script>" + fs.readFileSync("./app/components/client/glossary-scripts.js", "utf-8") + "</script>";
|
if (path === "glossary") pageScript = "<script>" + fs.readFileSync("./app/components/client/glossary-scripts.js", "utf-8") + "</script>";
|
||||||
if (path === "overview") pageScript = "<script>" + fs.readFileSync("./app/components/client/ecosystem-scripts.js", "utf-8") + "</script>";
|
if (path === "overview") pageScript = "<script>" + fs.readFileSync("./app/components/client/ecosystem-scripts.js", "utf-8") + "</script>";
|
||||||
if (path === "playground") pageScript = "<script>" + fs.readFileSync("./app/components/client/playground-scripts.js", "utf-8") + "</script>";
|
if (path === "playground") pageScript = "<script>" + fs.readFileSync("./app/components/client/playground-scripts.js", "utf-8") + "</script>";
|
||||||
|
@ -104,7 +106,9 @@ function partialFinder(markdownBody) {
|
||||||
if (!partials) return markdownBody;
|
if (!partials) return markdownBody;
|
||||||
|
|
||||||
for (const partial of partials) {
|
for (const partial of partials) {
|
||||||
const filename = decamelize(partial, "-").replace("<", "").replace("/>", "").trim();
|
const filename = decamelize(partial, "-").replace("<", "")
|
||||||
|
.replace("/>", "")
|
||||||
|
.trim();
|
||||||
const fileExistsTest = exists(`./app/components/${filename}.js`); // `local` results in error if used here and file !exist
|
const fileExistsTest = exists(`./app/components/${filename}.js`); // `local` results in error if used here and file !exist
|
||||||
|
|
||||||
if (!fileExistsTest)
|
if (!fileExistsTest)
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
"@babel/plugin-syntax-import-meta": "7.0.0",
|
"@babel/plugin-syntax-import-meta": "7.0.0",
|
||||||
"@babel/preset-env": "^7.1.0",
|
"@babel/preset-env": "^7.1.0",
|
||||||
"@babel/register": "^7.0.0",
|
"@babel/register": "^7.0.0",
|
||||||
"@inc/eslint-config": "^1.0.4",
|
"@inc/eslint-config": "^1.0.5",
|
||||||
"eslint": "^5.6.1",
|
"eslint": "^5.6.1",
|
||||||
"husky": "^1.1.1",
|
"husky": "^1.1.1",
|
||||||
"nodemon": "^1.18.4",
|
"nodemon": "^1.18.4",
|
||||||
|
|
|
@ -59,7 +59,7 @@ fastify.ready(err => {
|
||||||
|
|
||||||
// B E G I N
|
// B E G I N
|
||||||
|
|
||||||
const start = async () => {
|
const start = async() => {
|
||||||
try {
|
try {
|
||||||
await fastify.listen(process.env.PORT || 8080, process.env.IP || "0.0.0.0");
|
await fastify.listen(process.env.PORT || 8080, process.env.IP || "0.0.0.0");
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
Loading…
Reference in a new issue