@fa-repo/mobile-dev-environment
Version:
MDE displays a console output tray and extendable action bar inside your browser window.
1,216 lines (997 loc) • 55.3 kB
JavaScript
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ({
/***/ "./node_modules/classnames/index.js":
/*!******************************************!*\
!*** ./node_modules/classnames/index.js ***!
\******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
Copyright (c) 2017 Jed Watson.
Licensed under the MIT License (MIT), see
http://jedwatson.github.io/classnames
*/
/* global define */
(function () {
'use strict';
var hasOwn = {}.hasOwnProperty;
function classNames () {
var classes = [];
for (var i = 0; i < arguments.length; i++) {
var arg = arguments[i];
if (!arg) continue;
var argType = typeof arg;
if (argType === 'string' || argType === 'number') {
classes.push(arg);
} else if (Array.isArray(arg) && arg.length) {
var inner = classNames.apply(null, arg);
if (inner) {
classes.push(inner);
}
} else if (argType === 'object') {
for (var key in arg) {
if (hasOwn.call(arg, key) && arg[key]) {
classes.push(key);
}
}
}
}
return classes.join(' ');
}
if ( true && module.exports) {
classNames.default = classNames;
module.exports = classNames;
} else if (true) {
// register as 'classnames', consistent with npm package name
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
return classNames;
}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
} else {}
}());
/***/ }),
/***/ "./node_modules/crel/crel.es.js":
/*!**************************************!*\
!*** ./node_modules/crel/crel.es.js ***!
\**************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
function createCommonjsModule(fn, module) {
return module = { exports: {} }, fn(module, module.exports), module.exports;
}
var crel = createCommonjsModule(function (module, exports) {
/* Copyright (C) 2012 Kory Nunn
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
NOTE:
This code is formatted for run-speed and to assist compilers.
This might make it harder to read at times, but the code's intention should be transparent. */
// IIFE our function
(function (exporter) {
// Define our function and its properties
// These strings are used multiple times, so this makes things smaller once compiled
var func = 'function',
isNodeString = 'isNode',
// Helper functions used throughout the script
isType = function (object, type) { return typeof object === type; },
// Recursively appends children to given element. As a text node if not already an element
appendChild = function (element, child) {
if (child !== null) {
if (Array.isArray(child)) { // Support (deeply) nested child elements
child.map(function (subChild) { return appendChild(element, subChild); });
} else {
if (!crel[isNodeString](child)) {
child = document.createTextNode(child);
}
element.appendChild(child);
}
}
};
//
function crel (element, settings) {
// Define all used variables / shortcuts here, to make things smaller once compiled
var args = arguments, // Note: assigned to a variable to assist compilers.
index = 1,
key,
attribute;
// If first argument is an element, use it as is, otherwise treat it as a tagname
element = crel.isElement(element) ? element : document.createElement(element);
// Check if second argument is a settings object
if (isType(settings, 'object') && !crel[isNodeString](settings) && !Array.isArray(settings)) {
// Don't treat settings as a child
index++;
// Go through settings / attributes object, if it exists
for (key in settings) {
// Store the attribute into a variable, before we potentially modify the key
attribute = settings[key];
// Get mapped key / function, if one exists
key = crel.attrMap[key] || key;
// Note: We want to prioritise mapping over properties
if (isType(key, func)) {
key(element, attribute);
} else if (isType(attribute, func)) { // ex. onClick property
element[key] = attribute;
} else {
// Set the element attribute
element.setAttribute(key, attribute);
}
}
}
// Loop through all arguments, if any, and append them to our element if they're not `null`
for (; index < args.length; index++) {
appendChild(element, args[index]);
}
return element;
}
// Used for mapping attribute keys to supported versions in bad browsers, or to custom functionality
crel.attrMap = {};
crel.isElement = function (object) { return object instanceof Element; };
crel[isNodeString] = function (node) { return node instanceof Node; };
// Expose proxy interface
crel.proxy = new Proxy(crel, {
get: function (target, key) {
!(key in crel) && (crel[key] = crel.bind(null, key));
return crel[key];
}
});
// Export crel
exporter(crel, func);
})(function (product, func) {
{
// Export for Browserify / CommonJS format
module.exports = product;
}
});
});
/* harmony default export */ __webpack_exports__["default"] = (crel);
/***/ }),
/***/ "./node_modules/crelns/index.js":
/*!**************************************!*\
!*** ./node_modules/crelns/index.js ***!
\**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var crel = __webpack_require__(/*! crel */ "./node_modules/crelns/node_modules/crel/crel.js");
module.exports = function(namespace, type){
var element = document.createElementNS(namespace, type);
return crel.apply(null, [element].concat(Array.prototype.slice.call(arguments, 2)));
};
/***/ }),
/***/ "./node_modules/crelns/node_modules/crel/crel.js":
/*!*******************************************************!*\
!*** ./node_modules/crelns/node_modules/crel/crel.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
//Copyright (C) 2012 Kory Nunn
//Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
//The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/*
This code is not formatted for readability, but rather run-speed and to assist compilers.
However, the code's intention should be transparent.
*** IE SUPPORT ***
If you require this library to work in IE7, add the following after declaring crel.
var testDiv = document.createElement('div'),
testLabel = document.createElement('label');
testDiv.setAttribute('class', 'a');
testDiv['className'] !== 'a' ? crel.attrMap['class'] = 'className':undefined;
testDiv.setAttribute('name','a');
testDiv['name'] !== 'a' ? crel.attrMap['name'] = function(element, value){
element.id = value;
}:undefined;
testLabel.setAttribute('for', 'a');
testLabel['htmlFor'] !== 'a' ? crel.attrMap['for'] = 'htmlFor':undefined;
*/
(function (root, factory) {
if (true) {
module.exports = factory();
} else {}
}(this, function () {
var fn = 'function',
obj = 'object',
nodeType = 'nodeType',
textContent = 'textContent',
setAttribute = 'setAttribute',
attrMapString = 'attrMap',
isNodeString = 'isNode',
isElementString = 'isElement',
d = typeof document === obj ? document : {},
isType = function(a, type){
return typeof a === type;
},
isNode = typeof Node === fn ? function (object) {
return object instanceof Node;
} :
// in IE <= 8 Node is an object, obviously..
function(object){
return object &&
isType(object, obj) &&
(nodeType in object) &&
isType(object.ownerDocument,obj);
},
isElement = function (object) {
return crel[isNodeString](object) && object[nodeType] === 1;
},
isArray = function(a){
return a instanceof Array;
},
appendChild = function(element, child) {
if(!crel[isNodeString](child)){
child = d.createTextNode(child);
}
element.appendChild(child);
};
function crel(){
var args = arguments, //Note: assigned to a variable to assist compilers. Saves about 40 bytes in closure compiler. Has negligable effect on performance.
element = args[0],
child,
settings = args[1],
childIndex = 2,
argumentsLength = args.length,
attributeMap = crel[attrMapString];
element = crel[isElementString](element) ? element : d.createElement(element);
// shortcut
if(argumentsLength === 1){
return element;
}
if(!isType(settings,obj) || crel[isNodeString](settings) || isArray(settings)) {
--childIndex;
settings = null;
}
// shortcut if there is only one child that is a string
if((argumentsLength - childIndex) === 1 && isType(args[childIndex], 'string') && element[textContent] !== undefined){
element[textContent] = args[childIndex];
}else{
for(; childIndex < argumentsLength; ++childIndex){
child = args[childIndex];
if(child == null){
continue;
}
if (isArray(child)) {
for (var i=0; i < child.length; ++i) {
appendChild(element, child[i]);
}
} else {
appendChild(element, child);
}
}
}
for(var key in settings){
if(!attributeMap[key]){
if(isType(settings[key],fn)){
element[key] = settings[key];
}else{
element[setAttribute](key, settings[key]);
}
}else{
var attr = attributeMap[key];
if(typeof attr === fn){
attr(element, settings[key]);
}else{
element[setAttribute](attr, settings[key]);
}
}
}
return element;
}
// Used for mapping one kind of attribute to the supported version of that in bad browsers.
crel[attrMapString] = {};
crel[isElementString] = isElement;
crel[isNodeString] = isNode;
if(typeof Proxy !== 'undefined'){
return new Proxy(crel, {
get: function(target, key){
!(key in crel) && (crel[key] = crel.bind(null, key));
return crel[key];
}
});
}
return crel;
}));
/***/ }),
/***/ "./node_modules/lodash/lodash.js":
/*!***************************************!*\
!*** ./node_modules/lodash/lodash.js ***!
\***************************************/
/*! no static exports found */
/***/ (function(module, exports) {
throw new Error("Module build failed: Error: ENOENT: no such file or directory, open '/Users/snoke/Code/mobile-dev-environment/node_modules/lodash/lodash.js'");
/***/ }),
/***/ "./node_modules/webpack/buildin/harmony-module.js":
/*!*******************************************!*\
!*** (webpack)/buildin/harmony-module.js ***!
\*******************************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = function(originalModule) {
if (!originalModule.webpackPolyfill) {
var module = Object.create(originalModule);
// module.parent = undefined by default
if (!module.children) module.children = [];
Object.defineProperty(module, "loaded", {
enumerable: true,
get: function() {
return module.l;
}
});
Object.defineProperty(module, "id", {
enumerable: true,
get: function() {
return module.i;
}
});
Object.defineProperty(module, "exports", {
enumerable: true
});
module.webpackPolyfill = 1;
}
return module;
};
/***/ }),
/***/ "./src/features/action-bar/action-bar.js":
/*!***********************************************!*\
!*** ./src/features/action-bar/action-bar.js ***!
\***********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ActionBar; });
/* harmony import */ var src_features_action_bar_custom_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! src/features/action-bar/custom-button */ "./src/features/action-bar/custom-button.js");
/* harmony import */ var src_features_action_bar_reload_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! src/features/action-bar/reload-button */ "./src/features/action-bar/reload-button.js");
/* harmony import */ var src_features_action_bar_tray_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! src/features/action-bar/tray-button */ "./src/features/action-bar/tray-button.js");
/* harmony import */ var crel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! crel */ "./node_modules/crel/crel.es.js");
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
function ActionBar() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$actions = _ref.actions,
actions = _ref$actions === void 0 ? [] : _ref$actions,
corner = _ref.corner,
trayIsOpen = _ref.trayIsOpen,
_ref$onToggleTray = _ref.onToggleTray,
onToggleTray = _ref$onToggleTray === void 0 ? function () {} : _ref$onToggleTray;
corner = ["tl", "tr"].includes(corner) ? corner : "tl";
return crel__WEBPACK_IMPORTED_MODULE_3__["default"].apply(void 0, ["div", {
id: "mde-action-bar",
"data-corner": corner
}].concat(_toConsumableArray(actions.map(function (action) {
if (action.action === "reload") {
return Object(src_features_action_bar_reload_button__WEBPACK_IMPORTED_MODULE_1__["default"])({
onClick: function onClick() {
return location.reload(action.refreshCache);
}
});
}
if (action.action === "toggle-tray") {
return Object(src_features_action_bar_tray_button__WEBPACK_IMPORTED_MODULE_2__["default"])({
isActive: trayIsOpen,
onClick: onToggleTray
});
}
if (action.action === "custom") {
return Object(src_features_action_bar_custom_button__WEBPACK_IMPORTED_MODULE_4__["default"])({
content: action.content,
onClick: action.onClick
});
}
return null;
}))));
}
/***/ }),
/***/ "./src/features/action-bar/custom-button.js":
/*!**************************************************!*\
!*** ./src/features/action-bar/custom-button.js ***!
\**************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return CustomButton; });
/* harmony import */ var crel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! crel */ "./node_modules/crel/crel.es.js");
function CustomButton() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
content = _ref.content,
onClick = _ref.onClick;
var Button = Object(crel__WEBPACK_IMPORTED_MODULE_0__["default"])("button", content);
if (onClick) Button.addEventListener("click", onClick);
return Button;
}
/***/ }),
/***/ "./src/features/action-bar/reload-button.js":
/*!**************************************************!*\
!*** ./src/features/action-bar/reload-button.js ***!
\**************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ReloadButton; });
/* harmony import */ var src_features_icons_reload__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! src/features/icons/reload */ "./src/features/icons/reload.js");
/* harmony import */ var crel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! crel */ "./node_modules/crel/crel.es.js");
function ReloadButton() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$onClick = _ref.onClick,
onClick = _ref$onClick === void 0 ? function () {} : _ref$onClick;
var Button = Object(crel__WEBPACK_IMPORTED_MODULE_1__["default"])("button", {
id: "mde-reload"
}, Object(src_features_icons_reload__WEBPACK_IMPORTED_MODULE_0__["default"])());
if (onClick) Button.addEventListener("click", onClick);
return Button;
}
/***/ }),
/***/ "./src/features/action-bar/tray-button.js":
/*!************************************************!*\
!*** ./src/features/action-bar/tray-button.js ***!
\************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TrayButton; });
/* harmony import */ var src_features_icons_tray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! src/features/icons/tray */ "./src/features/icons/tray.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js");
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var crel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! crel */ "./node_modules/crel/crel.es.js");
function TrayButton() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$isActive = _ref.isActive,
isActive = _ref$isActive === void 0 ? false : _ref$isActive,
onClick = _ref.onClick;
var className = classnames__WEBPACK_IMPORTED_MODULE_1___default()(isActive && "active");
var Button = Object(crel__WEBPACK_IMPORTED_MODULE_2__["default"])("button", {
id: "mde-toggle-tray",
"class": className
}, Object(src_features_icons_tray__WEBPACK_IMPORTED_MODULE_0__["default"])());
if (onClick) Button.addEventListener("click", onClick);
return Button;
}
/***/ }),
/***/ "./src/features/app/app.js":
/*!*********************************!*\
!*** ./src/features/app/app.js ***!
\*********************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return App; });
/* harmony import */ var src_features_action_bar_action_bar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! src/features/action-bar/action-bar */ "./src/features/action-bar/action-bar.js");
/* harmony import */ var src_features_tray_tray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! src/features/tray/tray */ "./src/features/tray/tray.js");
/* harmony import */ var crel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! crel */ "./node_modules/crel/crel.es.js");
/* harmony import */ var src_utils_limit_tray_height__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! src/utils/limit-tray-height */ "./src/utils/limit-tray-height.js");
/* harmony import */ var src_utils_state__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! src/utils/state */ "./src/utils/state.js");
/* harmony import */ var src_utils_tracer_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! src/utils/tracer.js */ "./src/utils/tracer.js");
function App(_ref) {
var root = _ref.root,
stateId = _ref.stateId,
actions = _ref.actions,
actionsCorner = _ref.actionsCorner;
var state = Object(src_utils_state__WEBPACK_IMPORTED_MODULE_4__["default"])(stateId); // Default tray height
var trayHeight = state.getCache("tray-height", window.innerHeight * 0.25);
trayHeight = Object(src_utils_limit_tray_height__WEBPACK_IMPORTED_MODULE_3__["default"])(trayHeight, !!state.get("actions")); // SET STATE
state.set("log", []);
state.set("actions", actions);
state.set("actions-corner", actionsCorner);
state.setCache("tray-open", state.getCache("tray-open", true));
state.setCache("tray-height", trayHeight);
/**
* ACTIONS
*/
function toggleTray() {
state.setCache("tray-open", !state.getCache("tray-open"));
render();
}
function resizeTray(offset) {
var height = Object(src_utils_limit_tray_height__WEBPACK_IMPORTED_MODULE_3__["default"])(state.getCache("tray-height") + offset, !!state.get("actions"));
if (height !== state.getCache("tray-height")) {
state.setCache("tray-height", height);
render();
}
}
function addLogEntry() {
var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
message = _ref2.message,
filePath = _ref2.filePath,
fileName = _ref2.fileName,
lineNumber = _ref2.lineNumber,
type = _ref2.type;
var log = state.get("log");
var entry = {
message: message,
filePath: filePath,
fileName: fileName,
lineNumber: lineNumber,
type: type,
amount: 1
};
var lastEntry = log[log.length - 1];
if (lastEntry && lastEntry.message === message) {
lastEntry.amount = lastEntry.amount + 1;
log[log.length - 1] = lastEntry;
} else {
log.push(entry);
}
state.set("log", log);
render();
} // In the event the window is resized
window.addEventListener("resize", function () {
resizeTray(state.getCache("tray-height"));
}); // Display logs
var log = console.log;
console.log = function (message) {
log(message);
var _tracer = Object(src_utils_tracer_js__WEBPACK_IMPORTED_MODULE_5__["default"])(new Error()),
filePath = _tracer.filePath,
fileName = _tracer.fileName,
lineNumber = _tracer.lineNumber;
addLogEntry({
message: message,
filePath: filePath,
fileName: fileName,
lineNumber: lineNumber
});
};
var error = console.error;
console.error = function (message) {
error(message);
var _tracer2 = Object(src_utils_tracer_js__WEBPACK_IMPORTED_MODULE_5__["default"])(new Error()),
filePath = _tracer2.filePath,
fileName = _tracer2.fileName,
lineNumber = _tracer2.lineNumber;
addLogEntry({
message: message,
filePath: filePath,
fileName: fileName,
lineNumber: lineNumber,
type: "error"
});
};
var assert = console.assert;
console.assert = function (assertion, message) {
assert(assertion, message);
if (!assertion) {
message = "Assertion failed: " + (typeof message !== "undefined" ? message : "console.assert");
var _tracer3 = Object(src_utils_tracer_js__WEBPACK_IMPORTED_MODULE_5__["default"])(new Error()),
filePath = _tracer3.filePath,
fileName = _tracer3.fileName,
lineNumber = _tracer3.lineNumber;
addLogEntry({
message: message,
filePath: filePath,
fileName: fileName,
lineNumber: lineNumber,
type: "error"
});
}
}; // Display error messages
window.onerror = function (message, filePath, lineNumber) {
addLogEntry({
message: message,
filePath: filePath,
fileName: "",
lineNumber: lineNumber,
type: "error"
});
}; // render
function render() {
root.innerHTML = ""; // render action bar
Object(crel__WEBPACK_IMPORTED_MODULE_2__["default"])(root, Object(src_features_action_bar_action_bar__WEBPACK_IMPORTED_MODULE_0__["default"])({
actions: actions,
corner: state.get("actions-corner"),
trayIsOpen: state.getCache("tray-open"),
onToggleTray: toggleTray
})); // render tray
if (actions.some(function (action) {
return action.action === "toggle-tray";
})) {
Object(crel__WEBPACK_IMPORTED_MODULE_2__["default"])(root, Object(src_features_tray_tray__WEBPACK_IMPORTED_MODULE_1__["default"])({
state: state,
trayIsOpen: state.getCache("tray-open"),
trayHeight: state.getCache("tray-height"),
log: state.get("log"),
onResizeTray: resizeTray
}));
}
}
render();
}
/***/ }),
/***/ "./src/features/icons/reload.js":
/*!**************************************!*\
!*** ./src/features/icons/reload.js ***!
\**************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ReloadIcon; });
/* harmony import */ var crelns__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! crelns */ "./node_modules/crelns/index.js");
/* harmony import */ var crelns__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(crelns__WEBPACK_IMPORTED_MODULE_0__);
function ReloadIcon() {
return crelns__WEBPACK_IMPORTED_MODULE_0___default()("http://www.w3.org/2000/svg", "svg", {
fill: "#000",
height: "24",
width: "24",
viewBox: "0 0 24 24"
}, crelns__WEBPACK_IMPORTED_MODULE_0___default()("http://www.w3.org/2000/svg", "path", {
d: "M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"
}), crelns__WEBPACK_IMPORTED_MODULE_0___default()("http://www.w3.org/2000/svg", "path", {
d: "M0 0h24v24H0z",
fill: "none"
}));
}
/***/ }),
/***/ "./src/features/icons/tray.js":
/*!************************************!*\
!*** ./src/features/icons/tray.js ***!
\************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TrayIcon; });
/* harmony import */ var crelns__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! crelns */ "./node_modules/crelns/index.js");
/* harmony import */ var crelns__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(crelns__WEBPACK_IMPORTED_MODULE_0__);
function TrayIcon() {
return crelns__WEBPACK_IMPORTED_MODULE_0___default()("http://www.w3.org/2000/svg", "svg", {
fill: "#000",
height: "24",
width: "24",
viewBox: "0 0 24 24"
}, crelns__WEBPACK_IMPORTED_MODULE_0___default()("http://www.w3.org/2000/svg", "path", {
d: "M0 0h24v24H0V0z",
fill: "none"
}), crelns__WEBPACK_IMPORTED_MODULE_0___default()("http://www.w3.org/2000/svg", "path", {
d: "M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3v-3h18v3z"
}));
}
/***/ }),
/***/ "./src/features/tray/log-item.js":
/*!***************************************!*\
!*** ./src/features/tray/log-item.js ***!
\***************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return LogItem; });
/* harmony import */ var crel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! crel */ "./node_modules/crel/crel.es.js");
/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js");
/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__);
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function LogItem() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
message = _ref.message,
filePath = _ref.filePath,
fileName = _ref.fileName,
lineNumber = _ref.lineNumber,
amount = _ref.amount,
_ref$type = _ref.type,
type = _ref$type === void 0 ? "log" : _ref$type;
// figure out type
if (type === "error") type = "error";else if (typeof message === "string") type = "string";else if (typeof message === "number") type = "number";else if (typeof message === "boolean") type = "boolean";else if (_typeof(message) === "object") type = "object";else if (Array.isArray(message)) type = "array";else if (message === null) type = "null";else if (typeof message === "undefined") type = "undefined"; // prepare message
if (type === "null" || type === "undefined") message = type;else if (type === "object" || type === "array") message = JSON.stringify(message, undefined, 2);else if (type === "number" || type === "boolean") message = message.toString(); // line location
var lineLoc = fileName + ":" + lineNumber; // prepare amount
amount = Object(lodash__WEBPACK_IMPORTED_MODULE_1__["isUndefined"])(amount) ? 1 : amount; // Prepare LogItem parts
var LogAmount = Object(crel__WEBPACK_IMPORTED_MODULE_0__["default"])("div", {
"class": "mde-log-amount"
}, amount === 1 ? "" : amount);
var LogMessage = Object(crel__WEBPACK_IMPORTED_MODULE_0__["default"])("div", {
"class": "mde-log-message"
}, message);
var LogTrace = Object(crel__WEBPACK_IMPORTED_MODULE_0__["default"])("a", {
"class": "mde-log-trace",
href: filePath,
target: "_blank"
}, lineLoc);
var LogMessageFull = Object(crel__WEBPACK_IMPORTED_MODULE_0__["default"])("pre", {
"class": "mde-log-message-full"
}, message); // Build LogItem
var LogItem = Object(crel__WEBPACK_IMPORTED_MODULE_0__["default"])("div", {
"class": "mde-log",
"data-type": type
}, LogAmount, LogMessage, LogTrace, LogMessageFull); // Listen for toggling full message
LogMessage.addEventListener("click", function () {
return LogItem.classList.toggle("mde-log-open");
});
return LogItem;
}
/***/ }),
/***/ "./src/features/tray/log-list.js":
/*!***************************************!*\
!*** ./src/features/tray/log-list.js ***!
\***************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return LogList; });
/* harmony import */ var _log_item__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./log-item */ "./src/features/tray/log-item.js");
/* harmony import */ var crel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! crel */ "./node_modules/crel/crel.es.js");
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
function LogList() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$log = _ref.log,
log = _ref$log === void 0 ? [] : _ref$log;
return crel__WEBPACK_IMPORTED_MODULE_1__["default"].apply(void 0, ["div", {
id: "mde-logs"
}].concat(_toConsumableArray(log.map(function (logItem) {
return Object(_log_item__WEBPACK_IMPORTED_MODULE_0__["default"])(logItem);
}))));
}
/***/ }),
/***/ "./src/features/tray/resize-handle.js":
/*!********************************************!*\
!*** ./src/features/tray/resize-handle.js ***!
\********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ResizeHandle; });
/* harmony import */ var crel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! crel */ "./node_modules/crel/crel.es.js");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
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 _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function ResizeHandle() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$onDrag = _ref.onDrag,
onDrag = _ref$onDrag === void 0 ? function () {} : _ref$onDrag,
props = _objectWithoutProperties(_ref, ["onDrag"]);
var Button = Object(crel__WEBPACK_IMPORTED_MODULE_0__["default"])("button", _objectSpread({
id: "mde-tray-resize-bar"
}, props), "• • •");
Button.addEventListener("touchstart", function (e) {
return handleDrag(e);
});
Button.addEventListener("mousedown", function (e) {
return handleDrag(e);
});
function handleDrag(e) {
// Only allow dragging with left click
if (e.which !== 1) return;
var lastY = e.type === "touchstart" ? e.changedTouches[0].clientY : e.clientY;
var handleMove = function handleMove(e) {
var currentY = e.type === "touchmove" ? e.changedTouches[0].clientY : e.clientY;
onDrag(lastY - currentY);
lastY = currentY;
};
function handleEnd(e) {
e.target.removeEventListener("touchmove", handleMove, false);
e.target.removeEventListener("touchend", handleEnd, false);
document.removeEventListener("mousemove", handleMove, false);
document.removeEventListener("mouseup", handleEnd, false);
}
e.target.addEventListener("touchmove", handleMove, false);
e.target.addEventListener("touchend", handleEnd, false);
document.addEventListener("mousemove", handleMove, false);
document.addEventListener("mouseup", handleEnd, false);
}
/**
* Render
*/
return Button;
}
/***/ }),
/***/ "./src/features/tray/tray.js":
/*!***********************************!*\
!*** ./src/features/tray/tray.js ***!
\***********************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Tray; });
/* harmony import */ var _log_list__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./log-list */ "./src/features/tray/log-list.js");
/* harmony import */ var _resize_handle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./resize-handle */ "./src/features/tray/resize-handle.js");
/* harmony import */ var crel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! crel */ "./node_modules/crel/crel.es.js");
function Tray() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$trayIsOpen = _ref.trayIsOpen,
trayIsOpen = _ref$trayIsOpen === void 0 ? true : _ref$trayIsOpen,
_ref$trayHeight = _ref.trayHeight,
trayHeight = _ref$trayHeight === void 0 ? 100 : _ref$trayHeight,
_ref$log = _ref.log,
log = _ref$log === void 0 ? [] : _ref$log,
_ref$onResizeTray = _ref.onResizeTray,
onResizeTray = _ref$onResizeTray === void 0 ? function () {} : _ref$onResizeTray;
var className = trayIsOpen ? "active" : "";
var style = "height:".concat(trayHeight, "px");
var onDragResizer = function onDragResizer(offset) {
return onResizeTray(offset);
};
return Object(crel__WEBPACK_IMPORTED_MODULE_2__["default"])("div", {
id: "mde-tray",
style: style,
"class": className
}, Object(_resize_handle__WEBPACK_IMPORTED_MODULE_1__["default"])({
onDrag: onDragResizer
}), Object(_log_list__WEBPACK_IMPORTED_MODULE_0__["default"])({
log: log
}));
}
/***/ }),
/***/ "./src/index.js":
/*!**********************!*\
!*** ./src/index.js ***!
\**********************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* WEBPACK VAR INJECTION */(function(module) {/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js");
/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var src_features_app_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! src/features/app/app */ "./src/features/app/app.js");
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
(function () {
"use strict";
function mobileDevEnvironment() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
root = _ref.root,
stateId = _ref.stateId,
actions = _ref.actions,
actionsCorner = _ref.actionsCorner;
if (!Object(lodash__WEBPACK_IMPORTED_MODULE_0__["isElement"])(root)) {
throw "Could not start MDE because MDE requires a `root` element to attach to the DOM.";
} // DEFAULT VARIABLES
stateId = Object(lodash__WEBPACK_IMPORTED_MODULE_0__["defaultTo"])(stateId, "global");
actionsCorner = Object(lodash__WEBPACK_IMPORTED_MODULE_0__["defaultTo"])(actionsCorner, "tr");
actions = Object(lodash__WEBPACK_IMPORTED_MODULE_0__["defaultTo"])(actions, ["reload", "toggle-tray"]);
actions = actions.map(function (action) {
if (typeof action === "string" && action === "reload") {
action = {
action: "reload"
};
} else if (typeof action === "string" && action === "toggle-tray") {
action = {
action: "toggle-tray"
};
}
if (Object(lodash__WEBPACK_IMPORTED_MODULE_0__["isObject"])(action) && action.action === "reload") {
return {
action: "reload",
refreshCache: Object(lodash__WEBPACK_IMPORTED_MODULE_0__["defaultTo"])(action.refreshCache, true)
};
} else if (Object(lodash__WEBPACK_IMPORTED_MODULE_0__["isObject"])(action) && action.action === "toggle-tray") {
return {
action: "toggle-tray"
};
} else if (Object(lodash__WEBPACK_IMPORTED_MODULE_0__["isObject"])(action) && action.action === "custom") {
return {
action: "custom",
content: Object(lodash__WEBPACK_IMPORTED_MODULE_0__["defaultTo"])(action.content, ""),
onClick: Object(lodash__WEBPACK_IMPORTED_MODULE_0__["defaultTo"])(action.onClick, function () {})
};
}
return null;
}).filter(Boolean); // RUN
Object(src_features_app_app__WEBPACK_IMPORTED_MODULE_1__["default"])({
root: root,
stateId: stateId,
actions: actions,
actionsCorner: actionsCorner
});
} // Enable usage in the browser
window.mobileDevEnvironment = mobileDevEnvironment; // Enable usage in Node
if (( false ? undefined : _typeof(module)) === "object" && _typeof(module.exports) === "object") {
module.exports = mobileDevEnvironment;
}
})();
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/webpack/buildin/harmony-module.js */ "./node_modules/webpack/buildin/harmony-module.js")(module)))
/***/ }),
/***/ "./src/index.scss":
/*!************************!*\
!*** ./src/index.scss ***!
\************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// extracted by mini-css-extract-plugin
/***/ }),
/***/ "./src/utils/limit-tray-height.js":
/*!****************************************!*\
!*** ./src/utils/limit-tray-height.js ***!
\****************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
function limitTrayHeight(height) {
var actionsIsDisplayed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
// set min height to match