(window["webpackJsonpGUI"] = window["webpackJsonpGUI"] || []).push([[3],{ /***/ 1051: /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; module.exports = freeGlobal; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(45))) /***/ }), /***/ 1347: /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "static/assets/33b737193edfe1730f38112ad35a84b4.svg"; /***/ }), /***/ 1348: /***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__.p + "sw.js"; /***/ }), /***/ 151: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getInitialDarkMode", function() { return getInitialDarkMode; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ThemeHOC; }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _raw_loader_tw_theme_dark_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(152); /* harmony import */ var _raw_loader_tw_theme_dark_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_raw_loader_tw_theme_dark_css__WEBPACK_IMPORTED_MODULE_1__); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const THEME_KEY = 'tw:theme'; const darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); const getInitialDarkMode = () => { try { const item = localStorage.getItem(THEME_KEY); if (item !== null) { return item === 'dark'; } } catch (e) { // ignore } return darkMediaQuery.matches; }; const darkModeStylesheet = document.createElement('style'); darkModeStylesheet.textContent = _raw_loader_tw_theme_dark_css__WEBPACK_IMPORTED_MODULE_1___default.a; const ThemeHOC = function ThemeHOC(WrappedComponent) { class ThemeComponent extends react__WEBPACK_IMPORTED_MODULE_0___default.a.Component { constructor(props) { super(props); this.handleQueryChange = this.handleQueryChange.bind(this); this.handleClickTheme = this.handleClickTheme.bind(this); this.state = { dark: getInitialDarkMode() }; } componentDidMount() { // media query does not have listeners in legacy edge if (darkMediaQuery.addEventListener) { darkMediaQuery.addEventListener('change', this.handleQueryChange); } this.updateDark(); } componentDidUpdate() { try { localStorage.setItem(THEME_KEY, this.state.dark ? 'dark' : 'light'); } catch (e) { // ignore } this.updateDark(); } componentWillUnmount() { // media query does not have listeners in legacy edge if (darkMediaQuery.removeEventListener) { darkMediaQuery.removeEventListener('change', this.handleQueryChange); } } updateDark() { const dark = this.state.dark; document.body.setAttribute('theme', dark ? 'dark' : 'light'); if (dark && !darkModeStylesheet.parentNode) { document.body.insertBefore(darkModeStylesheet, document.body.firstChild); } else if (!dark && darkModeStylesheet.parentNode) { darkModeStylesheet.parentNode.removeChild(darkModeStylesheet); } } handleQueryChange() { this.setState({ dark: darkMediaQuery.matches }); } handleClickTheme() { this.setState(state => ({ dark: !state.dark })); } render() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(WrappedComponent, _extends({ onClickTheme: this.handleClickTheme, isDark: this.state.dark }, this.props)); } } return ThemeComponent; }; /***/ }), /***/ 152: /***/ (function(module, exports) { module.exports = "/* GUI */\r\n:root {\r\n background: #111;\r\n color: #eee;\r\n /* see colors.csss */\r\n --ui-primary: rgb(17, 17, 17);\r\n --ui-secondary: rgb(30, 30, 30);\r\n --ui-tertiary: rgb(46, 46, 46);\r\n --ui-modal-overlay: #333a;\r\n --ui-black-transparent: rgba(255, 255, 255, 0.15);\r\n --text-primary: #eee;\r\n /* scratch-paint */\r\n --paint-ui-pane-border: var(--ui-black-transparent);\r\n --paint-text-primary: #eee;\r\n --paint-form-border: var(--ui-black-transparent);\r\n}\r\n\r\n/* Blockly */\r\n.blocklySvg {\r\n background-color: var(--ui-secondary) !important;\r\n}\r\n[id^=\"blocklyGridPattern\"] > line {\r\n stroke: #484848;\r\n}\r\n.blocklyFlyoutBackground {\r\n fill: #111;\r\n}\r\n.blocklyFlyoutLabelText {\r\n fill: #ccc;\r\n}\r\n.blocklyFlyoutButton .blocklyText {\r\n fill: #ccc;\r\n}\r\n.blocklyFlyoutButton:hover {\r\n fill: #111;\r\n}\r\n.scratchCategoryMenu {\r\n color: #ccc;\r\n}\r\n.blocklyToolboxDiv,\r\n.scratchCategoryMenu {\r\n background: #111 !important;\r\n}\r\n.blocklyScrollbarHandle {\r\n fill: #666;\r\n}\r\n.blocklyZoom {\r\n filter: invert(100%);\r\n}\r\n.scratchCategoryMenuItem.categorySelected {\r\n background: var(--ui-secondary);\r\n}\r\n.valueReportBox {\r\n color: black;\r\n}\r\n.blocklyWidgetDiv .goog-menu {\r\n background: var(--ui-primary);\r\n border-color: var(--ui-black-transparent);\r\n}\r\n.blocklyWidgetDiv .goog-menuitem {\r\n color: var(--text-primary);\r\n}\r\n.blocklyWidgetDiv .goog-menuitem-disabled .goog-menuitem-content {\r\n color: #666 !important;\r\n}\r\n.sa-blockly-menu-item-border {\r\n border-top-color: var(--ui-black-transparent) !important;\r\n}\r\n.blocklyWidgetDiv .goog-menuitem.goog-menuitem-highlight {\r\n background-color: var(--ui-tertiary);\r\n border-color: transparent; /* remove border */\r\n}\r\n.scratchCommentText {\r\n color: black;\r\n}\r\n.blocklyInsertionMarker > .blocklyPath {\r\n fill: #ccc;\r\n}\r\n\r\n/* Other / Multipurpose */\r\n.Popover-body {\r\n background: var(--ui-secondary);\r\n border-color: var(--ui-black-transparent);\r\n color: var(--text-primary);\r\n}\r\n.Popover-tipShape {\r\n fill: var(--ui-secondary);\r\n stroke: var(--ui-black-transparent);\r\n}\r\n" /***/ }), /***/ 170: /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(2642); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(12)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ 211: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXTERNAL MODULE: ./node_modules/classnames/index.js var classnames = __webpack_require__(6); var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames); // EXTERNAL MODULE: ./node_modules/prop-types/index.js var prop_types = __webpack_require__(0); var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types); // EXTERNAL MODULE: ./node_modules/react/index.js var react = __webpack_require__(1); var react_default = /*#__PURE__*/__webpack_require__.n(react); // EXTERNAL MODULE: ./node_modules/react-redux/es/index.js + 14 modules var es = __webpack_require__(9); // EXTERNAL MODULE: ./node_modules/redux/es/index.js + 6 modules var redux_es = __webpack_require__(62); // EXTERNAL MODULE: ./node_modules/react-intl/lib/index.es.js + 1 modules var index_es = __webpack_require__(4); // EXTERNAL MODULE: ./src/reducers/project-state.js var project_state = __webpack_require__(14); // EXTERNAL MODULE: ./src/containers/dom-element-renderer.jsx var dom_element_renderer = __webpack_require__(248); // EXTERNAL MODULE: ./src/lib/app-state-hoc.jsx var app_state_hoc = __webpack_require__(345); // EXTERNAL MODULE: ./src/lib/error-boundary-hoc.jsx + 2 modules var error_boundary_hoc = __webpack_require__(102); // EXTERNAL MODULE: ./src/lib/tw-project-meta-fetcher-hoc.jsx var tw_project_meta_fetcher_hoc = __webpack_require__(366); // EXTERNAL MODULE: ./src/lib/tw-state-manager-hoc.jsx var tw_state_manager_hoc = __webpack_require__(367); // EXTERNAL MODULE: ./src/lib/tw-theme-hoc.jsx var tw_theme_hoc = __webpack_require__(151); // EXTERNAL MODULE: ./src/lib/sb-file-uploader-hoc.jsx var sb_file_uploader_hoc = __webpack_require__(369); // EXTERNAL MODULE: ./src/addons/settings-store-singleton.js + 1 modules var settings_store_singleton = __webpack_require__(58); // EXTERNAL MODULE: ./src/lib/log.js var log = __webpack_require__(26); // CONCATENATED MODULE: ./src/lib/tw-fix-history-api.js const originalReplaceState = history.replaceState; history.replaceState = function () { try { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return originalReplaceState.call(this, ...args); } catch (e) { log["default"].error(e); } }; const originalPushState = history.pushState; history.pushState = function () { try { for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } return originalPushState.call(this, ...args); } catch (e) { log["default"].error(e); } }; // EXTERNAL MODULE: ./src/playground/render-gui.jsx + 285 modules var render_gui = __webpack_require__(387); // EXTERNAL MODULE: ./src/components/menu-bar/menu-bar.jsx + 21 modules var menu_bar = __webpack_require__(388); // EXTERNAL MODULE: ./node_modules/lodash.bindall/index.js var lodash_bindall = __webpack_require__(8); var lodash_bindall_default = /*#__PURE__*/__webpack_require__.n(lodash_bindall); // EXTERNAL MODULE: ./node_modules/react-tooltip/dist/index.js var dist = __webpack_require__(112); var dist_default = /*#__PURE__*/__webpack_require__.n(dist); // EXTERNAL MODULE: ./src/components/tw-project-input/project-input.css var project_input = __webpack_require__(642); var project_input_default = /*#__PURE__*/__webpack_require__.n(project_input); // EXTERNAL MODULE: ./src/lib/tw-navigation-utils.js var tw_navigation_utils = __webpack_require__(205); // CONCATENATED MODULE: ./src/components/tw-project-input/project-input.jsx const PROJECT_BASE = 'https://scratch.mit.edu/projects/'; const messages = Object(index_es["defineMessages"])({ tooltip: { "id": "tw.input.tooltip", "defaultMessage": "Copy and paste a Scratch project link here!" } }); class project_input_ProjectInput extends react_default.a.Component { constructor(props) { super(props); lodash_bindall_default()(this, ['handleKeyDown', 'handleChange', 'handleBlur', 'handleFocus', 'inputRef', 'tooltipRef']); this.state = { projectId: this.props.projectId }; } componentDidUpdate(prevProps) { if (this.props.projectId !== prevProps.projectId) { if (this.props.projectId === project_state["defaultProjectId"]) { this.input.focus(); this.input.selectionStart = this.input.value.length; } else { this.input.blur(); } // eslint-disable-next-line react/no-did-update-set-state this.setState({ projectId: this.props.projectId }); } } extractProjectId(text) { const numberMatch = text.match(/\d+/); return numberMatch ? numberMatch[0] : null; } readProjectId(e) { const id = this.extractProjectId(e.target.value); return id || project_state["defaultProjectId"]; } handleKeyDown(e) { if (e.key === 'Enter' && this.state.projectId) { this.input.blur(); } } handleChange(e) { this.setState({ projectId: this.readProjectId(e) || project_state["defaultProjectId"] }); } handleBlur() { if (this.state.projectId && this.state.projectId !== this.props.projectId) { this.props.setProjectId(this.state.projectId); } dist_default.a.hide(this.tooltip); } handleFocus(e) { if (this.extractProjectId(e.target.value)) { e.target.select(); } dist_default.a.show(this.tooltip); } inputRef(el) { this.input = el; } tooltipRef(el) { this.tooltip = el; } render() { const projectId = this.state.projectId === project_state["defaultProjectId"] ? '' : this.state.projectId || ''; return /*#__PURE__*/react_default.a.createElement("div", { ref: this.tooltipRef, "data-tip": this.props.intl.formatMessage(messages.tooltip) }, /*#__PURE__*/react_default.a.createElement(dist_default.a, { className: project_input_default.a.tooltip, effect: "solid" }), /*#__PURE__*/react_default.a.createElement("input", { ref: this.inputRef, spellCheck: "false", type: "text", value: "".concat(PROJECT_BASE).concat(projectId), className: project_input_default.a.input, onKeyDown: this.handleKeyDown, onChange: this.handleChange, onBlur: this.handleBlur, onFocus: this.handleFocus })); } } project_input_ProjectInput.propTypes = { intl: index_es["intlShape"], projectId: prop_types_default.a.string, setProjectId: prop_types_default.a.func }; const mapStateToProps = state => ({ projectId: state.scratchGui.projectState.projectId }); const mapDispatchToProps = dispatch => ({ setProjectId: projectId => Object(tw_navigation_utils["setProjectId"])(dispatch, projectId) }); /* harmony default export */ var tw_project_input_project_input = (Object(index_es["injectIntl"])(Object(es["connect"])(mapStateToProps, mapDispatchToProps)(project_input_ProjectInput))); // EXTERNAL MODULE: ./src/components/tw-studioview/studioview.css var studioview = __webpack_require__(85); var studioview_default = /*#__PURE__*/__webpack_require__.n(studioview); // CONCATENATED MODULE: ./src/components/tw-studioview/studioview.js /* eslint-disable */ // Imported from: // https://github.com/forkphorus/forkphorus/tree/master/studioview // With changes to make it work properly in the scratch-gui environment. // todo: we have to see if we are leaking memory when this is mounted and unmounted, esp. because of event listeners // todo: use react-intl for translations /** * @class */ var studioview_StudioView = function StudioView(studioId) { this.studioId = studioId; this.offset = 0; this.ended = false; this.loadingPage = false; this.unusedPlaceholders = []; this.root = document.createElement('div'); this.root.className = studioview_default.a.studioviewRoot; this.projectList = document.createElement('div'); this.projectList.className = studioview_default.a.studioviewList; this.root.appendChild(this.projectList); if ('IntersectionObserver' in window) { this.intersectionObserver = new IntersectionObserver(this.handleIntersection.bind(this), { root: this.projectList }); this.loadNextPageObserver = new IntersectionObserver(this.handleLoadNextPageIntersection.bind(this), { root: this.projectList }); } else { this.intersectionObserver = null; this.loadNextPageObserver = null; } // will be filled in by studioview.jsx this.messages = { AUTHOR_ATTRIBUTION: '', PROJECT_HOVER_TEXT: '', LOAD_ERROR: '' }; }; /** * Add a project to the view. * An unused placeholder element may be used, or it may be created. */ studioview_StudioView.prototype.addProject = function (details) { var el; if (this.unusedPlaceholders.length) { el = this.unusedPlaceholders.shift(); } else { el = this.createPlaceholder(); this.projectList.appendChild(el); } this.placeholderToProject(el, details.id, details.title, details.author); }; /** * Create an element that will load only when it becomes visible. */ studioview_StudioView.prototype.createLazyImage = function (src) { var el = document.createElement('img'); if (this.intersectionObserver) { this.intersectionObserver.observe(el); el.dataset.src = src; } else { // then we just won't lazy load it el.src = src; } return el; }; /** * Create a placeholder or placeholder element. */ studioview_StudioView.prototype.createPlaceholder = function () { var el = document.createElement('a'); el.className = classnames_default()(studioview_default.a.studioviewProject, studioview_default.a.studioviewPlaceholder); var thumbnail = document.createElement('div'); thumbnail.className = studioview_default.a.studioviewThumbnail; var title = document.createElement('div'); title.className = studioview_default.a.studioviewTitle; var author = document.createElement('div'); author.className = studioview_default.a.studioviewAuthor; el.thumbnailEl = thumbnail; el.titleEl = title; el.authorEl = author; el.appendChild(thumbnail); el.appendChild(title); el.appendChild(author); return el; }; /** * Convert a placeholder element made by createPlaceholder to a project element. */ studioview_StudioView.prototype.placeholderToProject = function (el, id, title, author) { el.className = classnames_default()(studioview_default.a.studioviewProject, studioview_default.a.studioviewLoaded); el.dataset.id = id; el.dataset.title = title; el.dataset.author = author; el.title = this.messages.PROJECT_HOVER_TEXT.replace('$author', author).replace('$title', title); el.href = studioview_StudioView.PROJECT_PAGE.replace('$id', id); var thumbnailSrc = studioview_StudioView.THUMBNAIL_SRC.replace('$id', id); var thumbnailImg = this.createLazyImage(thumbnailSrc); el.thumbnailEl.appendChild(thumbnailImg); el.titleEl.innerText = title; el.authorEl.innerText = this.messages.AUTHOR_ATTRIBUTION.replace('$author', author); el.addEventListener('click', this.handleClick.bind(this), true); el.addEventListener('keydown', this.handleKeyDown.bind(this), true); return el; }; /** * Adds an error message to the list. */ studioview_StudioView.prototype.addErrorElement = function () { var el = document.createElement('div'); el.innerText = this.messages.LOAD_ERROR; el.className = studioview_default.a.studioviewError; this.projectList.appendChild(el); }; studioview_StudioView.prototype.handleLoadNextPageIntersection = function (e) { for (var i = 0; i < e.length; i++) { var intersection = e[i]; if (intersection.isIntersecting && this.canLoadNext()) { this.loadNextPage(); } } }; // Click a project element or a child of a project element studioview_StudioView.prototype.clickProject = function (el) { while (!el.classList.contains(studioview_default.a.studioviewProject)) { el = el.parentNode; } var id = el.dataset.id; this.onselect(id, el); }; // Called when click is fired on a project element studioview_StudioView.prototype.handleClick = function (e) { e.preventDefault(); this.clickProject(e.target); }; // Called when keydown is fired on a project element studioview_StudioView.prototype.handleKeyDown = function (e) { if (e.keyCode === 13) { // treat enter (13) as click e.preventDefault(); this.clickProject(e.target); } }; // Called by the IntersectionObserver when it sees an intersection studioview_StudioView.prototype.handleIntersection = function (entries, observer) { entries.forEach(function (entry) { if (entry.isIntersecting) { var target = entry.target; target.src = target.dataset.src; target.dataset.src = ''; target.className = ''; observer.unobserve(target); } }); }; /** * Determines whether it is safe to attempt to load the next page. */ studioview_StudioView.prototype.canLoadNext = function () { return !this.loadingPage && !this.ended; }; /** * Remove all unused placeholder elements. */ studioview_StudioView.prototype.cleanupPlaceholders = function () { while (this.unusedPlaceholders.length) { var el = this.unusedPlaceholders.pop(); this.projectList.removeChild(el); } }; /** * Add placeholder placeholder elements. */ studioview_StudioView.prototype.addPlaceholders = function () { for (var i = 0; i < studioview_StudioView.PLACEHOLDER_COUNT; i++) { var el = this.createPlaceholder(); this.unusedPlaceholders.push(el); this.projectList.appendChild(el); } }; /** * Make changes to the order of projects. * Default shuffler does nothing. */ studioview_StudioView.prototype.shuffler = function (projects) { return projects; }; /** * Begins loading the next page. */ studioview_StudioView.prototype.loadNextPage = function () { if (this.loadingPage) { throw new Error('Already loading the next page'); } if (this.ended) { throw new Error('There are no more pages to load'); } if (this.unusedPlaceholders.length === 0) { this.addPlaceholders(); } if (this.loadNextPageObserver) { this.loadNextPageObserver.disconnect(); } this.root.setAttribute('loading', ''); this.loadingPage = true; var xhr = new XMLHttpRequest(); xhr.responseType = 'json'; xhr.onload = function () { var rawProjects = xhr.response; if (!Array.isArray(rawProjects)) { xhr.onerror(); return; } var projects = []; for (var i = 0; i < rawProjects.length; i++) { var p = rawProjects[i]; projects.push({ id: p.id, title: p.title, author: p.username }); } projects = this.shuffler(projects); for (var i = 0; i < projects.length; i++) { this.addProject(projects[i]); } this.cleanupPlaceholders(); if (rawProjects.length === 40) { if (this.loadNextPageObserver) { this.loadNextPageObserver.observe(this.projectList.lastChild); } } else { this.ended = true; this.onend(); } this.offset += projects.length; this.loadingPage = false; this.root.removeAttribute('loading'); this.onpageload(); }.bind(this); xhr.onerror = function () { this.root.setAttribute('error', ''); this.cleanupPlaceholders(); this.addErrorElement(); this.ended = true; }.bind(this); var url = studioview_StudioView.STUDIO_API.replace('$id', this.studioId).replace('$offset', '' + this.offset); xhr.open('GET', url); xhr.send(); }; studioview_StudioView.prototype.getURL = function () { return studioview_StudioView.STUDIO_PAGE.replace('$id', this.studioId); }; studioview_StudioView.prototype.onselect = function (id, el) {}; studioview_StudioView.prototype.onpageload = function () {}; studioview_StudioView.prototype.onend = function () {}; studioview_StudioView.STUDIO_API = 'https://trampoline.turbowarp.org/api/studios/33606945/projects?offset=$offset'; // The URL to download thumbnails from. // $id is replaced with the project's ID. studioview_StudioView.THUMBNAIL_SRC = 'https://trampoline.turbowarp.org/thumbnails/$id?width=144&height=108'; // The URL for project pages. // $id is replaced with the project ID. studioview_StudioView.PROJECT_PAGE = 'https://turbowarp.org/$id'; // The URL for studio pages. // $id is replaced with the studio ID. studioview_StudioView.STUDIO_PAGE = 'https://scratch.mit.edu/studios/33606945/'; // The amount of "placeholders" to insert before the next page loads. studioview_StudioView.PLACEHOLDER_COUNT = 9; /* harmony default export */ var tw_studioview_studioview = (studioview_StudioView); // CONCATENATED MODULE: ./src/components/tw-studioview/studioview.jsx const studioview_messages = Object(index_es["defineMessages"])({ authorAttribution: { "id": "tw.studioview.authorAttribution", "defaultMessage": "by {author}" }, hoverText: { "id": "tw.studioview.hoverText", "defaultMessage": "{title} by {author}" }, error: { "id": "tw.studioview.error", "defaultMessage": "There was an error loading the next page of projects." } }); class studioview_StudioViewComponent extends react_default.a.Component { constructor(props) { super(props); lodash_bindall_default()(this, ['handleSelect', 'ref']); } componentDidMount() { this.studioView = new tw_studioview_studioview(this.props.id); this.studioView.messages.AUTHOR_ATTRIBUTION = this.props.intl.formatMessage(studioview_messages.authorAttribution, { // studioview uses $-based variables author: '$author' }); this.studioView.messages.PROJECT_HOVER_TEXT = this.props.intl.formatMessage(studioview_messages.hoverText, { // studioview uses $-based variables author: '$author', title: '$title' }); this.studioView.messages.LOAD_ERROR = this.props.intl.formatMessage(studioview_messages.error); if (this.props.placeholder) { this.studioView.addPlaceholders(); } else { this.studioView.loadNextPage(); } this.studioView.onselect = this.handleSelect; this.el.appendChild(this.studioView.root); } componentDidUpdate(prevProps) { if (prevProps.placeholder && !this.props.placeholder) { this.studioView.loadNextPage(); } } handleSelect(id) { this.props.onSelect(id); } ref(el) { this.el = el; } render() { return /*#__PURE__*/react_default.a.createElement("div", { className: classnames_default()(studioview_default.a.wrapper), ref: this.ref }); } } studioview_StudioViewComponent.propTypes = { id: prop_types_default.a.string.isRequired, intl: index_es["intlShape"].isRequired, placeholder: prop_types_default.a.bool, onSelect: prop_types_default.a.func.isRequired }; /* harmony default export */ var components_tw_studioview_studioview = (Object(index_es["injectIntl"])(studioview_StudioViewComponent)); // EXTERNAL MODULE: ./src/components/tw-featured-projects/featured-projects.css var featured_projects = __webpack_require__(170); var featured_projects_default = /*#__PURE__*/__webpack_require__.n(featured_projects); // CONCATENATED MODULE: ./src/components/tw-featured-projects/featured-projects.jsx class featured_projects_FeaturedProjects extends react_default.a.Component { constructor(props) { super(props); lodash_bindall_default()(this, ['handleSelect', 'handleOpenProjects']); this.state = { opened: false, transition: true }; } componentDidUpdate(prevProps) { if (this.props.projectId === '0' && prevProps.projectId === null) { // eslint-disable-next-line react/no-did-update-set-state this.setState({ opened: true, transition: false }); } } handleSelect(id) { this.props.setProjectId(id); } handleOpenProjects() { this.setState({ opened: true }); } render() { const opened = this.state.opened; return /*#__PURE__*/react_default.a.createElement("div", { className: featured_projects_default.a.container }, /*#__PURE__*/react_default.a.createElement("div", { className: classnames_default()(featured_projects_default.a.projects, { [featured_projects_default.a.opened]: opened, [featured_projects_default.a.transition]: this.state.transition }) }, /*#__PURE__*/react_default.a.createElement(components_tw_studioview_studioview, { id: this.props.studio, onSelect: this.handleSelect, placeholder: !opened }), opened ? null : /*#__PURE__*/react_default.a.createElement("div", { className: featured_projects_default.a.openerContainer, onClick: this.handleOpenProjects }, /*#__PURE__*/react_default.a.createElement("div", { className: featured_projects_default.a.openerContent }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"], { defaultMessage: "Click to view featured projects.", id: "tw.viewFeaturedProjects" })))), /*#__PURE__*/react_default.a.createElement("div", { className: featured_projects_default.a.footer }, /*#__PURE__*/react_default.a.createElement("a", { target: "_blank", rel: "noopener noreferrer", href: "https://scratch.mit.edu/studios/".concat(this.props.studio, "/") }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"], { defaultMessage: "View studio on Scratch.", id: "tw.featuredProjectsStudio" })))); } } featured_projects_FeaturedProjects.propTypes = { setProjectId: prop_types_default.a.func, projectId: prop_types_default.a.string, studio: prop_types_default.a.string }; const featured_projects_mapStateToProps = state => ({ projectId: state.scratchGui.projectState.projectId }); const featured_projects_mapDispatchToProps = dispatch => ({ setProjectId: projectId => Object(tw_navigation_utils["setProjectId"])(dispatch, projectId) }); /* harmony default export */ var tw_featured_projects_featured_projects = (Object(es["connect"])(featured_projects_mapStateToProps, featured_projects_mapDispatchToProps)(featured_projects_FeaturedProjects)); // EXTERNAL MODULE: ./src/components/tw-description/description.css var tw_description_description = __webpack_require__(225); var description_default = /*#__PURE__*/__webpack_require__.n(tw_description_description); // EXTERNAL MODULE: ./node_modules/react-string-replace/index.js var react_string_replace = __webpack_require__(405); var react_string_replace_default = /*#__PURE__*/__webpack_require__.n(react_string_replace); // CONCATENATED MODULE: ./src/components/tw-description/description.jsx const decorate = text => { // https://github.com/LLK/scratch-www/blob/25232a06bcceeaddec8fcb24fb63a44d870cf1cf/src/lib/decorate-text.jsx // Make @mentions clickable text = react_string_replace_default()(text, /@([\w-]+)/, (match, i) => /*#__PURE__*/react_default.a.createElement("a", { href: "https://scratch.mit.edu/users/".concat(match, "/"), rel: "noreferrer", key: match + i }, "@".concat(match))); // Make links clickable const linkRegex = /(https?:\/\/[\w\d_\-.]{1,256}(?:\/(?:\S*[\w:/#[\]@$&'()*+=])?)?(?![^?!,:;\w\s]\S))/g; text = react_string_replace_default()(text, linkRegex, (match, i) => /*#__PURE__*/react_default.a.createElement("a", { href: match, rel: "noreferrer", key: match + i }, match)); // Make hashtags clickable text = react_string_replace_default()(text, /#([\w-]+)/g, (match, i) => /*#__PURE__*/react_default.a.createElement("a", { href: "https://scratch.mit.edu/search/projects?q=".concat(match), key: match + i }, "#".concat(match))); return text; }; const Description = _ref => { let { instructions, credits, projectId } = _ref; return instructions !== 'unshared' && credits !== 'unshared' && /*#__PURE__*/react_default.a.createElement("div", { className: description_default.a.description }, /*#__PURE__*/react_default.a.createElement("div", { className: description_default.a.projectLink }, /*#__PURE__*/react_default.a.createElement("a", { href: "https://scratch.mit.edu/projects/".concat(projectId, "/"), target: "_blank", rel: "noreferrer" }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"], { defaultMessage: "View project on Scratch", id: "tw.viewOnScratch" }))), instructions ? /*#__PURE__*/react_default.a.createElement("div", null, /*#__PURE__*/react_default.a.createElement("h2", { className: description_default.a.header }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"], { defaultMessage: "Instructions", id: "tw.home.instructions" })), decorate(instructions)) : null, instructions && credits ? /*#__PURE__*/react_default.a.createElement("div", { className: description_default.a.divider }) : null, credits && /*#__PURE__*/react_default.a.createElement("div", null, /*#__PURE__*/react_default.a.createElement("h2", { className: description_default.a.header }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"], { defaultMessage: "Notes and Credits", id: "tw.home.credit" })), decorate(credits))); }; Description.propTypes = { instructions: prop_types_default.a.string, credits: prop_types_default.a.string, projectId: prop_types_default.a.string }; /* harmony default export */ var components_tw_description_description = (Description); // EXTERNAL MODULE: ./src/containers/webgl-modal.jsx + 1 modules var webgl_modal = __webpack_require__(389); // EXTERNAL MODULE: ./src/components/browser-modal/browser-modal.jsx var browser_modal = __webpack_require__(384); // EXTERNAL MODULE: ./src/components/tw-cloud-variable-badge/clouddata.svg var clouddata = __webpack_require__(1347); var clouddata_default = /*#__PURE__*/__webpack_require__.n(clouddata); // EXTERNAL MODULE: ./src/components/tw-cloud-variable-badge/cloud-variable-badge.css var cloud_variable_badge = __webpack_require__(406); var cloud_variable_badge_default = /*#__PURE__*/__webpack_require__.n(cloud_variable_badge); // CONCATENATED MODULE: ./src/components/tw-cloud-variable-badge/cloud-variable-badge.jsx const CloudVariableBadge = () => /*#__PURE__*/react_default.a.createElement("div", { className: cloud_variable_badge_default.a.badge }, /*#__PURE__*/react_default.a.createElement("div", { className: cloud_variable_badge_default.a.icon }, /*#__PURE__*/react_default.a.createElement("img", { src: clouddata_default.a, alt: "Cloud", width: "32", height: "32" })), /*#__PURE__*/react_default.a.createElement("div", { className: cloud_variable_badge_default.a.text }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "This project uses cloud variables. Anyone can put thier username as almost anything, remember that Gvbvdxx Mod 2 is not responsible for impersonation, anyone can pretend that they are somebody else. {learnMore}", id: "tw.cloudVariableBadge", values: { learnMore: /*#__PURE__*/react_default.a.createElement("a", { href: "https://docs.turbowarp.org/cloud-variables", target: "_blank", rel: "noreferrer" }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"], { defaultMessage: "Learn more.", id: "gui.alerts.cloudInfoLearnMore" })) } }))); /* harmony default export */ var tw_cloud_variable_badge_cloud_variable_badge = (CloudVariableBadge); // EXTERNAL MODULE: ./src/lib/tw-environment-support-prober.js var tw_environment_support_prober = __webpack_require__(125); // EXTERNAL MODULE: ./src/addons/channels.js var channels = __webpack_require__(93); // EXTERNAL MODULE: ./node_modules/file-loader/dist/cjs.js?name=sw.js!./src/playground/service-worker.js var service_worker = __webpack_require__(1348); var service_worker_default = /*#__PURE__*/__webpack_require__.n(service_worker); // CONCATENATED MODULE: ./src/playground/load-service-worker.js let loaded = false; const actuallyLoadServiceWorker = () => { navigator.serviceWorker.register(service_worker_default.a).catch(err => { log["default"].error('sw error', err); }); }; const loadServiceWorker = () => { if (false) {} }; // EXTERNAL MODULE: ./src/addons/entry.js var entry = __webpack_require__(386); // EXTERNAL MODULE: ./src/playground/interface.css var playground_interface = __webpack_require__(88); var interface_default = /*#__PURE__*/__webpack_require__.n(playground_interface); // CONCATENATED MODULE: ./src/playground/render-interface.jsx const _excluded = ["intl", "hasCloudVariables", "description", "isFullScreen", "isLoading", "isPlayerOnly", "isRtl", "onClickTheme", "projectId"]; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; } /** * Copyright (C) 2021 Thomas Weber * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ //Prop type error cleaner. var oldConsolError = console.error; console.error = function () { for (var _len = arguments.length, messages = new Array(_len), _key = 0; _key < _len; _key++) { messages[_key] = arguments[_key]; } try { var newMessages = []; for (var msg of messages) { if (msg.indexOf("Warning: Failed prop type:") > -1) { //ignore the message } else { newMessages.push(msg); } } if (newMessages.length < 1) { //dont post the console message. } else { oldConsolError.apply(console, newMessages); } } catch (e) { //Idk what to do here, so display the error anyways. oldConsolError.apply(console, messages); } }; if (window.parent !== window) { // eslint-disable-next-line no-alert alert('Using embed'); throw new Error('Invalid embed'); } let announcement = null; if (false) {} const handleClickAddonSettings = () => { const path = false ? undefined : 'addons.html'; window.open("".concat("").concat(path)); }; const render_interface_messages = Object(index_es["defineMessages"])({ defaultTitle: { "id": "tw.guiDefaultTitle", "defaultMessage": "Make your Scratch 3.0 projects fast, and more in control with Gvbvdxx Mod 2." } }); const WrappedMenuBar = Object(redux_es["compose"])(sb_file_uploader_hoc["default"])(menu_bar["default"]); if (channels["default"].reloadChannel) { channels["default"].reloadChannel.addEventListener('message', () => { location.reload(); }); } if (channels["default"].changeChannel) { channels["default"].changeChannel.addEventListener('message', e => { settings_store_singleton["default"].setStoreWithVersionCheck(e.data); }); } Object(entry["default"])(); const Footer = () => /*#__PURE__*/react_default.a.createElement("footer", { className: interface_default.a.footer }, /*#__PURE__*/react_default.a.createElement("div", { className: interface_default.a.footerContent }, /*#__PURE__*/react_default.a.createElement("div", { className: interface_default.a.footerText }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"] // eslint-disable-next-line max-len , { defaultMessage: "Gvbvdxx Mod 2 is not affiliated with Scratch, the Scratch Team, or the Scratch Foundation.", id: "tw.footer.disclaimer" })), /*#__PURE__*/react_default.a.createElement("div", { className: interface_default.a.footerColumns }, /*#__PURE__*/react_default.a.createElement("div", { className: interface_default.a.footerSection }, /*#__PURE__*/react_default.a.createElement("a", { href: "https://fosshost.org/" }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"], { defaultMessage: "Hosting provided by Fosshost", id: "tw.footer.fosshost" })), /*#__PURE__*/react_default.a.createElement("a", { href: "credits.html" }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"], { defaultMessage: "Credits", id: "tw.footer.credits" }))), /*#__PURE__*/react_default.a.createElement("div", { className: interface_default.a.footerSection }, /*#__PURE__*/react_default.a.createElement("a", { href: "https://desktop.turbowarp.org/" }, 'TurboWarp Desktop'), /*#__PURE__*/react_default.a.createElement("a", { href: "https://packager.turbowarp.org/" }, 'TurboWarp Packager'), /*#__PURE__*/react_default.a.createElement("a", { href: "https://docs.turbowarp.org/embedding" }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"], { defaultMessage: "Embedding", id: "tw.footer.embed" })), /*#__PURE__*/react_default.a.createElement("a", { href: "https://docs.turbowarp.org/url-parameters" }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"], { defaultMessage: "URL Parameters", id: "tw.footer.parameters" })), /*#__PURE__*/react_default.a.createElement("a", { href: "https://docs.turbowarp.org/translate" }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"], { defaultMessage: "Help Translate TurboWarp", id: "tw.footer.translate" }))), /*#__PURE__*/react_default.a.createElement("div", { className: interface_default.a.footerSection }, /*#__PURE__*/react_default.a.createElement("a", { href: "https://scratch.mit.edu/users/gvbvdxx/#comments" }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"], { defaultMessage: "Feedback & Bugs", id: "tw.feedback" })), /*#__PURE__*/react_default.a.createElement("a", { href: "https://github.com/TurboWarp/" }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"], { defaultMessage: "Source Code", id: "tw.code" })), /*#__PURE__*/react_default.a.createElement("a", { href: "privacy.html" }, /*#__PURE__*/react_default.a.createElement(index_es["FormattedMessage"], { defaultMessage: "Privacy Policy", id: "tw.privacy" })))))); class render_interface_Interface extends react_default.a.Component { constructor(props) { super(props); this.handleUpdateProjectTitle = this.handleUpdateProjectTitle.bind(this); } componentDidUpdate(prevProps) { if (prevProps.isLoading && !this.props.isLoading) { loadServiceWorker(); } } handleUpdateProjectTitle(title, isDefault) { if (isDefault || !title) { document.title = "Gvbvdxx Mod 2 - ".concat(this.props.intl.formatMessage(render_interface_messages.defaultTitle)); } else { document.title = "".concat(title, " - Gvbvdxx Mod 2"); } } render() { const _this$props = this.props, { /* eslint-disable no-unused-vars */ intl, hasCloudVariables, description, isFullScreen, isLoading, isPlayerOnly, isRtl, onClickTheme, projectId /* eslint-enable no-unused-vars */ } = _this$props, props = _objectWithoutProperties(_this$props, _excluded); const isHomepage = isPlayerOnly && !isFullScreen; const isEditor = !isPlayerOnly; return /*#__PURE__*/react_default.a.createElement("div", { className: classnames_default()(interface_default.a.container, { [interface_default.a.playerOnly]: isHomepage, [interface_default.a.editor]: isEditor }) }, isHomepage ? /*#__PURE__*/react_default.a.createElement("div", { className: interface_default.a.menu }, /*#__PURE__*/react_default.a.createElement(WrappedMenuBar, { canChangeLanguage: true, canManageFiles: true, enableSeeInside: true, onClickAddonSettings: handleClickAddonSettings, onClickTheme: onClickTheme })) : null, /*#__PURE__*/react_default.a.createElement("div", { className: interface_default.a.center, style: isPlayerOnly ? { // add a couple pixels to account for border (TODO: remove weird hack) width: "".concat(Math.max(480, props.customStageSize.width) + 2, "px") } : null }, isHomepage && announcement ? /*#__PURE__*/react_default.a.createElement(dom_element_renderer["default"], { domElement: announcement }) : null, /*#__PURE__*/react_default.a.createElement(render_gui["default"], _extends({ onClickAddonSettings: handleClickAddonSettings, onClickTheme: onClickTheme, onUpdateProjectTitle: this.handleUpdateProjectTitle, backpackVisible: true, backpackHost: "_local_" }, props)), isHomepage ? /*#__PURE__*/react_default.a.createElement(react_default.a.Fragment, null, Object(tw_environment_support_prober["isRendererSupported"])() ? null : /*#__PURE__*/react_default.a.createElement(webgl_modal["default"], { isRtl: isRtl }), Object(tw_environment_support_prober["isBrowserSupported"])() ? null : /*#__PURE__*/react_default.a.createElement(browser_modal["default"], { isRtl: isRtl }), /*#__PURE__*/react_default.a.createElement(tw_project_input_project_input, null), description.instructions || description.credits ? /*#__PURE__*/react_default.a.createElement("div", { className: interface_default.a.section }, /*#__PURE__*/react_default.a.createElement(components_tw_description_description, { instructions: description.instructions, credits: description.credits, projectId: projectId })) : null, /*#__PURE__*/react_default.a.createElement("hr", null), /*#__PURE__*/react_default.a.createElement("b", null, "UPDATE: The scratch account gvbvdxx has been removed from scratch.mit.edu because I requested Scratch Team to do so. Gvbmod2-dev was permbanned on scratch. I've given up using scratch, and will never return using it. If you want to see updates, check my new ", /*#__PURE__*/react_default.a.createElement("a", { href: "https://www.youtube.com/@gvbmod2-dev", target: "_blank" }, "YouTube channel.")), /*#__PURE__*/react_default.a.createElement("br", null), /*#__PURE__*/react_default.a.createElement("span", null, "Gvbvdxx Mod 2 is created by gvbvdxx. It is a modifcation on top of TurboWarp. It also adds extensions more to use and make more powerful projects.", /*#__PURE__*/react_default.a.createElement("br", null)), /*#__PURE__*/react_default.a.createElement("br", null)) : null)); } } render_interface_Interface.propTypes = { intl: index_es["intlShape"], hasCloudVariables: prop_types_default.a.bool, customStageSize: prop_types_default.a.shape({ width: prop_types_default.a.number, height: prop_types_default.a.number }), description: prop_types_default.a.shape({ credits: prop_types_default.a.string, instructions: prop_types_default.a.string }), isFullScreen: prop_types_default.a.bool, isLoading: prop_types_default.a.bool, isPlayerOnly: prop_types_default.a.bool, isRtl: prop_types_default.a.bool, onClickTheme: prop_types_default.a.func, projectId: prop_types_default.a.string }; const render_interface_mapStateToProps = state => ({ hasCloudVariables: state.scratchGui.tw.hasCloudVariables, customStageSize: state.scratchGui.customStageSize, description: state.scratchGui.tw.description, isFullScreen: state.scratchGui.mode.isFullScreen, isLoading: Object(project_state["getIsLoading"])(state.scratchGui.projectState.loadingState), isPlayerOnly: state.scratchGui.mode.isPlayerOnly, isRtl: state.locales.isRtl, projectId: state.scratchGui.projectState.projectId }); const render_interface_mapDispatchToProps = () => ({}); const ConnectedInterface = Object(index_es["injectIntl"])(Object(es["connect"])(render_interface_mapStateToProps, render_interface_mapDispatchToProps)(render_interface_Interface)); const WrappedInterface = Object(redux_es["compose"])(app_state_hoc["default"], Object(error_boundary_hoc["default"])('TW Interface'), tw_project_meta_fetcher_hoc["default"], tw_state_manager_hoc["default"], tw_theme_hoc["default"])(ConnectedInterface); /* harmony default export */ var render_interface = __webpack_exports__["default"] = (WrappedInterface); /***/ }), /***/ 225: /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(2643); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(12)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ 246: /***/ (function(module, exports) { /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return value != null && typeof value == 'object'; } module.exports = isObjectLike; /***/ }), /***/ 2640: /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(11)(false); // imports // module exports.push([module.i, "/* #ffa587 */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* #4C97FF */ /* #3373CC */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* opt-in theme overrides */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /*#ff794d*/ /* #0FBD8C */ /* #0B8E69 */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /*Trying to match the colors of the orignal*/ /* #E5F0FF */ /* #E9F1FC */ /* #D9E3F2 */ /* 90% transparent version of motion-primary */ /* #FFFFFF */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 25% transparent version of ui-white */ /* 15% transparent version of black */ /* #575E75 */ /* #4C97FF */ /* #3373CC */ /* 35% transparent version of motion-primary */ /* 15% transparent version of motion-primary */ /* #FF661A */ /* #E64D00 */ /* #CF63CF */ /* #BD42BD */ /* #FFAB19 */ /* #FF8C1A */ /* #0FBD8C */ /* #0FBD8C */ /* #FF8C1A */ /* #FFB366 */ /* #FF8C1A */ /* #0FBD8C */ /* #0B8E69 */ /* 35% transparent version of extensions-primary */ /* opaque version of extensions-transparent, on white bg */ /* lighter than motion-primary */ /*\r\n Contains constants for the z-index values of elements that are part of the global stack context.\r\n In other words, z-index values that are \"inside\" a component are not added here.\r\n This prevents conflicts between identical z-index values in different components.\r\n*/ /* Toolbox z-index: 40; set in scratch-blocks */ /* tooltips should go over add buttons if they overlap */ /* monitors go over add buttons */ /* \"ask\" block text input goes above monitors */ /* menu-bar should go over monitors, alerts and tutorials */ /* tw: show below menu bar normally */ /* Block drag z-index: 1000; default 50 is overriden in blocks.css */ /* so it is draggable into other panes */ /* in most interfaces, the context menu is always on top */ .project-input_input_1gT4y {\r\n border: none;\r\n width: 100%;\r\n font-size: 23px;\r\n line-height: 32px;\r\n opacity: 0.5;\r\n background-color: transparent;\r\n color: inherit;\r\n} .project-input_input_1gT4y:focus {\r\n opacity: 1;\r\n} .project-input_input_1gT4y:disabled {\r\n opacity: 0.8;\r\n} .project-input_tooltip_3y9t4 {\r\n opacity: 1 !important;\r\n background-color: #e066ff !important;\r\n border: 1px solid hsla(0, 0%, 0%, .1) !important;\r\n box-shadow: 0 0 .5rem hsla(0, 0%, 0%, .25) !important;\r\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif !important;\r\n border: 1px solid hsla(0, 0%, 0%, .1) !important;\r\n z-index: 491 !important;\r\n} .project-input_tooltip_3y9t4:after {\r\n border-top-color: #e066ff !important;\r\n}\r\n", ""]); // exports exports.locals = { "input": "project-input_input_1gT4y", "tooltip": "project-input_tooltip_3y9t4" }; /***/ }), /***/ 2641: /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(11)(false); // imports // module exports.push([module.i, "/*\r\nImported from:\r\nhttps://github.com/forkphorus/forkphorus/tree/master/studioview\r\nWith changes to make it work properly in the scratch-gui environment.\r\n*/\r\n\r\n/* we wrap it in a
*/\r\n\r\n.studioview_wrapper_GWWqn {\r\n height: 100%;\r\n}\r\n\r\n/* fix some styles that can be messed up by scratch-gui */\r\n\r\n.studioview_studioview-root_z_auP * {\r\n box-sizing: content-box !important;\r\n}\r\n\r\n.studioview_studioview-root_z_auP {\r\n height: 100%;\r\n}\r\n\r\n.studioview_studioview-list_1X1Hw {\r\n width: 100%;\r\n height: 100%;\r\n overflow-y: scroll;\r\n overflow-anchor: none;\r\n}\r\n\r\n.studioview_studioview-project_2kPXX, .studioview_studioview-placeholder__NrP7 {\r\n display: inline-block;\r\n width: 144px;\r\n padding: 3px;\r\n margin-bottom: 1px;\r\n margin-right: 1px;\r\n}\r\n\r\n.studioview_studioview-root_z_auP .studioview_studioview-project_2kPXX {\r\n color: inherit;\r\n position: relative;\r\n text-decoration: none;\r\n}\r\n\r\n.studioview_studioview-loaded_mx24q:hover::before, .studioview_studioview-loaded_mx24q:active::before {\r\n content: '';\r\n pointer-events: none;\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background-color: currentColor;\r\n opacity: 0.1;\r\n}\r\n\r\n.studioview_studioview-root_z_auP .studioview_studioview-loaded_mx24q:active::before {\r\n opacity: 0.2;\r\n}\r\n\r\n.studioview_studioview-root_z_auP .studioview_studioview-title_1eZiq,\r\n.studioview_studioview-root_z_auP .studioview_studioview-author_Bs0a5 {\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n color: inherit;\r\n text-decoration: none;\r\n}\r\n\r\n.studioview_studioview-title_1eZiq {\r\n font-size: 0.8em;\r\n font-weight: bold;\r\n}\r\n\r\n.studioview_studioview-author_Bs0a5 {\r\n font-size: 0.75em;\r\n}\r\n\r\n.studioview_studioview-error_ZX8-M {\r\n width: 100%;\r\n}\r\n\r\n.studioview_studioview-thumbnail_2nU6_, .studioview_studioview-placeholder-thumbnail_4Fi8w {\r\n position: relative;\r\n width: 144px;\r\n height: 108px;\r\n}\r\n\r\n.studioview_studioview-thumbnail_2nU6_::before {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background-color: currentColor;\r\n opacity: 0.1;\r\n}\r\n\r\n.studioview_studioview-thumbnail_2nU6_ img {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.studioview_studioview-placeholder__NrP7 .studioview_studioview-thumbnail_2nU6_,\r\n.studioview_studioview-placeholder__NrP7 .studioview_studioview-title_1eZiq,\r\n.studioview_studioview-placeholder__NrP7 .studioview_studioview-author_Bs0a5 {\r\n background-color: currentColor;\r\n opacity: 0.1;\r\n}\r\n\r\n.studioview_studioview-title_1eZiq {\r\n height: 20px;\r\n margin-top: 2px;\r\n}\r\n\r\n.studioview_studioview-author_Bs0a5 {\r\n height: 18px;\r\n}\r\n\r\n.studioview_studioview-placeholder__NrP7 .studioview_studioview-title_1eZiq {\r\n border-radius: 2px 2px 2px 0;\r\n width: 100%;\r\n}\r\n\r\n.studioview_studioview-placeholder__NrP7 .studioview_studioview-author_Bs0a5 {\r\n border-radius: 0 0 2px 2px;\r\n width: 50%;\r\n}\r\n", ""]); // exports exports.locals = { "wrapper": "studioview_wrapper_GWWqn", "studioview-root": "studioview_studioview-root_z_auP", "studioviewRoot": "studioview_studioview-root_z_auP", "studioview-list": "studioview_studioview-list_1X1Hw", "studioviewList": "studioview_studioview-list_1X1Hw", "studioview-project": "studioview_studioview-project_2kPXX", "studioviewProject": "studioview_studioview-project_2kPXX", "studioview-placeholder": "studioview_studioview-placeholder__NrP7", "studioviewPlaceholder": "studioview_studioview-placeholder__NrP7", "studioview-loaded": "studioview_studioview-loaded_mx24q", "studioviewLoaded": "studioview_studioview-loaded_mx24q", "studioview-title": "studioview_studioview-title_1eZiq", "studioviewTitle": "studioview_studioview-title_1eZiq", "studioview-author": "studioview_studioview-author_Bs0a5", "studioviewAuthor": "studioview_studioview-author_Bs0a5", "studioview-error": "studioview_studioview-error_ZX8-M", "studioviewError": "studioview_studioview-error_ZX8-M", "studioview-thumbnail": "studioview_studioview-thumbnail_2nU6_", "studioviewThumbnail": "studioview_studioview-thumbnail_2nU6_", "studioview-placeholder-thumbnail": "studioview_studioview-placeholder-thumbnail_4Fi8w", "studioviewPlaceholderThumbnail": "studioview_studioview-placeholder-thumbnail_4Fi8w" }; /***/ }), /***/ 2642: /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(11)(false); // imports // module exports.push([module.i, ".featured-projects_container_bte5t {\r\n margin-bottom: 8px;\r\n}\r\n\r\n.featured-projects_opener-container_2VEwo {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n opacity: 0.8;\r\n color: #222;\r\n}\r\n\r\n.featured-projects_opener-container_2VEwo:hover {\r\n opacity: 1;\r\n}\r\n\r\n.featured-projects_opener-content_2nRNs {\r\n background-color: white;\r\n padding: 4px;\r\n border: 1px solid black;\r\n box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.25);\r\n}\r\n\r\n.featured-projects_projects_3USxm {\r\n position: relative;\r\n height: 155px;\r\n}\r\n\r\n.featured-projects_projects_3USxm.featured-projects_transition_2s3rd {\r\n transition: .2s height;\r\n}\r\n\r\n.featured-projects_projects_3USxm.featured-projects_opened_1ALXH {\r\n height: 310px;\r\n}\r\n\r\n.featured-projects_footer_UQGNp {\r\n \r\n}\r\n", ""]); // exports exports.locals = { "container": "featured-projects_container_bte5t", "opener-container": "featured-projects_opener-container_2VEwo", "openerContainer": "featured-projects_opener-container_2VEwo", "opener-content": "featured-projects_opener-content_2nRNs", "openerContent": "featured-projects_opener-content_2nRNs", "projects": "featured-projects_projects_3USxm", "transition": "featured-projects_transition_2s3rd", "opened": "featured-projects_opened_1ALXH", "footer": "featured-projects_footer_UQGNp" }; /***/ }), /***/ 2643: /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(11)(false); // imports // module exports.push([module.i, ".description_description_TJxeu {\r\n max-height: 250px;\r\n overflow: auto;\r\n white-space: pre-line;\r\n overflow-wrap: break-word;\r\n line-height: 1.5em;\r\n padding: 0.5rem;\r\n margin: 5px 0 8px 0;\r\n border: 1px solid #b9d6ff;\r\n background-color: #dbebff;\r\n border-radius: 0.5rem;\r\n}\r\n\r\n.description_description_TJxeu a {\r\n font-weight: bold;\r\n text-decoration: none;\r\n}\r\n\r\n[theme=\"dark\"] .description_description_TJxeu {\r\n border-color: #203652;\r\n background-color: #16202c;\r\n}\r\n\r\n.description_header_3Bv2V {\r\n font-weight: bold;\r\n font-size: 1em;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n\r\n.description_divider_NGZle {\r\n margin-top: 8px;\r\n}\r\n\r\n.description_project-link_2xt5_ {\r\n margin-bottom: 2px;\r\n}\r\n", ""]); // exports exports.locals = { "description": "description_description_TJxeu", "header": "description_header_3Bv2V", "divider": "description_divider_NGZle", "project-link": "description_project-link_2xt5_", "projectLink": "description_project-link_2xt5_" }; /***/ }), /***/ 2644: /***/ (function(module, exports, __webpack_require__) { var baseIsRegExp = __webpack_require__(2645), baseUnary = __webpack_require__(2649), nodeUtil = __webpack_require__(2650); /* Node.js helper references. */ var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; /** * Checks if `value` is classified as a `RegExp` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. * @example * * _.isRegExp(/abc/); * // => true * * _.isRegExp('/abc/'); * // => false */ var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; module.exports = isRegExp; /***/ }), /***/ 2645: /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(340), isObjectLike = __webpack_require__(246); /** `Object#toString` result references. */ var regexpTag = '[object RegExp]'; /** * The base implementation of `_.isRegExp` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. */ function baseIsRegExp(value) { return isObjectLike(value) && baseGetTag(value) == regexpTag; } module.exports = baseIsRegExp; /***/ }), /***/ 2646: /***/ (function(module, exports, __webpack_require__) { var freeGlobal = __webpack_require__(1051); /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function('return this')(); module.exports = root; /***/ }), /***/ 2647: /***/ (function(module, exports, __webpack_require__) { var Symbol = __webpack_require__(341); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } module.exports = getRawTag; /***/ }), /***/ 2648: /***/ (function(module, exports) { /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString(value) { return nativeObjectToString.call(value); } module.exports = objectToString; /***/ }), /***/ 2649: /***/ (function(module, exports) { /** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */ function baseUnary(func) { return function(value) { return func(value); }; } module.exports = baseUnary; /***/ }), /***/ 2650: /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(1051); /** Detect free variable `exports`. */ var freeExports = true && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports && freeGlobal.process; /** Used to access faster Node.js helpers. */ var nodeUtil = (function() { try { // Use `util.types` for Node.js 10+. var types = freeModule && freeModule.require && freeModule.require('util').types; if (types) { return types; } // Legacy `process.binding('util')` for Node.js < 10. return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }()); module.exports = nodeUtil; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(276)(module))) /***/ }), /***/ 2651: /***/ (function(module, exports, __webpack_require__) { var toString = __webpack_require__(2652); /** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, reHasRegExpChar = RegExp(reRegExpChar.source); /** * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. * * @static * @memberOf _ * @since 3.0.0 * @category String * @param {string} [string=''] The string to escape. * @returns {string} Returns the escaped string. * @example * * _.escapeRegExp('[lodash](https://lodash.com/)'); * // => '\[lodash\]\(https://lodash\.com/\)' */ function escapeRegExp(string) { string = toString(string); return (string && reHasRegExpChar.test(string)) ? string.replace(reRegExpChar, '\\$&') : string; } module.exports = escapeRegExp; /***/ }), /***/ 2652: /***/ (function(module, exports, __webpack_require__) { var baseToString = __webpack_require__(2653); /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {string} Returns the converted string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString(value) { return value == null ? '' : baseToString(value); } module.exports = toString; /***/ }), /***/ 2653: /***/ (function(module, exports, __webpack_require__) { var Symbol = __webpack_require__(341), arrayMap = __webpack_require__(2654), isArray = __webpack_require__(610), isSymbol = __webpack_require__(2655); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. * * @private * @param {*} value The value to process. * @returns {string} Returns the string. */ function baseToString(value) { // Exit early for strings to avoid a performance hit in some environments. if (typeof value == 'string') { return value; } if (isArray(value)) { // Recursively convert values (susceptible to call stack limits). return arrayMap(value, baseToString) + ''; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } module.exports = baseToString; /***/ }), /***/ 2654: /***/ (function(module, exports) { /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } module.exports = arrayMap; /***/ }), /***/ 2655: /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(340), isObjectLike = __webpack_require__(246); /** `Object#toString` result references. */ var symbolTag = '[object Symbol]'; /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */ function isSymbol(value) { return typeof value == 'symbol' || (isObjectLike(value) && baseGetTag(value) == symbolTag); } module.exports = isSymbol; /***/ }), /***/ 2656: /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(340), isArray = __webpack_require__(610), isObjectLike = __webpack_require__(246); /** `Object#toString` result references. */ var stringTag = '[object String]'; /** * Checks if `value` is classified as a `String` primitive or object. * * @static * @since 0.1.0 * @memberOf _ * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a string, else `false`. * @example * * _.isString('abc'); * // => true * * _.isString(1); * // => false */ function isString(value) { return typeof value == 'string' || (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); } module.exports = isString; /***/ }), /***/ 2657: /***/ (function(module, exports, __webpack_require__) { var baseFlatten = __webpack_require__(2658); /** * Flattens `array` a single level deep. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to flatten. * @returns {Array} Returns the new flattened array. * @example * * _.flatten([1, [2, [3, [4]], 5]]); * // => [1, 2, [3, [4]], 5] */ function flatten(array) { var length = array == null ? 0 : array.length; return length ? baseFlatten(array, 1) : []; } module.exports = flatten; /***/ }), /***/ 2658: /***/ (function(module, exports, __webpack_require__) { var arrayPush = __webpack_require__(2659), isFlattenable = __webpack_require__(2660); /** * The base implementation of `_.flatten` with support for restricting flattening. * * @private * @param {Array} array The array to flatten. * @param {number} depth The maximum recursion depth. * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. * @param {Array} [result=[]] The initial result value. * @returns {Array} Returns the new flattened array. */ function baseFlatten(array, depth, predicate, isStrict, result) { var index = -1, length = array.length; predicate || (predicate = isFlattenable); result || (result = []); while (++index < length) { var value = array[index]; if (depth > 0 && predicate(value)) { if (depth > 1) { // Recursively flatten arrays (susceptible to call stack limits). baseFlatten(value, depth - 1, predicate, isStrict, result); } else { arrayPush(result, value); } } else if (!isStrict) { result[result.length] = value; } } return result; } module.exports = baseFlatten; /***/ }), /***/ 2659: /***/ (function(module, exports) { /** * Appends the elements of `values` to `array`. * * @private * @param {Array} array The array to modify. * @param {Array} values The values to append. * @returns {Array} Returns `array`. */ function arrayPush(array, values) { var index = -1, length = values.length, offset = array.length; while (++index < length) { array[offset + index] = values[index]; } return array; } module.exports = arrayPush; /***/ }), /***/ 2660: /***/ (function(module, exports, __webpack_require__) { var Symbol = __webpack_require__(341), isArguments = __webpack_require__(2661), isArray = __webpack_require__(610); /** Built-in value references. */ var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; /** * Checks if `value` is a flattenable `arguments` object or array. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. */ function isFlattenable(value) { return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); } module.exports = isFlattenable; /***/ }), /***/ 2661: /***/ (function(module, exports, __webpack_require__) { var baseIsArguments = __webpack_require__(2662), isObjectLike = __webpack_require__(246); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Built-in value references. */ var propertyIsEnumerable = objectProto.propertyIsEnumerable; /** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */ var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; module.exports = isArguments; /***/ }), /***/ 2662: /***/ (function(module, exports, __webpack_require__) { var baseGetTag = __webpack_require__(340), isObjectLike = __webpack_require__(246); /** `Object#toString` result references. */ var argsTag = '[object Arguments]'; /** * The base implementation of `_.isArguments`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, */ function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag; } module.exports = baseIsArguments; /***/ }), /***/ 2663: /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(11)(false); // imports // module exports.push([module.i, ".cloud-variable-badge_badge_1n_s5 {\r\n padding: 0.5rem;\r\n margin: 5px 0 8px 0;\r\n border: 1px solid #b9d6ff;\r\n background-color: #dbebff;\r\n display: flex;\r\n align-items: center;\r\n border-radius: 0.5rem;\r\n}\r\n[theme=\"dark\"] .cloud-variable-badge_badge_1n_s5 {\r\n border-color: #203652;\r\n background-color: #16202c;\r\n}\r\n.cloud-variable-badge_icon_3ph5l {\r\n margin-right: 0.25rem;\r\n}\r\n[theme=\"dark\"] .cloud-variable-badge_icon_3ph5l {\r\n filter: invert(100%);\r\n}\r\n.cloud-variable-badge_text_2zFOB {\r\n\r\n}\r\n", ""]); // exports exports.locals = { "badge": "cloud-variable-badge_badge_1n_s5", "icon": "cloud-variable-badge_icon_3ph5l", "text": "cloud-variable-badge_text_2zFOB" }; /***/ }), /***/ 2664: /***/ (function(module, exports, __webpack_require__) { exports = module.exports = __webpack_require__(11)(false); // imports // module exports.push([module.i, "/* Base styles used by Scratch https://github.com/LLK/scratch-www/blob/develop/src/main.scss */\r\nh1,\r\nh2,\r\nh3,\r\nh4,\r\nh5,\r\np {\r\n margin: 0;\r\n padding: 0;\r\n border: 0;\r\n}\r\nh1,\r\nh2,\r\nh3,\r\nh4,\r\nh5 {\r\n font-weight: bold;\r\n line-height: 1.7em;\r\n}\r\nh1 {\r\n font-weight: 2.5rem;\r\n}\r\nh2 {\r\n font-weight: 2rem;\r\n}\r\nh3 {\r\n font-size: 1.4rem;\r\n}\r\nh4 {\r\n font-size: 1rem;\r\n}\r\na {\r\n color: #25d;\r\n cursor: pointer;\r\n text-decoration: underline;\r\n}\r\n.interface_container_1cGgE {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n}\r\n.interface_editor_3WnQ8 {\r\n min-width: 1024px;\r\n min-height: 640px;\r\n height: 100%;\r\n}\r\n.interface_editor_3WnQ8 .interface_center_2vEJw {\r\n height: 100%;\r\n}\r\n.interface_player-only_1YGqr .interface_center_2vEJw {\r\n margin: auto;\r\n}\r\n.interface_menu_2TZCG {\r\n margin-bottom: 8px;\r\n}\r\n.interface_section_3f_bi {\r\n margin: 8px 0 8px 0;\r\n}\r\n.interface_footer_vF3nx {\r\n padding: 10px 0;\r\n margin-top: 10px;\r\n border-top: 2px solid #ddd;\r\n}\r\n.interface_footer_vF3nx a {\r\n font-weight: bold;\r\n text-decoration: none;\r\n}\r\n[theme=\"dark\"] .interface_footer_vF3nx {\r\n border-color: #1a1a1a;\r\n}\r\n.interface_footer-content_2-VDh {\r\n max-width: 600px;\r\n margin: auto;\r\n}\r\n.interface_footer-text_2qZPP {\r\n text-align: center;\r\n margin: 5px 0 10px 0;\r\n}\r\n.interface_footer-columns_22Cpb {\r\n display: flex;\r\n justify-content: center;\r\n justify-items: center;\r\n flex-wrap: wrap;\r\n}\r\n.interface_footer-section_vgGzW {\r\n display: flex;\r\n flex-direction: column;\r\n width: 200px;\r\n margin-bottom: 10px;\r\n}\r\n.interface_footer-section_vgGzW > * {\r\n margin-bottom: 10px;\r\n}\r\n[theme=\"dark\"] .interface_container_1cGgE {\r\n background-color: #111;\r\n}\r\n[theme=\"dark\"] .interface_player-only_1YGqr {\r\n color: #ddd;\r\n}\r\n[theme=\"dark\"] a {\r\n color: #4af;\r\n}\r\n.interface_unshared-update_zPoHa {\r\n line-height: 1.5em;\r\n padding: 0.5rem;\r\n margin: 5px 0 8px 0;\r\n border: 1px solid #b9d6ff;\r\n background-color: #dbebff;\r\n border-radius: 0.5rem;\r\n}\r\n[theme=\"dark\"] .interface_unshared-update_zPoHa {\r\n border-color: #203652;\r\n background-color: #16202c;\r\n}\r\n.interface_unshared-update_zPoHa p {\r\n margin: 4px 0;\r\n}\r\n.interface_unshared-update_zPoHa a {\r\n font-weight: bold;\r\n text-decoration: none;\r\n}\r\n.interface_gvbNote_1G2Fa {\r\n\tcolor:red;\r\n\tfont-size:30px;\r\n}", ""]); // exports exports.locals = { "container": "interface_container_1cGgE", "editor": "interface_editor_3WnQ8", "center": "interface_center_2vEJw", "player-only": "interface_player-only_1YGqr", "playerOnly": "interface_player-only_1YGqr", "menu": "interface_menu_2TZCG", "section": "interface_section_3f_bi", "footer": "interface_footer_vF3nx", "footer-content": "interface_footer-content_2-VDh", "footerContent": "interface_footer-content_2-VDh", "footer-text": "interface_footer-text_2qZPP", "footerText": "interface_footer-text_2qZPP", "footer-columns": "interface_footer-columns_22Cpb", "footerColumns": "interface_footer-columns_22Cpb", "footer-section": "interface_footer-section_vgGzW", "footerSection": "interface_footer-section_vgGzW", "unshared-update": "interface_unshared-update_zPoHa", "unsharedUpdate": "interface_unshared-update_zPoHa", "gvbNote": "interface_gvbNote_1G2Fa" }; /***/ }), /***/ 340: /***/ (function(module, exports, __webpack_require__) { var Symbol = __webpack_require__(341), getRawTag = __webpack_require__(2647), objectToString = __webpack_require__(2648); /** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; /** Built-in value references. */ var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return (symToStringTag && symToStringTag in Object(value)) ? getRawTag(value) : objectToString(value); } module.exports = baseGetTag; /***/ }), /***/ 341: /***/ (function(module, exports, __webpack_require__) { var root = __webpack_require__(2646); /** Built-in value references. */ var Symbol = root.Symbol; module.exports = Symbol; /***/ }), /***/ 405: /***/ (function(module, exports, __webpack_require__) { /* eslint-disable vars-on-top, no-var, prefer-template */ var isRegExp = __webpack_require__(2644); var escapeRegExp = __webpack_require__(2651); var isString = __webpack_require__(2656); var flatten = __webpack_require__(2657); /** * Given a string, replace every substring that is matched by the `match` regex * with the result of calling `fn` on matched substring. The result will be an * array with all odd indexed elements containing the replacements. The primary * use case is similar to using String.prototype.replace except for React. * * React will happily render an array as children of a react element, which * makes this approach very useful for tasks like surrounding certain text * within a string with react elements. * * Example: * matchReplace( * 'Emphasize all phone numbers like 884-555-4443.', * /([\d|-]+)/g, * (number, i) => {number} * ); * // => ['Emphasize all phone numbers like ', 884-555-4443, '.' * * @param {string} str * @param {regexp|str} match Must contain a matching group * @param {function} fn * @return {array} */ function replaceString(str, match, fn) { var curCharStart = 0; var curCharLen = 0; if (str === '') { return str; } else if (!str || !isString(str)) { throw new TypeError('First argument to react-string-replace#replaceString must be a string'); } var re = match; if (!isRegExp(re)) { re = new RegExp('(' + escapeRegExp(re) + ')', 'gi'); } var result = str.split(re); // Apply fn to all odd elements for (var i = 1, length = result.length; i < length; i += 2) { curCharLen = result[i].length; curCharStart += result[i - 1].length; result[i] = fn(result[i], i, curCharStart); curCharStart += curCharLen; } return result; } module.exports = function reactStringReplace(source, match, fn) { if (!Array.isArray(source)) source = [source]; return flatten(source.map(function(x) { return isString(x) ? replaceString(x, match, fn) : x; })); }; /***/ }), /***/ 406: /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(2663); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(12)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ 610: /***/ (function(module, exports) { /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray = Array.isArray; module.exports = isArray; /***/ }), /***/ 642: /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(2640); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(12)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ 85: /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(2641); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(12)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ 88: /***/ (function(module, exports, __webpack_require__) { var content = __webpack_require__(2664); if(typeof content === 'string') content = [[module.i, content, '']]; var transform; var insertInto; var options = {"hmr":true} options.transform = transform options.insertInto = undefined; var update = __webpack_require__(12)(content, options); if(content.locals) module.exports = content.locals; if(false) {} /***/ }), /***/ 93: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); let changeChannel; let reloadChannel; if (typeof BroadcastChannel !== 'undefined') { changeChannel = new BroadcastChannel('addons-change'); reloadChannel = new BroadcastChannel('addons-reload'); } /* harmony default export */ __webpack_exports__["default"] = ({ changeChannel, reloadChannel }); /***/ }) }]);