This commit is contained in:
2021-01-16 23:55:27 -05:00
commit 10d10079aa
8070 changed files with 386150 additions and 0 deletions

552
nodejs/public/js/ICanHaz.js Executable file
View File

@ -0,0 +1,552 @@
/*!
ICanHaz.js version 0.10.2 -- by @HenrikJoreteg
More info at: http://icanhazjs.com
*/
(function () {
/*
mustache.js — Logic-less templates in JavaScript
See http://mustache.github.com/ for more info.
*/
var Mustache = function () {
var _toString = Object.prototype.toString;
Array.isArray = Array.isArray || function (obj) {
return _toString.call(obj) == "[object Array]";
}
var _trim = String.prototype.trim, trim;
if (_trim) {
trim = function (text) {
return text == null ? "" : _trim.call(text);
}
} else {
var trimLeft, trimRight;
// IE doesn't match non-breaking spaces with \s.
if ((/\S/).test("\xA0")) {
trimLeft = /^[\s\xA0]+/;
trimRight = /[\s\xA0]+$/;
} else {
trimLeft = /^\s+/;
trimRight = /\s+$/;
}
trim = function (text) {
return text == null ? "" :
text.toString().replace(trimLeft, "").replace(trimRight, "");
}
}
var escapeMap = {
"&": "&",
"<": "&lt;",
">": "&gt;",
'"': '&quot;',
"'": '&#39;'
};
function escapeHTML(string) {
return String(string).replace(/&(?!\w+;)|[<>"']/g, function (s) {
return escapeMap[s] || s;
});
}
var regexCache = {};
var Renderer = function () {};
Renderer.prototype = {
otag: "<<",
ctag: ">>",
pragmas: {},
buffer: [],
pragmas_implemented: {
"IMPLICIT-ITERATOR": true
},
context: {},
render: function (template, context, partials, in_recursion) {
// reset buffer & set context
if (!in_recursion) {
this.context = context;
this.buffer = []; // TODO: make this non-lazy
}
// fail fast
if (!this.includes("", template)) {
if (in_recursion) {
return template;
} else {
this.send(template);
return;
}
}
// get the pragmas together
template = this.render_pragmas(template);
// render the template
var html = this.render_section(template, context, partials);
// render_section did not find any sections, we still need to render the tags
if (html === false) {
html = this.render_tags(template, context, partials, in_recursion);
}
if (in_recursion) {
return html;
} else {
this.sendLines(html);
}
},
/*
Sends parsed lines
*/
send: function (line) {
if (line !== "") {
this.buffer.push(line);
}
},
sendLines: function (text) {
if (text) {
var lines = text.split("\n");
for (var i = 0; i < lines.length; i++) {
this.send(lines[i]);
}
}
},
/*
Looks for %PRAGMAS
*/
render_pragmas: function (template) {
// no pragmas
if (!this.includes("%", template)) {
return template;
}
var that = this;
var regex = this.getCachedRegex("render_pragmas", function (otag, ctag) {
return new RegExp(otag + "%([\\w-]+) ?([\\w]+=[\\w]+)?" + ctag, "g");
});
return template.replace(regex, function (match, pragma, options) {
if (!that.pragmas_implemented[pragma]) {
throw({message:
"This implementation of mustache doesn't understand the '" +
pragma + "' pragma"});
}
that.pragmas[pragma] = {};
if (options) {
var opts = options.split("=");
that.pragmas[pragma][opts[0]] = opts[1];
}
return "";
// ignore unknown pragmas silently
});
},
/*
Tries to find a partial in the curent scope and render it
*/
render_partial: function (name, context, partials) {
name = trim(name);
if (!partials || partials[name] === undefined) {
throw({message: "unknown_partial '" + name + "'"});
}
if (!context || typeof context[name] != "object") {
return this.render(partials[name], context, partials, true);
}
return this.render(partials[name], context[name], partials, true);
},
/*
Renders inverted (^) and normal (#) sections
*/
render_section: function (template, context, partials) {
if (!this.includes("#", template) && !this.includes("^", template)) {
// did not render anything, there were no sections
return false;
}
var that = this;
var regex = this.getCachedRegex("render_section", function (otag, ctag) {
// This regex matches _the first_ section ({{#foo}}{{/foo}}), and captures the remainder
return new RegExp(
"^([\\s\\S]*?)" + // all the crap at the beginning that is not {{*}} ($1)
otag + // {{
"(\\^|\\#)\\s*(.+)\\s*" + // #foo (# == $2, foo == $3)
ctag + // }}
"\n*([\\s\\S]*?)" + // between the tag ($2). leading newlines are dropped
otag + // {{
"\\/\\s*\\3\\s*" + // /foo (backreference to the opening tag).
ctag + // }}
"\\s*([\\s\\S]*)$", // everything else in the string ($4). leading whitespace is dropped.
"g");
});
// for each {{#foo}}{{/foo}} section do...
return template.replace(regex, function (match, before, type, name, content, after) {
// before contains only tags, no sections
var renderedBefore = before ? that.render_tags(before, context, partials, true) : "",
// after may contain both sections and tags, so use full rendering function
renderedAfter = after ? that.render(after, context, partials, true) : "",
// will be computed below
renderedContent,
value = that.find(name, context);
if (type === "^") { // inverted section
if (!value || Array.isArray(value) && value.length === 0) {
// false or empty list, render it
renderedContent = that.render(content, context, partials, true);
} else {
renderedContent = "";
}
} else if (type === "#") { // normal section
if (Array.isArray(value)) { // Enumerable, Let's loop!
renderedContent = that.map(value, function (row) {
return that.render(content, that.create_context(row), partials, true);
}).join("");
} else if (that.is_object(value)) { // Object, Use it as subcontext!
renderedContent = that.render(content, that.create_context(value),
partials, true);
} else if (typeof value == "function") {
// higher order section
renderedContent = value.call(context, content, function (text) {
return that.render(text, context, partials, true);
});
} else if (value) { // boolean section
renderedContent = that.render(content, context, partials, true);
} else {
renderedContent = "";
}
}
return renderedBefore + renderedContent + renderedAfter;
});
},
/*
Replace {{foo}} and friends with values from our view
*/
render_tags: function (template, context, partials, in_recursion) {
// tit for tat
var that = this;
var new_regex = function () {
return that.getCachedRegex("render_tags", function (otag, ctag) {
return new RegExp(otag + "(=|!|>|&|\\{|%)?([^#\\^]+?)\\1?" + ctag + "+", "g");
});
};
var regex = new_regex();
var tag_replace_callback = function (match, operator, name) {
switch(operator) {
case "!": // ignore comments
return "";
case "=": // set new delimiters, rebuild the replace regexp
that.set_delimiters(name);
regex = new_regex();
return "";
case ">": // render partial
return that.render_partial(name, context, partials);
case "{": // the triple mustache is unescaped
case "&": // & operator is an alternative unescape method
return that.find(name, context);
default: // escape the value
return escapeHTML(that.find(name, context));
}
};
var lines = template.split("\n");
for(var i = 0; i < lines.length; i++) {
lines[i] = lines[i].replace(regex, tag_replace_callback, this);
if (!in_recursion) {
this.send(lines[i]);
}
}
if (in_recursion) {
return lines.join("\n");
}
},
set_delimiters: function (delimiters) {
var dels = delimiters.split(" ");
this.otag = this.escape_regex(dels[0]);
this.ctag = this.escape_regex(dels[1]);
},
escape_regex: function (text) {
// thank you Simon Willison
if (!arguments.callee.sRE) {
var specials = [
'/', '.', '*', '+', '?', '|',
'(', ')', '[', ']', '{', '}', '\\'
];
arguments.callee.sRE = new RegExp(
'(\\' + specials.join('|\\') + ')', 'g'
);
}
return text.replace(arguments.callee.sRE, '\\$1');
},
/*
find `name` in current `context`. That is find me a value
from the view object
*/
find: function (name, context) {
name = trim(name);
// Checks whether a value is thruthy or false or 0
function is_kinda_truthy(bool) {
return bool === false || bool === 0 || bool;
}
var value;
// check for dot notation eg. foo.bar
if (name.match(/([a-z_]+)\./ig)) {
var childValue = this.walk_context(name, context);
if (is_kinda_truthy(childValue)) {
value = childValue;
}
} else {
if (is_kinda_truthy(context[name])) {
value = context[name];
} else if (is_kinda_truthy(this.context[name])) {
value = this.context[name];
}
}
if (typeof value == "function") {
return value.apply(context);
}
if (value !== undefined) {
return value;
}
// silently ignore unkown variables
return "";
},
walk_context: function (name, context) {
var path = name.split('.');
// if the var doesn't exist in current context, check the top level context
var value_context = (context[path[0]] != undefined) ? context : this.context;
var value = value_context[path.shift()];
while (value != undefined && path.length > 0) {
value_context = value;
value = value[path.shift()];
}
// if the value is a function, call it, binding the correct context
if (typeof value == "function") {
return value.apply(value_context);
}
return value;
},
// Utility methods
/* includes tag */
includes: function (needle, haystack) {
return haystack.indexOf(this.otag + needle) != -1;
},
// by @langalex, support for arrays of strings
create_context: function (_context) {
if (this.is_object(_context)) {
return _context;
} else {
var iterator = ".";
if (this.pragmas["IMPLICIT-ITERATOR"]) {
iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator;
}
var ctx = {};
ctx[iterator] = _context;
return ctx;
}
},
is_object: function (a) {
return a && typeof a == "object";
},
/*
Why, why, why? Because IE. Cry, cry cry.
*/
map: function (array, fn) {
if (typeof array.map == "function") {
return array.map(fn);
} else {
var r = [];
var l = array.length;
for(var i = 0; i < l; i++) {
r.push(fn(array[i]));
}
return r;
}
},
getCachedRegex: function (name, generator) {
var byOtag = regexCache[this.otag];
if (!byOtag) {
byOtag = regexCache[this.otag] = {};
}
var byCtag = byOtag[this.ctag];
if (!byCtag) {
byCtag = byOtag[this.ctag] = {};
}
var regex = byCtag[name];
if (!regex) {
regex = byCtag[name] = generator(this.otag, this.ctag);
}
return regex;
}
};
return({
name: "mustache.js",
version: "0.4.0",
/*
Turns a template and view into HTML
*/
to_html: function (template, view, partials, send_fun) {
var renderer = new Renderer();
if (send_fun) {
renderer.send = send_fun;
}
renderer.render(template, view || {}, partials);
if (!send_fun) {
return renderer.buffer.join("\n");
}
}
});
}();
/*!
ICanHaz.js -- by @HenrikJoreteg
*/
/*global */
(function () {
function trim(stuff) {
if (''.trim) return stuff.trim();
else return stuff.replace(/^\s+/, '').replace(/\s+$/, '');
}
// Establish the root object, `window` in the browser, or `global` on the server.
var root = this;
var ich = {
VERSION: "0.10.2",
templates: {},
// grab jquery or zepto if it's there
$: (typeof window !== 'undefined') ? window.jQuery || window.Zepto || null : null,
// public function for adding templates
// can take a name and template string arguments
// or can take an object with name/template pairs
// We're enforcing uniqueness to avoid accidental template overwrites.
// If you want a different template, it should have a different name.
addTemplate: function (name, templateString) {
if (typeof name === 'object') {
for (var template in name) {
this.addTemplate(template, name[template]);
}
return;
}
if (ich[name]) {
console.error("Invalid name: " + name + ".");
} else if (ich.templates[name]) {
console.error("Template \"" + name + " \" exists");
} else {
ich.templates[name] = templateString;
ich[name] = function (data, raw) {
data = data || {};
var result = Mustache.to_html(ich.templates[name], data, ich.templates);
return (ich.$ && !raw) ? ich.$(trim(result)) : result;
};
}
},
// clears all retrieval functions and empties cache
clearAll: function () {
for (var key in ich.templates) {
delete ich[key];
}
ich.templates = {};
},
// clears/grabs
refresh: function () {
ich.clearAll();
ich.grabTemplates();
},
// grabs templates from the DOM and caches them.
// Loop through and add templates.
// Whitespace at beginning and end of all templates inside <script> tags will
// be trimmed. If you want whitespace around a partial, add it in the parent,
// not the partial. Or do it explicitly using <br/> or &nbsp;
grabTemplates: function () {
var i,
l,
scripts = document.getElementsByTagName('script'),
script,
trash = [];
for (i = 0, l = scripts.length; i < l; i++) {
script = scripts[i];
if (script && script.innerHTML && script.id && (script.type === "text/html" || script.type === "text/x-icanhaz")) {
ich.addTemplate(script.id, trim(script.innerHTML));
trash.unshift(script);
}
}
for (i = 0, l = trash.length; i < l; i++) {
trash[i].parentNode.removeChild(trash[i]);
}
}
};
// Export the ICanHaz object for **Node.js**, with
// backwards-compatibility for the old `require()` API. If we're in
// the browser, add `ich` as a global object via a string identifier,
// for Closure Compiler "advanced" mode.
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = ich;
}
exports.ich = ich;
} else {
root['ich'] = ich;
}
if (typeof document !== 'undefined') {
if (ich.$) {
ich.$(function () {
ich.grabTemplates();
});
} else {
document.addEventListener('DOMContentLoaded', function () {
ich.grabTemplates();
}, true);
}
}
})();
})();

10951
nodejs/public/js/all.js Normal file

File diff suppressed because one or more lines are too long

5
nodejs/public/js/all.min.js vendored Normal file

File diff suppressed because one or more lines are too long

358
nodejs/public/js/app.js Executable file
View File

@ -0,0 +1,358 @@
var app = {};
app.api = (function(app){
var baseURL = '/api/'
function post(url, data, callack){
$.ajax({
type: 'POST',
url: baseURL+url,
headers:{
'auth-token': app.auth.getToken()
},
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json",
complete: function(res, text){
callack(
text !== 'success' ? res.statusText : null,
JSON.parse(res.responseText),
res.status
)
}
});
}
function put(url, data, callack){
$.ajax({
type: 'PUT',
url: baseURL+url,
headers:{
'auth-token': app.auth.getToken()
},
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json",
complete: function(res, text){
callack(
text !== 'success' ? res.statusText : null,
JSON.parse(res.responseText),
res.status
)
}
});
}
function remove(url, callack, callack2){
if(!$.isFunction(callack)) callack = callack2;
$.ajax({
type: 'delete',
url: baseURL+url,
headers:{
'auth-token': app.auth.getToken()
},
contentType: "application/json; charset=utf-8",
dataType: "json",
complete: function(res, text){
callack(
text !== 'success' ? res.statusText : null,
JSON.parse(res.responseText),
res.status
)
}
});
}
function get(url, callack){
$.ajax({
type: 'GET',
url: baseURL+url,
headers:{
'auth-token': app.auth.getToken()
},
contentType: "application/json; charset=utf-8",
dataType: "json",
complete: function(res, text){
callack(
text !== 'success' ? res.statusText : null,
JSON.parse(res.responseText),
res.status
)
}
});
}
return {post: post, get: get, put: put, delete: remove}
})(app)
app.auth = (function(app) {
var user = {}
function setToken(token){
localStorage.setItem('APIToken', token);
}
function getToken(){
return localStorage.getItem('APIToken');
}
function isLoggedIn(callack){
if(getToken()){
return app.api.get('user/me', function(error, data){
if(!error) app.auth.user = data;
return callack(error, data);
});
}else{
callack(null, false);
}
}
function logIn(args, callack){
app.api.post('auth/login', args, function(error, data){
if(data.login){
setToken(data.token);
}
callack(error, !!data.token);
});
}
function logOut(callack){
localStorage.removeItem('APIToken');
callack();
}
function makeUserFromInvite(args, callack){
app.api.post('auth/invite/'+ args.token, args, function(error, data){
if(data.login){
callack(null, data);
setToken(data.token);
}
callack(error, !!data.token);
});
}
return {
getToken: getToken,
setToken: setToken,
isLoggedIn: isLoggedIn,
logIn: logIn,
logOut: logOut,
makeUserFromInvite: makeUserFromInvite,
}
})(app);
app.user = (function(app){
function list(callack){
app.api.get('user/?detail=true', function(error, data){
callack(error, data);
})
}
function add(args, callack){
app.api.post('user/', args, function(error, data){
callack(error, data);
});
}
function remove(args, callack){
if(!confirm('Delete '+ args.uid+ 'user?')) return false;
app.api.delete('user/'+ args.uid, function(error, data){
callack(error, data);
});
}
function changePassword(args, callack){
app.api.put('users/'+ arg.uid || '', args, function(error, data){
callack(error, data);
});
}
function createInvite(callack){
app.api.post('user/invite', {}, function(error, data, status){
callack(error, data);
});
}
function consumeInvite(args){
app.api.post('/auth/invite/'+args.token, args, function(error, data){
if(data.token){
app.auth.setToken(data.token)
return callack(null, true)
}
callack(error)
});
}
return {list, remove, createInvite};
})(app);
app.host = (function(app){
function list(callack){
app.api.get('host/?detail=true', function(error, data){
callack(error, data.hosts)
});
}
function get(host, callack){
app.api.get('host/' + host, function(error, data){
callack(error, data)
});
}
function add(args, callack){
app.api.post('host/', args, function(error, data){
callack(error, data);
});
}
function edit(args, callack){
app.api.put('host/' + args.edit_host, args, function(error, data){
callack(error, data);
});
}
function remove(args, callack){
app.api.delete('host/'+ args.host, function(error, data){
callack(error, data);
})
}
return {
list: list,
get: get,
add: add,
edit: edit,
remove: remove,
}
})(app);
app.group = (function(app){
function list(callack){
app.api.get('group?detail=true', function(error, data){
callack(error, data);
});
}
function remove(args, callack){
app.api.delete('group/'+args.cn, function(error, data){
callack(error, data);
});
}
return {list, remove}
})(app)
app.util = (function(app){
function getUrlParameter(name) {
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
var results = regex.exec(location.search);
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
};
function actionMessage(message, $target, type){
message = message || '';
$target = $($target.closest('div.card').find('.actionMessage')[0]);
type = type || 'info';
if($target.html() === message) return;
if($target.html()){
$target.slideUp('fast', function(){
$target.html('')
$target.removeClass (function (index, className) {
return (className.match (/(^|\s)bg-\S+/g) || []).join(' ');
});
if(message) actionMessage(message, $target, type);
})
return;
}else{
if(type) $target.addClass('bg-' + type);
$target.html(message).slideDown('fast');
}
}
$.fn.serializeObject = function() {
var
arr = $(this).serializeArray(),
obj = {};
for(var i = 0; i < arr.length; i++) {
if(obj[arr[i].name] === undefined) {
obj[arr[i].name] = arr[i].value;
} else {
if(!(obj[arr[i].name] instanceof Array)) {
obj[arr[i].name] = [obj[arr[i].name]];
}
obj[arr[i].name].push(arr[i].value);
}
}
return obj;
};
return {
getUrlParameter: getUrlParameter,
actionMessage: actionMessage
}
})(app);
$.holdReady( true );
if(!location.pathname.includes('/login')){
app.auth.isLoggedIn(function(error, isLoggedIn){
if(error || !isLoggedIn){
app.auth.logOut(function(){})
location.replace('/login/?redirect='+location.pathname);
}else{
$.holdReady( false );
}
})
}else{
$.holdReady( false );
}
$( document ).ready( function () {
$( 'div.row' ).fadeIn( 'slow' ); //show the page
//panel button's
$( '.fa-arrows-v' ).click( function () {
$( this ).closest( '.card' ).find( '.card-body' ).slideToggle( 'fast' );
});
$( '.glyphicon-refresh' ).each( function () {
$(this).click( function () {
tableAJAX();
});
});
});
//ajax form submit
function formAJAX( btn, del ) {
event.preventDefault(); // avoid to execute the actual submit of the form.
var $form = $(btn).closest( '[action]' ); // gets the 'form' parent
var formData = $form.find( '[name]' ).serializeObject(); // builds query formDataing
var method = $form.attr('method') || 'post';
if( !$form.validate()) {
app.util.actionMessage('Please fix the form errors.', $form, 'danger')
return false;
}
app.util.actionMessage(
'<div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div>',
$form,
'info'
);
app.api[method]($form.attr('action'), formData, function(error, data){
app.util.actionMessage(data.message, $form, error ? 'danger' : 'success'); //re-populate table
if(!error){
$form.trigger("reset");
eval($form.attr('evalAJAX')); //gets JS to run after completion
}
});
}

File diff suppressed because one or more lines are too long

577
nodejs/public/js/brands.js Normal file

File diff suppressed because one or more lines are too long

5
nodejs/public/js/brands.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,998 @@
/*!
* Font Awesome Pro 5.14.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global['fontawesome-pro-conflict-detection'] = {})));
}(this, (function (exports) { 'use strict';
function _typeof(obj) {
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
_typeof = function (obj) {
return typeof obj;
};
} else {
_typeof = function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
}
return _typeof(obj);
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === 'function') {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function (key) {
_defineProperty(target, key, source[key]);
});
}
return target;
}
var _WINDOW = {};
var _DOCUMENT = {};
try {
if (typeof window !== 'undefined') _WINDOW = window;
if (typeof document !== 'undefined') _DOCUMENT = document;
} catch (e) {}
var _ref = _WINDOW.navigator || {},
_ref$userAgent = _ref.userAgent,
userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;
var WINDOW = _WINDOW;
var DOCUMENT = _DOCUMENT;
var IS_BROWSER = !!WINDOW.document;
var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';
var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');
var functions = [];
var listener = function listener() {
DOCUMENT.removeEventListener('DOMContentLoaded', listener);
loaded = 1;
functions.map(function (fn) {
return fn();
});
};
var loaded = false;
if (IS_DOM) {
loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);
if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);
}
function domready (fn) {
if (!IS_DOM) return;
loaded ? setTimeout(fn, 0) : functions.push(fn);
}
function report (_ref) {
var nodesTested = _ref.nodesTested,
nodesFound = _ref.nodesFound;
var timedOutTests = {};
for (var key in nodesFound) {
if (!(nodesTested.conflict[key] || nodesTested.noConflict[key])) {
timedOutTests[key] = nodesFound[key];
}
}
var conflictsCount = Object.keys(nodesTested.conflict).length;
if (conflictsCount > 0) {
console.info("%cConflict".concat(conflictsCount > 1 ? 's' : '', " found:"), 'color: darkred; font-size: large');
var data = {};
for (var _key in nodesTested.conflict) {
var item = nodesTested.conflict[_key];
data[_key] = {
'tagName': item.tagName,
'src/href': item.src || item.href || 'n/a',
'innerText excerpt': item.innerText && item.innerText !== '' ? item.innerText.slice(0, 200) + '...' : '(empty)'
};
}
console.table(data);
}
var noConflictsCount = Object.keys(nodesTested.noConflict).length;
if (noConflictsCount > 0) {
console.info("%cNo conflict".concat(noConflictsCount > 1 ? 's' : '', " found with ").concat(noConflictsCount == 1 ? 'this' : 'these', ":"), 'color: green; font-size: large');
var _data = {};
for (var _key2 in nodesTested.noConflict) {
var _item = nodesTested.noConflict[_key2];
_data[_key2] = {
'tagName': _item.tagName,
'src/href': _item.src || _item.href || 'n/a',
'innerText excerpt': _item.innerText && _item.innerText !== '' ? _item.innerText.slice(0, 200) + '...' : '(empty)'
};
}
console.table(_data);
}
var timeOutCount = Object.keys(timedOutTests).length;
if (timeOutCount > 0) {
console.info("%cLeftovers--we timed out before collecting test results for ".concat(timeOutCount == 1 ? 'this' : 'these', ":"), 'color: blue; font-size: large');
var _data2 = {};
for (var _key3 in timedOutTests) {
var _item2 = timedOutTests[_key3];
_data2[_key3] = {
'tagName': _item2.tagName,
'src/href': _item2.src || _item2.href || 'n/a',
'innerText excerpt': _item2.innerText && _item2.innerText !== '' ? _item2.innerText.slice(0, 200) + '...' : '(empty)'
};
}
console.table(_data2);
}
}
var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
function createCommonjsModule(fn, module) {
return module = { exports: {} }, fn(module, module.exports), module.exports;
}
var md5 = createCommonjsModule(function (module) {
(function ($) {
/**
* Add integers, wrapping at 2^32.
* This uses 16-bit operations internally to work around bugs in interpreters.
*
* @param {number} x First integer
* @param {number} y Second integer
* @returns {number} Sum
*/
function safeAdd(x, y) {
var lsw = (x & 0xffff) + (y & 0xffff);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return msw << 16 | lsw & 0xffff;
}
/**
* Bitwise rotate a 32-bit number to the left.
*
* @param {number} num 32-bit number
* @param {number} cnt Rotation count
* @returns {number} Rotated number
*/
function bitRotateLeft(num, cnt) {
return num << cnt | num >>> 32 - cnt;
}
/**
* Basic operation the algorithm uses.
*
* @param {number} q q
* @param {number} a a
* @param {number} b b
* @param {number} x x
* @param {number} s s
* @param {number} t t
* @returns {number} Result
*/
function md5cmn(q, a, b, x, s, t) {
return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
}
/**
* Basic operation the algorithm uses.
*
* @param {number} a a
* @param {number} b b
* @param {number} c c
* @param {number} d d
* @param {number} x x
* @param {number} s s
* @param {number} t t
* @returns {number} Result
*/
function md5ff(a, b, c, d, x, s, t) {
return md5cmn(b & c | ~b & d, a, b, x, s, t);
}
/**
* Basic operation the algorithm uses.
*
* @param {number} a a
* @param {number} b b
* @param {number} c c
* @param {number} d d
* @param {number} x x
* @param {number} s s
* @param {number} t t
* @returns {number} Result
*/
function md5gg(a, b, c, d, x, s, t) {
return md5cmn(b & d | c & ~d, a, b, x, s, t);
}
/**
* Basic operation the algorithm uses.
*
* @param {number} a a
* @param {number} b b
* @param {number} c c
* @param {number} d d
* @param {number} x x
* @param {number} s s
* @param {number} t t
* @returns {number} Result
*/
function md5hh(a, b, c, d, x, s, t) {
return md5cmn(b ^ c ^ d, a, b, x, s, t);
}
/**
* Basic operation the algorithm uses.
*
* @param {number} a a
* @param {number} b b
* @param {number} c c
* @param {number} d d
* @param {number} x x
* @param {number} s s
* @param {number} t t
* @returns {number} Result
*/
function md5ii(a, b, c, d, x, s, t) {
return md5cmn(c ^ (b | ~d), a, b, x, s, t);
}
/**
* Calculate the MD5 of an array of little-endian words, and a bit length.
*
* @param {Array} x Array of little-endian words
* @param {number} len Bit length
* @returns {Array<number>} MD5 Array
*/
function binlMD5(x, len) {
/* append padding */
x[len >> 5] |= 0x80 << len % 32;
x[(len + 64 >>> 9 << 4) + 14] = len;
var i;
var olda;
var oldb;
var oldc;
var oldd;
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
for (i = 0; i < x.length; i += 16) {
olda = a;
oldb = b;
oldc = c;
oldd = d;
a = md5ff(a, b, c, d, x[i], 7, -680876936);
d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
b = md5gg(b, c, d, a, x[i], 20, -373897302);
a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
d = md5hh(d, a, b, c, x[i], 11, -358537222);
c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
a = md5ii(a, b, c, d, x[i], 6, -198630844);
d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
a = safeAdd(a, olda);
b = safeAdd(b, oldb);
c = safeAdd(c, oldc);
d = safeAdd(d, oldd);
}
return [a, b, c, d];
}
/**
* Convert an array of little-endian words to a string
*
* @param {Array<number>} input MD5 Array
* @returns {string} MD5 string
*/
function binl2rstr(input) {
var i;
var output = '';
var length32 = input.length * 32;
for (i = 0; i < length32; i += 8) {
output += String.fromCharCode(input[i >> 5] >>> i % 32 & 0xff);
}
return output;
}
/**
* Convert a raw string to an array of little-endian words
* Characters >255 have their high-byte silently ignored.
*
* @param {string} input Raw input string
* @returns {Array<number>} Array of little-endian words
*/
function rstr2binl(input) {
var i;
var output = [];
output[(input.length >> 2) - 1] = undefined;
for (i = 0; i < output.length; i += 1) {
output[i] = 0;
}
var length8 = input.length * 8;
for (i = 0; i < length8; i += 8) {
output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32;
}
return output;
}
/**
* Calculate the MD5 of a raw string
*
* @param {string} s Input string
* @returns {string} Raw MD5 string
*/
function rstrMD5(s) {
return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
}
/**
* Calculates the HMAC-MD5 of a key and some data (raw strings)
*
* @param {string} key HMAC key
* @param {string} data Raw input string
* @returns {string} Raw MD5 string
*/
function rstrHMACMD5(key, data) {
var i;
var bkey = rstr2binl(key);
var ipad = [];
var opad = [];
var hash;
ipad[15] = opad[15] = undefined;
if (bkey.length > 16) {
bkey = binlMD5(bkey, key.length * 8);
}
for (i = 0; i < 16; i += 1) {
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5c5c5c5c;
}
hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
}
/**
* Convert a raw string to a hex string
*
* @param {string} input Raw input string
* @returns {string} Hex encoded string
*/
function rstr2hex(input) {
var hexTab = '0123456789abcdef';
var output = '';
var x;
var i;
for (i = 0; i < input.length; i += 1) {
x = input.charCodeAt(i);
output += hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f);
}
return output;
}
/**
* Encode a string as UTF-8
*
* @param {string} input Input string
* @returns {string} UTF8 string
*/
function str2rstrUTF8(input) {
return unescape(encodeURIComponent(input));
}
/**
* Encodes input string as raw MD5 string
*
* @param {string} s Input string
* @returns {string} Raw MD5 string
*/
function rawMD5(s) {
return rstrMD5(str2rstrUTF8(s));
}
/**
* Encodes input string as Hex encoded string
*
* @param {string} s Input string
* @returns {string} Hex encoded string
*/
function hexMD5(s) {
return rstr2hex(rawMD5(s));
}
/**
* Calculates the raw HMAC-MD5 for the given key and data
*
* @param {string} k HMAC key
* @param {string} d Input string
* @returns {string} Raw MD5 string
*/
function rawHMACMD5(k, d) {
return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
}
/**
* Calculates the Hex encoded HMAC-MD5 for the given key and data
*
* @param {string} k HMAC key
* @param {string} d Input string
* @returns {string} Raw MD5 string
*/
function hexHMACMD5(k, d) {
return rstr2hex(rawHMACMD5(k, d));
}
/**
* Calculates MD5 value for a given string.
* If a key is provided, calculates the HMAC-MD5 value.
* Returns a Hex encoded string unless the raw argument is given.
*
* @param {string} string Input string
* @param {string} [key] HMAC key
* @param {boolean} raw Raw oytput switch
* @returns {string} MD5 output
*/
function md5(string, key, raw) {
if (!key) {
if (!raw) {
return hexMD5(string);
}
return rawMD5(string);
}
if (!raw) {
return hexHMACMD5(key, string);
}
return rawHMACMD5(key, string);
}
if (module.exports) {
module.exports = md5;
} else {
$.md5 = md5;
}
})(commonjsGlobal);
});
function md5ForNode(node) {
if (null === node || 'object' !== _typeof(node)) return undefined;
if (node.src) {
return md5(node.src);
} else if (node.href) {
return md5(node.href);
} else if (node.innerText && '' !== node.innerText) {
// eslint-disable-line yoda
return md5(node.innerText);
} else {
return undefined;
}
}
var diagScriptId = 'fa-kits-diag';
var nodeUnderTestId = 'fa-kits-node-under-test';
var md5Attr = 'data-md5';
var detectionIgnoreAttr = 'data-fa-detection-ignore';
var timeoutAttr = 'data-fa-detection-timeout';
var resultsCollectionMaxWaitAttr = 'data-fa-detection-results-collection-max-wait';
var silenceErrors = function silenceErrors(e) {
e.preventDefault();
e.stopPropagation();
};
function pollUntil(_ref) {
var _ref$fn = _ref.fn,
fn = _ref$fn === void 0 ? function () {
return true;
} : _ref$fn,
_ref$initialDuration = _ref.initialDuration,
initialDuration = _ref$initialDuration === void 0 ? 1 : _ref$initialDuration,
_ref$maxDuration = _ref.maxDuration,
maxDuration = _ref$maxDuration === void 0 ? WINDOW.FontAwesomeDetection.timeout : _ref$maxDuration,
_ref$showProgress = _ref.showProgress,
showProgress = _ref$showProgress === void 0 ? false : _ref$showProgress,
progressIndicator = _ref.progressIndicator;
return new Promise(function (resolve, reject) {
// eslint-disable-line compat/compat
function poll(duration, cumulativeDuration) {
setTimeout(function () {
var result = fn();
if (showProgress) {
console.info(progressIndicator);
}
if (!!result) {
// eslint-disable-line no-extra-boolean-cast
resolve(result);
} else {
var nextDuration = 250;
var nextCumulativeDuration = nextDuration + cumulativeDuration;
if (nextCumulativeDuration <= maxDuration) {
poll(nextDuration, nextCumulativeDuration);
} else {
reject('timeout'); // eslint-disable-line prefer-promise-reject-errors
}
}
}, duration);
}
poll(initialDuration, 0);
});
}
function detectWebfontConflicts() {
var linkTags = Array.from(DOCUMENT.getElementsByTagName('link')).filter(function (t) {
return !t.hasAttribute(detectionIgnoreAttr);
});
var styleTags = Array.from(DOCUMENT.getElementsByTagName('style')).filter(function (t) {
if (t.hasAttribute(detectionIgnoreAttr)) {
return false;
} // If the browser has loaded the FA5 CSS, let's not test that <style> element.
// Its enough that we'll be testing for traces of the corresponding JS being loaded, and testing
// this <style> would only produce a false negative anyway.
if (WINDOW.FontAwesomeConfig && t.innerText.match(new RegExp("svg:not\\(:root\\)\\.".concat(WINDOW.FontAwesomeConfig.replacementClass)))) {
return false;
}
return true;
});
function runDiag(scriptOrLinkTag, md5) {
var diagFrame = DOCUMENT.createElement('iframe'); // Using "visibility: hidden; position: absolute" instead of "display: none;" because
// Firefox will not return the expected results for getComputedStyle if our iframe has display: none.
diagFrame.setAttribute('style', 'visibility: hidden; position: absolute; height: 0; width: 0;');
var testIconId = 'fa-test-icon-' + md5;
var iTag = DOCUMENT.createElement('i');
iTag.setAttribute('class', 'fa fa-coffee');
iTag.setAttribute('id', testIconId);
var diagScript = DOCUMENT.createElement('script');
diagScript.setAttribute('id', diagScriptId); // WARNING: this function will be toString()'d and assigned to innerText of the diag script
// element that we'll be putting into a diagnostic iframe.
// That means that this code won't compile until after the outer script has run and injected
// this code into the iframe. There are some compile time errors that might occur there.
// For example, using single line (double-slash) comments like this one inside that function
// will probably cause it to choke. Chrome will show an error like this:
// Uncaught SyntaxError: Unexpected end of input
var diagScriptFun = function diagScriptFun(nodeUnderTestId, testIconId, md5, parentOrigin) {
parent.FontAwesomeDetection.__pollUntil({
fn: function fn() {
var iEl = document.getElementById(testIconId);
var computedStyle = window.getComputedStyle(iEl);
var fontFamily = computedStyle.getPropertyValue('font-family');
if (!!fontFamily.match(/FontAwesome/) || !!fontFamily.match(/Font Awesome 5/)) {
return true;
} else {
return false;
}
}
}).then(function () {
var node = document.getElementById(nodeUnderTestId);
parent.postMessage({
type: 'fontawesome-conflict',
technology: 'webfont',
href: node.href,
innerText: node.innerText,
tagName: node.tagName,
md5: md5
}, parentOrigin);
}).catch(function (e) {
var node = document.getElementById(nodeUnderTestId);
if (e === 'timeout') {
parent.postMessage({
type: 'no-conflict',
technology: 'webfont',
href: node.src,
innerText: node.innerText,
tagName: node.tagName,
md5: md5
}, parentOrigin);
} else {
console.error(e);
}
});
};
var parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;
diagScript.innerText = "(".concat(diagScriptFun.toString(), ")('").concat(nodeUnderTestId, "', '").concat(testIconId || 'foo', "', '").concat(md5, "', '").concat(parentOrigin, "');");
diagFrame.onload = function () {
diagFrame.contentWindow.addEventListener('error', silenceErrors, true);
diagFrame.contentDocument.head.appendChild(diagScript);
diagFrame.contentDocument.head.appendChild(scriptOrLinkTag);
diagFrame.contentDocument.body.appendChild(iTag);
};
domready(function () {
return DOCUMENT.body.appendChild(diagFrame);
});
}
var cssByMD5 = {};
for (var i = 0; i < linkTags.length; i++) {
var linkUnderTest = DOCUMENT.createElement('link');
linkUnderTest.setAttribute('id', nodeUnderTestId);
linkUnderTest.setAttribute('href', linkTags[i].href);
linkUnderTest.setAttribute('rel', linkTags[i].rel);
var md5ForLink = md5ForNode(linkTags[i]);
linkUnderTest.setAttribute(md5Attr, md5ForLink);
cssByMD5[md5ForLink] = linkTags[i];
runDiag(linkUnderTest, md5ForLink);
}
for (var _i = 0; _i < styleTags.length; _i++) {
var styleUnderTest = DOCUMENT.createElement('style');
styleUnderTest.setAttribute('id', nodeUnderTestId);
var md5ForStyle = md5ForNode(styleTags[_i]);
styleUnderTest.setAttribute(md5Attr, md5ForStyle);
styleUnderTest.innerText = styleTags[_i].innerText;
cssByMD5[md5ForStyle] = styleTags[_i];
runDiag(styleUnderTest, md5ForStyle);
}
return cssByMD5;
}
function detectSvgConflicts(currentScript) {
var scripts = Array.from(DOCUMENT.scripts).filter(function (t) {
return !t.hasAttribute(detectionIgnoreAttr) && t !== currentScript;
});
var scriptsByMD5 = {};
var _loop = function _loop(scriptIdx) {
var diagFrame = DOCUMENT.createElement('iframe');
diagFrame.setAttribute('style', 'display:none;');
var scriptUnderTest = DOCUMENT.createElement('script');
scriptUnderTest.setAttribute('id', nodeUnderTestId);
var md5ForScript = md5ForNode(scripts[scriptIdx]);
scriptUnderTest.setAttribute(md5Attr, md5ForScript);
scriptsByMD5[md5ForScript] = scripts[scriptIdx];
if (scripts[scriptIdx].src !== '') {
scriptUnderTest.src = scripts[scriptIdx].src;
}
if (scripts[scriptIdx].innerText !== '') {
scriptUnderTest.innerText = scripts[scriptIdx].innerText;
}
scriptUnderTest.async = true;
var diagScript = DOCUMENT.createElement('script');
diagScript.setAttribute('id', diagScriptId);
var parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;
var diagScriptFun = function diagScriptFun(nodeUnderTestId, md5, parentOrigin) {
parent.FontAwesomeDetection.__pollUntil({
fn: function fn() {
return !!window.FontAwesomeConfig;
}
}).then(function () {
var scriptNode = document.getElementById(nodeUnderTestId);
parent.postMessage({
type: 'fontawesome-conflict',
technology: 'js',
src: scriptNode.src,
innerText: scriptNode.innerText,
tagName: scriptNode.tagName,
md5: md5
}, parentOrigin);
}).catch(function (e) {
var scriptNode = document.getElementById(nodeUnderTestId);
if (e === 'timeout') {
parent.postMessage({
type: 'no-conflict',
src: scriptNode.src,
innerText: scriptNode.innerText,
tagName: scriptNode.tagName,
md5: md5
}, parentOrigin);
} else {
console.error(e);
}
});
};
diagScript.innerText = "(".concat(diagScriptFun.toString(), ")('").concat(nodeUnderTestId, "', '").concat(md5ForScript, "', '").concat(parentOrigin, "');");
diagFrame.onload = function () {
diagFrame.contentWindow.addEventListener('error', silenceErrors, true);
diagFrame.contentDocument.head.appendChild(diagScript);
diagFrame.contentDocument.head.appendChild(scriptUnderTest);
};
domready(function () {
return DOCUMENT.body.appendChild(diagFrame);
});
};
for (var scriptIdx = 0; scriptIdx < scripts.length; scriptIdx++) {
_loop(scriptIdx);
}
return scriptsByMD5;
}
function setDoneResults(_ref2) {
var nodesTested = _ref2.nodesTested,
nodesFound = _ref2.nodesFound;
WINDOW.FontAwesomeDetection = WINDOW.FontAwesomeDetection || {};
WINDOW.FontAwesomeDetection.nodesTested = nodesTested;
WINDOW.FontAwesomeDetection.nodesFound = nodesFound;
WINDOW.FontAwesomeDetection.detectionDone = true;
}
function conflictDetection() {
var report$$1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
var nodesTested = {
conflict: {},
noConflict: {}
};
WINDOW.onmessage = function (e) {
if (WINDOW.location.origin === 'file://' || e.origin === WINDOW.location.origin) {
if (e && e.data) {
if (e.data.type === 'fontawesome-conflict') {
nodesTested.conflict[e.data.md5] = e.data;
} else if (e.data.type === 'no-conflict') {
nodesTested.noConflict[e.data.md5] = e.data;
}
}
}
};
var scriptsToTest = detectSvgConflicts(DOCUMENT.currentScript);
var cssToTest = detectWebfontConflicts();
var nodesFound = _objectSpread({}, scriptsToTest, cssToTest);
var testCount = Object.keys(scriptsToTest).length + Object.keys(cssToTest).length; // The resultsCollectionMaxWait allows for the time between when the tests running under
// child iframes call postMessage with their results, and when the parent window
// receives and handles those events with window.onmessage.
// Making it configurable allows us to test the scenario where this timeout is exceeded.
// Naming it something very different from "timeout" is to help avoid the potential ambiguity between
// these two timeout-related settings.
var masterTimeout = WINDOW.FontAwesomeDetection.timeout + WINDOW.FontAwesomeDetection.resultsCollectionMaxWait;
console.group('Font Awesome Detector');
if (testCount === 0) {
console.info('%cAll Good!', 'color: green; font-size: large');
console.info('We didn\'t find anything that needs testing for conflicts. Ergo, no conflicts.');
} else {
console.info("Testing ".concat(testCount, " possible conflicts."));
console.info("We'll wait about ".concat(Math.round(WINDOW.FontAwesomeDetection.timeout / 10) / 100, " seconds while testing these and\n") + "then up to another ".concat(Math.round(WINDOW.FontAwesomeDetection.resultsCollectionMaxWait / 10) / 100, " to allow the browser time\n") + "to accumulate the results. But we'll probably be outta here way before then.\n\n");
console.info("You can adjust those durations by assigning values to these attributes on the <script> element that loads this detection:");
console.info("\t%c".concat(timeoutAttr, "%c: milliseconds to wait for each test before deciding whether it's a conflict."), 'font-weight: bold;', 'font-size: normal;');
console.info("\t%c".concat(resultsCollectionMaxWaitAttr, "%c: milliseconds to wait for the browser to accumulate test results before giving up."), 'font-weight: bold;', 'font-size: normal;');
pollUntil({
// Give this overall timer a little extra cushion
maxDuration: masterTimeout,
showProgress: true,
progressIndicator: 'waiting...',
fn: function fn() {
return Object.keys(nodesTested.conflict).length + Object.keys(nodesTested.noConflict).length >= testCount;
}
}).then(function () {
console.info('DONE!');
setDoneResults({
nodesTested: nodesTested,
nodesFound: nodesFound
});
report$$1({
nodesTested: nodesTested,
nodesFound: nodesFound
});
console.groupEnd();
}).catch(function (e) {
if (e === 'timeout') {
console.info('TIME OUT! We waited until we got tired. Here\'s what we found:');
setDoneResults({
nodesTested: nodesTested,
nodesFound: nodesFound
});
report$$1({
nodesTested: nodesTested,
nodesFound: nodesFound
});
} else {
console.info('Whoops! We hit an error:', e);
console.info('Here\'s what we\'d found up until that error:');
setDoneResults({
nodesTested: nodesTested,
nodesFound: nodesFound
});
report$$1({
nodesTested: nodesTested,
nodesFound: nodesFound
});
}
console.groupEnd();
});
}
} // Allow clients to access, and in some cases, override some properties
var initialConfig = WINDOW.FontAwesomeDetection || {}; // These can be overridden
var _default = {
report: report,
timeout: +(DOCUMENT.currentScript.getAttribute(timeoutAttr) || "2000"),
resultsCollectionMaxWait: +(DOCUMENT.currentScript.getAttribute(resultsCollectionMaxWaitAttr) || "5000")
};
var _config = _objectSpread({}, _default, initialConfig, {
// These cannot be overridden
__pollUntil: pollUntil,
md5ForNode: md5ForNode,
detectionDone: false,
nodesTested: null,
nodesFound: null
});
WINDOW.FontAwesomeDetection = _config;
var PRODUCTION = function () {
try {
return process.env.NODE_ENV === 'production';
} catch (e) {
return false;
}
}();
function bunker(fn) {
try {
fn();
} catch (e) {
if (!PRODUCTION) {
throw e;
}
}
}
bunker(function () {
if (IS_BROWSER && IS_DOM) {
conflictDetection(window.FontAwesomeDetection.report);
}
});
exports.conflictDetection = conflictDetection;
Object.defineProperty(exports, '__esModule', { value: true });
})));

File diff suppressed because one or more lines are too long

1979
nodejs/public/js/duotone.js Normal file

File diff suppressed because one or more lines are too long

5
nodejs/public/js/duotone.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

5
nodejs/public/js/fontawesome.min.js vendored Normal file

File diff suppressed because one or more lines are too long

2
nodejs/public/js/jquery-3.5.0.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1
nodejs/public/js/jquery-validate.js vendored Executable file
View File

@ -0,0 +1 @@
(function(e){function r(e,t){var n=t.attr("validate").split(":"),r=n[1],i=t.val(),s=n[0];t.siblings("label").children("b").remove();t.parent().removeClass("has-error");if(isNaN(r)===false&&r&&i.length<r){return e.processValidation("Must be "+r+" characters",t)}if(isNaN(r)===false&&i.length===0){return}if(s in e.rule){return e.processValidation(e.rule[s].apply(this,[i,r]),t)}}var t={rule:{eq:function(t,n){var r=e("[name="+n.nameOpt+"]").val();if(t!=r){return"Miss-match"}}},form:{alertCount:false,alertCountMessage:" errors!"},processValidation:function(t,r){if(typeof t=="undefined"||t==true){return}e("<b>").html(" - "+t).appendTo(r.siblings("label"));r.parent().addClass("has-error");n++;return false}};var n=0;e.fn.validate=function(i){n=0;var s=false,o=e.extend({},t,i);if(this.is("[validate]")){r(o,this)}else{s=true;this.find("[validate]").each(function(){r(o,e(this))})}if(n===0){return true}else{if(o.form.alertCount&&s)alert(n+o.form.alertCountMessage);event.preventDefault();return false}};jQuery.extend({validateSettings:function(n){return t=e.extend({},t,n)}})})(jQuery);$.validateSettings({rule:{ip:function(e){e=e.split(".");if(e.length!=4){return"Malformed IP"}$.each(e,function(e,t){if(t>255||t<0){return"Malformed IP"}})},host:function(e){var t=/^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/;if(t.test(e)===false){return"Invalid"}},user:function(e){var t=/^[a-z0-9\_\-\@\.]{1,32}$/;if(t.test(e)===false){return"Invalid"}},password:function(e){var t=/^(?=[^\d_].*?\d)\w(\w|[!@#$%]){1,48}/;if(t.test(e)===false){return"Try again"}}}})

2
nodejs/public/js/jquery.min.js vendored Executable file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,23 @@
/*
MIT License {@link http://creativecommons.org/licenses/MIT/}
MIT License {@link http://creativecommons.org/licenses/MIT/}
MIT License {@link http://creativecommons.org/licenses/MIT/}
MIT License {@link http://creativecommons.org/licenses/MIT/}
MIT License {@link http://creativecommons.org/licenses/MIT/}
MIT License {@link http://creativecommons.org/licenses/MIT/}
*/
"undefined"===typeof window.console&&(window.console={});
"undefined"===typeof window.console.emulated&&("function"===typeof window.console.log?window.console.hasLog=!0:("undefined"===typeof window.console.log&&(window.console.log=function(){}),window.console.hasLog=!1),"function"===typeof window.console.debug?window.console.hasDebug=!0:("undefined"===typeof window.console.debug&&(window.console.debug=!window.console.hasLog?function(){}:function(){for(var a=["console.debug:"],b=0;b<arguments.length;b++)a.push(arguments[b]);window.console.log.apply(window.console,
a)}),window.console.hasDebug=!1),"function"===typeof window.console.warn?window.console.hasWarn=!0:("undefined"===typeof window.console.warn&&(window.console.warn=!window.console.hasLog?function(){}:function(){for(var a=["console.warn:"],b=0;b<arguments.length;b++)a.push(arguments[b]);window.console.log.apply(window.console,a)}),window.console.hasWarn=!1),"function"===typeof window.console.error?window.console.hasError=!0:("undefined"===typeof window.console.error&&(window.console.error=function(){var a=
"An error has occured.";if(window.console.hasLog){for(var a=["console.error:"],b=0;b<arguments.length;b++)a.push(arguments[b]);window.console.log.apply(window.console,a);a="An error has occured. More information is available in your browser's javascript console."}for(b=0;b<arguments.length;++b){if(typeof arguments[b]!=="string")break;a=a+("\n"+arguments[b])}if(typeof Error!=="undefined")throw Error(a);throw a;}),window.console.hasError=!1),"function"===typeof window.console.trace?window.console.hasTrace=
!0:("undefined"===typeof window.console.trace&&(window.console.trace=function(){window.console.error("console.trace does not exist")}),window.console.hasTrace=!1),window.console.emulated=!0);
(function(a){a.appendStylesheet=a.appendStylesheet||function(b,c){if(!document.body){setTimeout(function(){a.appendStylesheet.apply(a,[b,c])},500);return a}var d="stylesheet-"+b.replace(/[^a-zA-Z0-9]/g,""),e=a("#"+d);typeof c==="undefined"&&(c=false);if(e.length===1)if(c)e.remove();else return a;var e=document.getElementsByTagName(a.browser.safari?"head":"body")[0],f=document.createElement("link");f.type="text/css";f.rel="stylesheet";f.media="screen";f.href=b;f.id=d;e.appendChild(f);return a};a.appendScript=
a.appendScript||function(b,c){if(!document.body){setTimeout(function(){a.appendScript.apply(a,[b,c])},500);return a}var d="script-"+b.replace(/[^a-zA-Z0-9]/g,""),e=a("#"+d);typeof c==="undefined"&&(c=false);if(e.length===1)if(c)e.remove();else return a;var e=document.getElementsByTagName(a.browser.safari?"head":"body")[0],f=document.createElement("script");f.type="text/javascript";f.src=b;f.id=d;e.appendChild(f);return a}})(jQuery);
(function(a){a.fn.findAndSelf=a.fn.findAndSelf||function(b){return a(this).find(b).andSelf().filter(b)};Number.prototype.replace=Number.prototype.replace||function(){return(""+this).replace.apply(this,arguments)};a.SyntaxHighlighter?window.console.warn("SyntaxHighlighter has already been defined..."):a.SyntaxHighlighter={config:{load:true,highlight:true,debug:false,wrapLines:true,lineNumbers:true,stripEmptyStartFinishLines:true,stripInitialWhitespace:true,alternateLines:false,defaultClassname:"highlight",
theme:"balupton",themes:["balupton"],addSparkleExtension:true,prettifyBaseUrl:"http://balupton.github.com/jquery-syntaxhighlighter/prettify",baseUrl:"http://balupton.github.com/jquery-syntaxhighlighter"},init:function(b){var c=this.config,d=c.baseUrl;if(d[d.length-1]==="/")c.baseUrl=d.substr(0,d.length-2);delete d;a.extend(true,this.config,b||{});a.Sparkle&&a.Sparkle.addExtension("syntaxhighlighter",function(){a(this).syntaxHighlight()});a.fn.syntaxHighlight=a.fn.SyntaxHighlight=this.fn;c.load&&this.load();
c.highlight&&this.highlight();return this},load:function(){var b=this.config,c=b.prettifyBaseUrl,d=b.baseUrl,b=b.themes;if(!this.loaded()){a.appendScript(c+"/prettify.min.js");a.appendStylesheet(c+"/prettify.min.css");a.appendStylesheet(d+"/styles/style.min.css");a.each(b,function(b,c){a.appendStylesheet(d+"/styles/theme-"+c+".min.css")});a.browser.msie&&a.appendStylesheet(d+"/styles/ie.min.css");this.loadedExtras=true}return this},loadedExtras:false,loaded:function(){return typeof prettyPrint!==
"undefined"&&this.loadedExtras},determineLanguage:function(a){for(var c=null,d=/lang(uage)?-([a-z0-9]+)/g,e=d.exec(a);e!==null;){c=e[2];e=d.exec(a)}return c},fn:function(){var b=a(this);a.SyntaxHighlighter.highlight({el:b});return this},highlight:function(b){typeof b!=="object"&&(b={});var c=this,d=c.config,e=b.el||false;e instanceof jQuery||(e=a("body"));if(c.loaded()){var f=d.defaultClassname,g="";if(typeof f==="array"){g="."+f.join(",.");f=f.join(" ")}else{f=""+f;g="."+f.replace(" ",",.")}if(g===
"."||!f){window.console.error("SyntaxHighlighter.highlight: Invalid defaultClassname.",[this,arguments],[d.defaultClassname]);window.console.trace()}e=e.findAndSelf("code,pre").filter("[class*=lang],"+g).filter(":not(.prettyprint)");e.css({"overflow-y":"visible","overflow-x":"visible","white-space":"pre"}).addClass("prettyprint "+f).each(function(){var b=a(this),d=b.attr("class"),d=c.determineLanguage(d);b.addClass("lang-"+d)});d.lineNumbers&&e.addClass("linenums");d.theme&&e.addClass("theme-"+d.theme);
d.alternateLines&&e.addClass("alternate");prettyPrint();d.stripEmptyStartFinishLines&&e.find("li:first-child > :first-child, li:last-child > :first-child").each(function(){var b=a(this),d=/^([\r\n\s\t]|\&nbsp;)*$/.test(b.html()),c=b.parent(),c=b.siblings();if(d&&(c.length===0||c.length===1&&c.filter(":last").is("br"))){c=b.parent();b=c.val();c.next().val(b);c.remove()}});d.stripInitialWhitespace&&e.find("li:first-child > :first-child").each(function(){var b=a(this),c=(b.html().match(/^(([\r\n\s\t]|\&nbsp;)+)/)||
[])[1]||"";c.length&&b.parent().siblings().children(":first-child").add(b).each(function(){var b=a(this),d=b.html(),d=d.replace(RegExp("^"+c,"gm"),"");b.html(d)})});d.wrapLines?e.css({"overflow-x":"hidden","overflow-y":"hidden","white-space":"pre-wrap","max-height":"none"}):e.css({"overflow-x":"auto","overflow-y":"auto","white-space":"normal","max-height":"500px"});return this}d.debug&&window.console.debug("SyntaxHighlighter.highlight: Chosen SyntaxHighlighter is not yet defined. Waiting 1200 ms then trying again.");
setTimeout(function(){c.highlight.apply(c,[b])},1200)}}})(jQuery);

1979
nodejs/public/js/light.js Normal file

File diff suppressed because it is too large Load Diff

5
nodejs/public/js/light.min.js vendored Normal file

File diff suppressed because one or more lines are too long

4602
nodejs/public/js/moment.js Normal file

File diff suppressed because it is too large Load Diff

1
nodejs/public/js/mustache.min.js vendored Normal file

File diff suppressed because one or more lines are too long

5
nodejs/public/js/popper-1.16.0.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1979
nodejs/public/js/regular.js Normal file

File diff suppressed because it is too large Load Diff

5
nodejs/public/js/regular.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1979
nodejs/public/js/solid.js Normal file

File diff suppressed because it is too large Load Diff

5
nodejs/public/js/solid.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

5
nodejs/public/js/v4-shims.min.js vendored Normal file

File diff suppressed because one or more lines are too long

156
nodejs/public/js/val.js Executable file
View File

@ -0,0 +1,156 @@
( function( $ ) {
var settings = {
rule: {
eq: function( value, options ) {
var compare = $( '[name=' + options + ']' ).val();
if ( value != compare ) {
return "Miss-match";
}
}
},
form: {
alertCount: false, //pop-up with error count
alertCountMessage: " errors!"
},
processValidation: function ( error_message, $input ) {
if ( typeof error_message == 'undefined' || error_message == true ) {
return;
}
$( '<b style="color:#dc3545" class="jvalidate-error">' ).html( ' - ' + error_message ).appendTo( $input.parents('.form-group').children( 'label' ) );
$input.addClass("is-invalid");
failedCount++;
return false;
}
};
var failedCount = 0;
function processRule( thisSettings, $input ) {
var attr = $input.attr( 'validate' ).split( ':' ), //array of params
requirement = attr[1],
value = $input.val(), //link to input value
rule = attr[0];
$input.parents('.form-group').children( 'label' ).children( '.jvalidate-error' ).remove(); //removes old error
$input.removeClass( "is-invalid" ); //removes is-invalid class
//checks if field is required, and length
if (isNaN(requirement) === false && requirement && value.length < requirement) {
return thisSettings.processValidation( 'Must be ' + requirement + ' characters', $input );
}
//checks if empty to stop processing
if ( isNaN( requirement ) === false && value.length === 0 ) {
return;
}
if ( rule in thisSettings.rule ) {
return thisSettings.processValidation( thisSettings.rule[rule].apply( this, [value, requirement] ), $input );
}
}
$.fn.validate = function( settingsObj, event ) {
event = event || window.event;
failedCount = 0;
var thisForm = false,
thisSettings = $.extend( true, settings, settingsObj );
if ( this.is( '[validate]' ) ) {
processRule( thisSettings, this );
} else {
thisForm = true;
this.find( '[validate]' ).each( function () {
if(!processRule( thisSettings, $( this ) )){
// failedCount++;
}
});
}
this.attr('isValid', !failedCount);
if ( failedCount === 0 ) { //no errors
return true;
} else { //errors
if ( thisForm ){
if(thisSettings.form.alertCount){
alert( failedCount + thisSettings.form.alertCountMessage );
}
/* if(event) event.returnValue = false;
if(event) event.preventDefault();
return false;
if(event.preventDefault) if(event)*/
//event.returnValue = false;
event.preventDefault();
event.defaultPrevented;
}
return false;
}
};
jQuery.extend({
validateSettings: function( settingsObj ) {
$.extend( true, settings, settingsObj );
},
validateInit: function( ettingsObj ) {
$( '[action]' ).on( 'submit', function ( event, settingsObj ){
$( this ).validate( settingsObj, event );
});
}
});
}( jQuery ));
$.validateSettings({
rule:{
ip: function( value ) {
value = value.split( '.' );
if ( value.length != 4 ) {
return "Malformed IP";
}
$.each( value, function( key, value ) {
if( value > 255 || value < 0 ) {
return "Malformed IP";
}
});
},
host: function( value ) {
var reg = /^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\.?$/;
if ( reg.test( value ) === false ) {
return "Invalid";
}
},
user: function( value ) {
var reg = /^[a-z0-9\_\-\@\.]{1,32}$/;
if ( reg.test( value ) === false ) {
return "Invalid";
}
},
password: function( value ) {
var reg = /^(?=[^\d_].*?\d)\w(\w|[!@#$%]){1,48}/;
if ( reg.test( value ) === false ) {
return "Weak password, Try again";
}
},
email: function( value ){
//validated email address
//more testing
var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
if( !pattern.test( value ) ){
return 'Invalid';
}
},
}
});

8
nodejs/public/js/waypoints-sticky.min.js vendored Executable file
View File

@ -0,0 +1,8 @@
// Generated by CoffeeScript 1.6.2
/*
Sticky Elements Shortcut for jQuery Waypoints - v2.0.3
Copyright (c) 2011-2013 Caleb Troughton
Dual licensed under the MIT license and GPL license.
https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt
*/
(function(){(function(t,n){if(typeof define==="function"&&define.amd){return define(["jquery","waypoints"],n)}else{return n(t.jQuery)}})(this,function(t){var n,s;n={wrapper:'<div class="sticky-wrapper" />',stuckClass:"stuck"};s=function(t,n){t.wrap(n.wrapper);return t.parent()};t.waypoints("extendFn","sticky",function(e){var i,r,a;r=t.extend({},t.fn.waypoint.defaults,n,e);i=s(this,r);a=r.handler;r.handler=function(n){var s,e;s=t(this).children(":first");e=n==="down"||n==="right";s.toggleClass(r.stuckClass,e);i.height(e?s.outerHeight():"");if(a!=null){return a.call(this,n)}};i.waypoint(r);return this.data("stuckClass",r.stuckClass)});return t.waypoints("extendFn","unsticky",function(){this.parent().waypoint("destroy");this.unwrap();return this.removeClass(this.data("stuckClass"))})})}).call(this);

8
nodejs/public/js/waypoints.min.js vendored Executable file

File diff suppressed because one or more lines are too long