Bug 1453637 - Update Debugger Frontend v36. r=jdescottes

This commit is contained in:
Jason Laster 2018-04-12 09:32:58 -04:00
Родитель fa5af6622b
Коммит 98c1465ea3
63 изменённых файлов: 110759 добавлений и 309 удалений

Просмотреть файл

@ -1,9 +1,9 @@
This is the debugger.html project output.
See https://github.com/devtools-html/debugger.html
Version 35.0
Version 36.0
Comparison: https://github.com/devtools-html/debugger.html/compare/release-34...release-35
Comparison: https://github.com/devtools-html/debugger.html/compare/release-35...release-36
Packages:
- babel-plugin-transform-es2015-modules-commonjs @6.26.0

Просмотреть файл

@ -578,14 +578,16 @@ menuseparator {
.folder,
.domain,
.source-icon,
.file {
.file,
.extension {
background-color: var(--theme-comment);
}
.worker,
.file,
.folder,
.source-icon {
.source-icon,
.extension {
position: relative;
top: 2px;
}
@ -612,6 +614,12 @@ img.source-icon {
height: 15px;
}
img.extension {
width: 13px;
height: 13px;
margin-inline-start: 2px;
}
img.result-item-icon {
height: 18px;
width: 18px;
@ -645,6 +653,10 @@ img.typescript {
mask: url("chrome://devtools/skin/images/debugger/typescript.svg") no-repeat;
}
img.extension {
mask: url("chrome://devtools/skin/images/debugger/extension.svg") no-repeat;
}
img.file {
mask: url("chrome://devtools/skin/images/debugger/file.svg") no-repeat;
width: 13px;
@ -654,7 +666,8 @@ img.file {
img.domain,
img.folder,
img.file,
img.source-icon {
img.source-icon,
img.extension {
mask-size: 100%;
margin-inline-end: 5px;
display: inline-block;
@ -2981,7 +2994,6 @@ html[dir="rtl"] .breakpoints-list .breakpoint .breakpoint-line {
}
.input-expression::placeholder {
text-align: center;
font-style: italic;
color: var(--theme-comment);
}
@ -2998,6 +3010,7 @@ html[dir="rtl"] .breakpoints-list .breakpoint .breakpoint-line {
}
.expression-input-container {
display: flex;
border: 1px solid var(--theme-highlight-blue);
}
.expression-container {
@ -3427,7 +3440,8 @@ img.reverseStepIn,
img.reverseStepOut,
img.replay-previous,
img.replay-next,
img.resume {
img.resume,
img.shortcuts {
background-color: var(--theme-body-color);
}
@ -3504,6 +3518,10 @@ img.resume {
margin-top: 5px;
}
.command-bar img.shortcuts {
mask: url("chrome://devtools/skin/images/help.svg") no-repeat;
}
.command-bar .replay-inactive {
opacity: 0.5;
}
@ -3933,6 +3951,7 @@ html .welcomebox .toggle-button-end.collapsed {
margin-inline-start: 3px;
margin-top: 3px;
cursor: default;
height: 27px;
}
.source-tab:first-child {

Просмотреть файл

@ -3640,7 +3640,7 @@ function update(state = initialSourcesState(), action) {
case "BLACKBOX":
if (action.status === "done") {
const url = action.source.url;
const isBlackBoxed = action.value.isBlackBoxed;
const { isBlackBoxed } = action.value;
updateBlackBoxList(url, isBlackBoxed);
return state.setIn(["sources", action.source.id, "isBlackBoxed"], isBlackBoxed);
}
@ -6035,13 +6035,11 @@ function enableBreakpoint(location) {
return;
}
const action = {
return dispatch({
type: "ENABLE_BREAKPOINT",
breakpoint,
[_promise.PROMISE]: (0, _addBreakpoint2.default)(getState, client, sourceMaps, breakpoint)
};
return dispatch(action);
});
};
}
@ -6062,12 +6060,10 @@ function disableBreakpoint(location) {
await client.removeBreakpoint(bp.generatedLocation);
const newBreakpoint = _extends({}, bp, { disabled: true });
const action = {
return dispatch({
type: "DISABLE_BREAKPOINT",
breakpoint: newBreakpoint
};
return dispatch(action);
});
};
}
@ -6386,7 +6382,7 @@ function clearExpressionError() {
function updateExpression(input, expression) {
return async ({ dispatch, getState }) => {
if (!input || input == expression.input) {
if (!input) {
return;
}
@ -9743,6 +9739,7 @@ exports.resizeToggleButton = resizeToggleButton;
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
/* Checks to see if the root element is available and
* if the element is visible. We check the width of the element
* because it is more reliable than either checking a focus state or
@ -12699,6 +12696,11 @@ async function fetchSources() {
*/
async function checkServerSupportsListWorkers() {
const root = await tabTarget.root;
// root is not available on all debug targets.
if (!root) {
return false;
}
const deviceFront = await (0, _frontsDevice.getDeviceFront)(debuggerClient, root);
const description = await deviceFront.getDescription();
@ -15203,9 +15205,11 @@ const svg = {
coffeescript: __webpack_require__(2250),
dojo: __webpack_require__(806),
domain: __webpack_require__(353),
extension: __webpack_require__(3632),
file: __webpack_require__(354),
folder: __webpack_require__(355),
globe: __webpack_require__(356),
help: __webpack_require__(3633),
home: __webpack_require__(3604),
javascript: __webpack_require__(2251),
jquery: __webpack_require__(999),
@ -16917,7 +16921,8 @@ class SourcesTree extends _react.Component {
renderItemName(name) {
const hosts = {
"ng://": "Angular",
"webpack://": "Webpack"
"webpack://": "Webpack",
"moz-extension://": L10N.getStr("extensionsText")
};
return hosts[name] || name;
@ -17065,9 +17070,10 @@ var _initialiseProps = function () {
if (item.path === "webpack://") {
return _react2.default.createElement(_Svg2.default, { name: "webpack" });
}
if (item.path === "/Angular") {
} else if (item.path === "ng://") {
return _react2.default.createElement(_Svg2.default, { name: "angular" });
} else if (item.path === "moz-extension://") {
return _react2.default.createElement("img", { className: "extension" });
}
if (depth === 0 && projectRoot === "") {
@ -22810,6 +22816,18 @@ function debugBtn(onClick, type, className, tooltip) {
}
class SecondaryPanes extends _react.Component {
constructor(props) {
super(props);
this.onExpressionAdded = () => {
this.setState({ showExpressionsInput: false });
};
this.state = {
showExpressionsInput: false
};
}
renderBreakpointsToggle() {
const {
toggleAllBreakpoints,
@ -22850,7 +22868,10 @@ class SecondaryPanes extends _react.Component {
return [debugBtn(evt => {
evt.stopPropagation();
this.props.evaluateExpressions();
}, "refresh", "refresh", L10N.getStr("watchExpressions.refreshButton"))];
}, "refresh", "refresh", L10N.getStr("watchExpressions.refreshButton")), debugBtn(evt => {
evt.stopPropagation();
this.setState({ showExpressionsInput: true });
}, "plus", "plus", L10N.getStr("expressions.placeholder"))];
}
getScopeItem() {
@ -22884,7 +22905,10 @@ class SecondaryPanes extends _react.Component {
header: L10N.getStr("watchExpressions.header"),
className: "watch-expressions-pane",
buttons: this.watchExpressionHeaderButtons(),
component: _react2.default.createElement(_Expressions2.default, null),
component: _react2.default.createElement(_Expressions2.default, {
showInput: this.state.showExpressionsInput,
onExpressionAdded: this.onExpressionAdded
}),
opened: _prefs.prefs.expressionsVisible,
onToggle: opened => {
_prefs.prefs.expressionsVisible = opened;
@ -23101,9 +23125,9 @@ var _reselect = __webpack_require__(993);
var _lodash = __webpack_require__(2);
var _BreakpointItem = __webpack_require__(3630);
var _Breakpoint = __webpack_require__(3634);
var _BreakpointItem2 = _interopRequireDefault(_BreakpointItem);
var _Breakpoint2 = _interopRequireDefault(_Breakpoint);
var _actions = __webpack_require__(1354);
@ -23169,7 +23193,7 @@ class Breakpoints extends _react.Component {
}
renderBreakpoint(breakpoint) {
return _react2.default.createElement(_BreakpointItem2.default, {
return _react2.default.createElement(_Breakpoint2.default, {
key: breakpoint.locationId,
breakpoint: breakpoint,
onClick: () => this.selectBreakpoint(breakpoint),
@ -23293,11 +23317,16 @@ class Expressions extends _react.Component {
}
};
this.hideInput = () => {
this.props.onExpressionAdded();
};
this.handleExistingSubmit = async (e, expression) => {
e.preventDefault();
e.stopPropagation();
this.props.updateExpression(this.state.inputValue, expression);
this.hideInput();
};
this.handleNewSubmit = async e => {
@ -23312,6 +23341,10 @@ class Expressions extends _react.Component {
editIndex: -1,
inputValue: this.props.expressionError ? inputValue : ""
});
if (!this.props.expressionError) {
this.hideInput();
}
};
this.renderExpression = (expression, index) => {
@ -23364,7 +23397,11 @@ class Expressions extends _react.Component {
);
};
this.state = { editing: false, editIndex: -1, inputValue: "" };
this.state = {
editing: false,
editIndex: -1,
inputValue: ""
};
}
componentDidMount() {
@ -23382,8 +23419,9 @@ class Expressions extends _react.Component {
shouldComponentUpdate(nextProps, nextState) {
const { editing, inputValue } = this.state;
const { expressions, expressionError } = this.props;
return expressions !== nextProps.expressions || expressionError !== nextProps.expressionError || editing !== nextState.editing || inputValue !== nextState.inputValue;
const { expressions, expressionError, showInput } = this.props;
return expressions !== nextProps.expressions || expressionError !== nextProps.expressionError || editing !== nextState.editing || inputValue !== nextState.inputValue || nextProps.showInput !== showInput;
}
componentDidUpdate(prevProps, prevState) {
@ -23408,6 +23446,11 @@ class Expressions extends _react.Component {
deleteExpression(expression);
}
onBlur() {
this.clear();
this.hideInput();
}
renderNewExpressionInput() {
const { expressionError } = this.props;
const { editing, inputValue } = this.state;
@ -23424,8 +23467,9 @@ class Expressions extends _react.Component {
type: "text",
placeholder: placeholder,
onChange: this.handleChange,
onBlur: this.clear,
onBlur: this.hideInput,
onKeyDown: this.handleKeyDown,
autoFocus: "true",
value: !editing ? inputValue : ""
}),
_react2.default.createElement("input", { type: "submit", style: { display: "none" } })
@ -23461,12 +23505,13 @@ class Expressions extends _react.Component {
}
render() {
const { expressions } = this.props;
const { expressions, showInput } = this.props;
return _react2.default.createElement(
"ul",
{ className: "pane expressions-list" },
expressions.map(this.renderExpression),
this.renderNewExpressionInput()
showInput && this.renderNewExpressionInput()
);
}
}
@ -24001,7 +24046,9 @@ class EventListeners extends _react.Component {
removeBreakpoint(event, breakpoint) {
event.stopPropagation();
this.props.removeBreakpoint(breakpoint.location);
if (breakpoint) {
this.props.removeBreakpoint(breakpoint.location);
}
}
render() {
@ -24200,6 +24247,7 @@ exports.default = Accordion;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.debugBtn = debugBtn;
var _propTypes = __webpack_require__(20);
@ -24526,10 +24574,6 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
var _react = __webpack_require__(0);
var _react2 = _interopRequireDefault(_react);
@ -24538,29 +24582,19 @@ var _classnames = __webpack_require__(175);
var _classnames2 = _interopRequireDefault(_classnames);
var _CommandBar = __webpack_require__(1608);
__webpack_require__(1295);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function debugBtn(onClick, type, className, tooltip, disabled = false) {
const props = {
onClick,
key: type,
"aria-label": tooltip,
title: tooltip,
disabled
};
return _react2.default.createElement(
"button",
_extends({ className: (0, _classnames2.default)(type, className) }, props),
"?"
);
}
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
class UtilsBar extends _react.Component {
renderUtilButtons() {
return [debugBtn(this.props.toggleShortcutsModal, "shortcut", "active", L10N.getStr("shortcuts.buttonName"), false)];
return [(0, _CommandBar.debugBtn)(this.props.toggleShortcutsModal, "shortcuts", "active", L10N.getStr("shortcuts.buttonName"), false)];
}
render() {
@ -25923,6 +25957,8 @@ var _locColumn = __webpack_require__(2349);
var _findGeneratedBindingFromPosition = __webpack_require__(2358);
var _firefox = __webpack_require__(1500);
var _prefs = __webpack_require__(226);
var _log = __webpack_require__(2359);
@ -26164,11 +26200,13 @@ function buildGeneratedBindingList(scopes, generatedAstScopes, thisBinding) {
// the normal binding data we are working with.
const frameThisOwner = generatedAstScopes.find(generated => "this" in generated.bindings);
let globalScope = null;
const clientScopes = [];
for (let s = scopes; s; s = s.parent) {
const bindings = s.bindings ? Object.assign({}, ...s.bindings.arguments, s.bindings.variables) : {};
clientScopes.push(bindings);
globalScope = s;
}
const generatedMainScopes = generatedAstScopes.slice(0, -2);
@ -26194,7 +26232,7 @@ function buildGeneratedBindingList(scopes, generatedAstScopes, thisBinding) {
acc.push({
name,
loc,
desc: bindings[name] || null
desc: () => Promise.resolve(bindings[name] || null)
});
}
}
@ -26208,15 +26246,29 @@ function buildGeneratedBindingList(scopes, generatedAstScopes, thisBinding) {
for (const generated of generatedGlobalScopes) {
for (const name of Object.keys(generated.bindings)) {
const { refs } = generated.bindings[name];
for (const loc of refs) {
const bindings = clientGlobalScopes.find(b => (0, _lodash.has)(b, name));
const bindings = clientGlobalScopes.find(b => (0, _lodash.has)(b, name));
for (const loc of refs) {
if (bindings) {
generatedBindings.push({
name,
loc,
desc: bindings[name]
desc: () => Promise.resolve(bindings[name])
});
} else {
const globalGrip = globalScope && globalScope.object;
if (globalGrip) {
// Should always exist, just checking to keep Flow happy.
generatedBindings.push({
name,
loc,
desc: async () => {
const objectClient = (0, _firefox.createObjectClient)(globalGrip);
return (await objectClient.getProperty(name)).descriptor;
}
});
}
}
}
}
@ -31367,7 +31419,9 @@ function createPrettySource(sourceId) {
const prettySource = {
url,
id,
isBlackBoxed: false,
isPrettyPrinted: true,
isWasm: false,
contentType: "text/javascript",
loadedState: "loading"
};
@ -31906,8 +31960,7 @@ function selectSourceURL(url, options = {}) {
dispatch({
type: "SELECT_SOURCE_URL",
url: url,
tabIndex: options.tabIndex,
location: options.location
line: options.location ? options.location.line : null
});
}
};
@ -34910,7 +34963,7 @@ async function mapBindingReferenceToDescriptor(binding, mapped) {
if (mapped.start.line === binding.loc.start.line && (0, _locColumn.locColumn)(mapped.start) >= (0, _locColumn.locColumn)(binding.loc.start) - 1 && (0, _locColumn.locColumn)(mapped.start) <= (0, _locColumn.locColumn)(binding.loc.end)) {
return {
name: binding.name,
desc: binding.desc,
desc: await binding.desc(),
expression: binding.name
};
}
@ -34932,7 +34985,7 @@ async function mapImportDeclarationToDescriptor(binding, mapped) {
return null;
}
const desc = await readDescriptorProperty(binding.desc, mapped.importName,
const desc = await readDescriptorProperty((await binding.desc()), mapped.importName,
// If the value was optimized out or otherwise unavailable, we skip it
// entirely because there is a good chance that this means that this
// isn't the right binding. This allows us to catch cases like
@ -34994,7 +35047,7 @@ async function mapImportReferenceToDescriptor(binding, mapped) {
}
let expression = binding.name;
let desc = binding.desc;
let desc = await binding.desc();
if (binding.loc.type === "ref") {
const { meta } = binding.loc;
@ -35062,12 +35115,31 @@ async function readDescriptorProperty(desc, property, requireValidObject = false
}
function mappingContains(mapped, item) {
return (item.start.line > mapped.start.line || item.start.line === mapped.start.line && (0, _locColumn.locColumn)(item.start) >= (0, _locColumn.locColumn)(mapped.start)) && (item.end.line < mapped.end.line || item.end.line === mapped.end.line && (0, _locColumn.locColumn)(item.end) <= (0, _locColumn.locColumn)(mapped.end));
return positionCmp(item.start, mapped.start) >= 0 && positionCmp(item.end, mapped.end) <= 0;
}
/**
* * === 0 - Positions are equal.
* * < 0 - first position before second position
* * > 0 - first position after second position
*/
function positionCmp(p1, p2) {
if (p1.line === p2.line) {
const l1 = (0, _locColumn.locColumn)(p1);
const l2 = (0, _locColumn.locColumn)(p2);
if (l1 === l2) {
return 0;
}
return l1 < l2 ? -1 : 1;
}
return p1.line < p2.line ? -1 : 1;
}
async function getGeneratedLocationRange(pos, source, sourceMaps) {
const start = await sourceMaps.getGeneratedLocation(pos.start, source);
const end = await sourceMaps.getGeneratedLocation(pos.end, source);
const start = await getGeneratedLocation(sourceMaps, pos.start, source);
const end = await getGeneratedLocation(sourceMaps, pos.end, source);
// Since the map takes the closest location, sometimes mapping a
// binding's location can point at the start of a binding listed after
@ -35080,6 +35152,21 @@ async function getGeneratedLocationRange(pos, source, sourceMaps) {
return { start, end };
}
async function getGeneratedLocation(sourceMaps, pos, source) {
const all = await sourceMaps.getAllGeneratedLocations(pos, source);
if (all.length > 0) {
// Grab the earliest mapping since generally if there are multiple
// mappings, the later mappings are for random punctuation marks.
return all.reduce((acc, p) => {
return !acc || positionCmp(p, acc) < 0 ? p : acc;
});
}
// Fall back to the standard logic to take the mapping closest to the
// target location.
return await sourceMaps.getGeneratedLocation(pos, source);
}
/***/ }),
/***/ 2359:
@ -39125,7 +39212,28 @@ module.exports = "<!-- This Source Code Form is subject to the terms of the Mozi
/***/ }),
/***/ 3630:
/***/ 3631:
/***/ (function(module, exports) {
module.exports = "<!-- This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 28 28\"><path fill=\"context-fill\" d=\"M15 11h-1V5a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v6H1a1 1 0 0 0 0 2h14a1 1 0 1 0 0-2z\"></path></svg>"
/***/ }),
/***/ 3632:
/***/ (function(module, exports) {
module.exports = "<!-- This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path fill=\"context-fill\" d=\"M14.5 8c-.971 0-1 1-1.75 1a.765.765 0 0 1-.75-.75V5a1 1 0 0 0-1-1H7.75A.765.765 0 0 1 7 3.25c0-.75 1-.779 1-1.75C8 .635 7.1 0 6 0S4 .635 4 1.5c0 .971 1 1 1 1.75a.765.765 0 0 1-.75.75H1a1 1 0 0 0-1 1v2.25A.765.765 0 0 0 .75 8c.75 0 .779-1 1.75-1C3.365 7 4 7.9 4 9s-.635 2-1.5 2c-.971 0-1-1-1.75-1a.765.765 0 0 0-.75.75V15a1 1 0 0 0 1 1h3.25a.765.765 0 0 0 .75-.75c0-.75-1-.779-1-1.75 0-.865.9-1.5 2-1.5s2 .635 2 1.5c0 .971-1 1-1 1.75a.765.765 0 0 0 .75.75H11a1 1 0 0 0 1-1v-3.25a.765.765 0 0 1 .75-.75c.75 0 .779 1 1.75 1 .865 0 1.5-.9 1.5-2s-.635-2-1.5-2z\"></path></svg>"
/***/ }),
/***/ 3633:
/***/ (function(module, exports) {
module.exports = "<!-- This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path fill=\"context-fill\" d=\"M8 1a7 7 0 1 0 7 7 7.008 7.008 0 0 0-7-7zm0 13a6 6 0 1 1 6-6 6.007 6.007 0 0 1-6 6zM8 3.125A2.7 2.7 0 0 0 5.125 6a.875.875 0 0 0 1.75 0c0-1 .6-1.125 1.125-1.125a1.105 1.105 0 0 1 1.13.744.894.894 0 0 1-.53 1.016A2.738 2.738 0 0 0 7.125 9v.337a.875.875 0 0 0 1.75 0v-.37a1.041 1.041 0 0 1 .609-.824A2.637 2.637 0 0 0 10.82 5.16 2.838 2.838 0 0 0 8 3.125zm0 7.625A1.25 1.25 0 1 0 9.25 12 1.25 1.25 0 0 0 8 10.75z\"></path></svg>"
/***/ }),
/***/ 3634:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
@ -39169,11 +39277,12 @@ function getBreakpointLocation(source, line, column) {
return bpLocation;
}
class BreakpointItem extends _react.Component {
class Breakpoint extends _react.Component {
componentDidMount() {
this.setupEditor();
}
componentDidUpdate() {
this.setupEditor();
}
@ -39191,13 +39300,17 @@ class BreakpointItem extends _react.Component {
return !prevBreakpoint || prevBreakpoint.text != nextBreakpoint.text || prevBreakpoint.disabled != nextBreakpoint.disabled || prevBreakpoint.condition != nextBreakpoint.condition || prevBreakpoint.hidden != nextBreakpoint.hidden || prevBreakpoint.isCurrentlyPaused != nextBreakpoint.isCurrentlyPaused;
}
setupEditor() {
getBreakpointText() {
const { breakpoint } = this.props;
return breakpoint.condition || breakpoint.text;
}
setupEditor() {
if (this.editor) {
return;
}
this.editor = (0, _breakpoint.createEditor)(breakpoint.text);
this.editor = (0, _breakpoint.createEditor)(this.getBreakpointText());
// disables the default search shortcuts
// $FlowIgnore
@ -39215,18 +39328,52 @@ class BreakpointItem extends _react.Component {
}
}
renderCheckbox() {
const { onChange, breakpoint } = this.props;
const { disabled } = breakpoint;
return _react2.default.createElement("input", {
type: "checkbox",
className: "breakpoint-checkbox",
checked: !disabled,
onChange: onChange,
onClick: ev => ev.stopPropagation()
});
}
renderText() {
const text = this.getBreakpointText();
return _react2.default.createElement(
"label",
{ className: "breakpoint-label", title: text },
text
);
}
renderLineClose() {
const { breakpoint, onCloseClick } = this.props;
const { line, column } = breakpoint.location;
return _react2.default.createElement(
"div",
{ className: "breakpoint-line-close" },
_react2.default.createElement(
"div",
{ className: "breakpoint-line" },
getBreakpointLocation(breakpoint.source, line, column)
),
_react2.default.createElement(_Close2.default, {
handleClick: onCloseClick,
tooltip: L10N.getStr("breakpoints.removeBreakpointTooltip")
})
);
}
render() {
const {
breakpoint,
onClick,
onChange,
onContextMenu,
onCloseClick
} = this.props;
const { breakpoint, onClick, onContextMenu } = this.props;
const locationId = breakpoint.locationId;
const line = breakpoint.location.line;
const column = breakpoint.location.column;
const isCurrentlyPaused = breakpoint.isCurrentlyPaused;
const isDisabled = breakpoint.disabled;
const isConditional = !!breakpoint.condition;
@ -39244,43 +39391,14 @@ class BreakpointItem extends _react.Component {
onClick: onClick,
onContextMenu: onContextMenu
},
_react2.default.createElement("input", {
type: "checkbox",
className: "breakpoint-checkbox",
checked: !isDisabled,
onChange: onChange,
onClick: ev => ev.stopPropagation()
}),
_react2.default.createElement(
"label",
{ className: "breakpoint-label", title: breakpoint.text },
breakpoint.text
),
_react2.default.createElement(
"div",
{ className: "breakpoint-line-close" },
_react2.default.createElement(
"div",
{ className: "breakpoint-line" },
getBreakpointLocation(breakpoint.source, line, column)
),
_react2.default.createElement(_Close2.default, {
handleClick: onCloseClick,
tooltip: L10N.getStr("breakpoints.removeBreakpointTooltip")
})
)
this.renderCheckbox(),
this.renderText(),
this.renderLineClose()
);
}
}
exports.default = BreakpointItem;
/***/ }),
/***/ 3631:
/***/ (function(module, exports) {
module.exports = "<!-- This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 28 28\"><path fill=\"context-fill\" d=\"M15 11h-1V5a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v6H1a1 1 0 0 0 0 2h14a1 1 0 1 0 0-2z\"></path></svg>"
exports.default = Breakpoint;
/***/ }),

Просмотреть файл

@ -55,6 +55,13 @@ support-files =
examples/babel/fixtures/webpack-modules-es6/output.js.map
examples/babel/fixtures/webpack-standalone/output.js
examples/babel/fixtures/webpack-standalone/output.js.map
examples/ember/quickstart/dist/index.html
examples/ember/quickstart/dist/assets/quickstart.css
examples/ember/quickstart/dist/assets/quickstart.js
examples/ember/quickstart/dist/assets/quickstart.map
examples/ember/quickstart/dist/assets/vendor.css
examples/ember/quickstart/dist/assets/vendor.js
examples/ember/quickstart/dist/assets/vendor.map
examples/sourcemaps/bundle.js
examples/sourcemaps/bundle.js.map
examples/sourcemaps2/main.min.js
@ -160,6 +167,7 @@ skip-if = (os == "win" && ccov) # Bug 1424154
[browser_dbg-editor-gutter.js]
[browser_dbg-editor-select.js]
[browser_dbg-editor-highlight.js]
[browser_dbg-ember-quickstart.js]
[browser_dbg-expressions.js]
[browser_dbg-expressions-error.js]
[browser_dbg-iframes.js]

Просмотреть файл

@ -1,49 +1,11 @@
async function evalInConsoleAtPoint(dbg, fixture, { line, column }, statements) {
const { selectors: { getBreakpoint, getBreakpoints }, getState } = dbg;
const filename = `fixtures/${fixture}/input.js`;
await waitForSources(dbg, filename);
ok(true, "Original sources exist");
const source = findSource(dbg, filename);
await selectSource(dbg, source);
// Test that breakpoint is not off by a line.
await addBreakpoint(dbg, source, line);
is(getBreakpoints(getState()).size, 1, "One breakpoint exists");
ok(
getBreakpoint(getState(), { sourceId: source.id, line, column }),
"Breakpoint has correct line"
);
const fnName = fixture.replace(/-([a-z])/g, (s, c) => c.toUpperCase());
const invokeResult = invokeInTab(fnName);
let invokeFailed = await Promise.race([
waitForPaused(dbg),
invokeResult.then(() => new Promise(() => {}), () => true)
]);
if (invokeFailed) {
return invokeResult;
}
assertPausedLocation(dbg);
await assertConsoleEval(dbg, statements);
await removeBreakpoint(dbg, source.id, line, column);
is(getBreakpoints(getState()).size, 0, "Breakpoint reverted");
await resume(dbg);
// If the invoke errored later somehow, capture here so the error is reported nicely.
await invokeResult;
await invokeWithBreakpoint(dbg, fnName, filename, { line, column }, async () => {
await assertConsoleEval(dbg, statements);
});
ok(true, `Ran tests for ${fixture} at line ${line} column ${column}`);
}

Просмотреть файл

@ -31,50 +31,12 @@ async function assertPreviews(dbg, previews) {
}
async function breakpointPreviews(dbg, fixture, { line, column }, previews) {
const { selectors: { getBreakpoint, getBreakpoints }, getState } = dbg;
const filename = `fixtures/${fixture}/input.js`;
await waitForSources(dbg, filename);
ok(true, "Original sources exist");
const source = findSource(dbg, filename);
await selectSource(dbg, source);
// Test that breakpoint is not off by a line.
await addBreakpoint(dbg, source, line);
is(getBreakpoints(getState()).size, 1, "One breakpoint exists");
ok(
getBreakpoint(getState(), { sourceId: source.id, line, column }),
"Breakpoint has correct line"
);
const fnName = fixture.replace(/-([a-z])/g, (s, c) => c.toUpperCase());
const invokeResult = invokeInTab(fnName);
let invokeFailed = await Promise.race([
waitForPaused(dbg),
invokeResult.then(() => new Promise(() => {}), () => true)
]);
if (invokeFailed) {
return invokeResult;
}
assertPausedLocation(dbg);
await assertPreviews(dbg, previews);
await removeBreakpoint(dbg, source.id, line, column);
is(getBreakpoints(getState()).size, 0, "Breakpoint reverted");
await resume(dbg);
// If the invoke errored later somehow, capture here so the error is reported nicely.
await invokeResult;
await invokeWithBreakpoint(dbg, fnName, filename, { line, column }, async () => {
await assertPreviews(dbg, previews);
});
ok(true, `Ran tests for ${fixture} at line ${line} column ${column}`);
}

Просмотреть файл

@ -7,87 +7,16 @@ requestLongerTimeout(6);
// Tests loading sourcemapped sources for Babel's compile output.
async function breakpointScopes(dbg, fixture, { line, column }, scopes) {
const { selectors: { getBreakpoint, getBreakpoints }, getState } = dbg;
const filename = `fixtures/${fixture}/input.js`;
await waitForSources(dbg, filename);
ok(true, "Original sources exist");
const source = findSource(dbg, filename);
await selectSource(dbg, source);
// Test that breakpoint is not off by a line.
await addBreakpoint(dbg, source, line);
is(getBreakpoints(getState()).size, 1, "One breakpoint exists");
ok(
getBreakpoint(getState(), { sourceId: source.id, line, column }),
"Breakpoint has correct line"
);
const fnName = fixture.replace(/-([a-z])/g, (s, c) => c.toUpperCase());
const invokeResult = invokeInTab(fnName);
let invokeFailed = await Promise.race([
waitForPaused(dbg),
invokeResult.then(() => new Promise(() => {}), () => true)
]);
if (invokeFailed) {
return invokeResult;
}
assertPausedLocation(dbg);
await assertScopes(dbg, scopes);
await removeBreakpoint(dbg, source.id, line, column);
is(getBreakpoints(getState()).size, 0, "Breakpoint reverted");
await resume(dbg);
// If the invoke errored later somehow, capture here so the error is reported nicely.
await invokeResult;
await invokeWithBreakpoint(dbg, fnName, filename, { line, column }, async () => {
await assertScopes(dbg, scopes);
});
ok(true, `Ran tests for ${fixture} at line ${line} column ${column}`);
}
async function expandAllScopes(dbg) {
const scopes = await waitForElement(dbg, "scopes");
const scopeElements = scopes.querySelectorAll(
`.tree-node[aria-level="1"][data-expandable="true"]:not([aria-expanded="true"])`
);
const indices = Array.from(scopeElements, el => {
return Array.prototype.indexOf.call(el.parentNode.childNodes, el);
}).reverse();
for (const index of indices) {
await toggleScopeNode(dbg, index + 1);
}
}
async function assertScopes(dbg, items) {
await expandAllScopes(dbg);
for (const [i, val] of items.entries()) {
if (Array.isArray(val)) {
is(getScopeLabel(dbg, i + 1), val[0]);
is(
getScopeValue(dbg, i + 1),
val[1],
`"${val[0]}" has the expected "${val[1]}" value`
);
} else {
is(getScopeLabel(dbg, i + 1), val);
}
}
is(getScopeLabel(dbg, items.length + 1), "Window");
}
add_task(async function() {
await pushPref("devtools.debugger.features.map-scopes", true);

Просмотреть файл

@ -5,52 +5,12 @@
requestLongerTimeout(4);
async function breakpointSteps(dbg, fixture, { line, column }, steps) {
const { selectors: { getBreakpoint, getBreakpoints }, getState } = dbg;
const filename = `fixtures/${fixture}/input.js`;
await waitForSources(dbg, filename);
ok(true, "Original sources exist");
const source = findSource(dbg, filename);
await selectSource(dbg, source);
// Test that breakpoint is not off by a line.
await addBreakpoint(dbg, source, line);
is(getBreakpoints(getState()).size, 1, "One breakpoint exists");
ok(
getBreakpoint(getState(), { sourceId: source.id, line, column }),
"Breakpoint has correct line"
);
const fnName = fixture.replace(/-([a-z])/g, (s, c) => c.toUpperCase());
const invokeResult = invokeInTab(fnName);
let invokeFailed = await Promise.race([
waitForPaused(dbg),
invokeResult.then(() => new Promise(() => {}), () => true)
]);
if (invokeFailed) {
return invokeResult;
}
assertPausedLocation(dbg);
await removeBreakpoint(dbg, source.id, line, column);
is(getBreakpoints(getState()).size, 0, "Breakpoint reverted");
await runSteps(dbg, source, steps);
await resume(dbg);
// If the invoke errored later somehow, capture here so the error is
// reported nicely.
await invokeResult;
await invokeWithBreakpoint(dbg, fnName, filename, { line, column }, async source => {
await runSteps(dbg, source, steps);
});
ok(true, `Ran tests for ${fixture} at line ${line} column ${column}`);
}

Просмотреть файл

@ -0,0 +1,15 @@
add_task(async function() {
await pushPref("devtools.debugger.features.map-scopes", true);
const dbg = await initDebugger("ember/quickstart/dist/");
await invokeWithBreakpoint(dbg, "mapTestFunction", "quickstart/router.js", { line: 13, column: 2 }, async () => {
await assertScopes(dbg, [
"Module",
["config", "{\u2026}"],
"EmberRouter:Class()",
"Router:Class()",
]);
});
});

Просмотреть файл

@ -10,6 +10,7 @@
*/
const expressionSelectors = {
plusIcon: ".watch-expressions-pane button.plus",
input: "input.input-expression"
};
@ -22,6 +23,7 @@ function getValue(dbg, index) {
}
async function addExpression(dbg, input) {
findElementWithSelector(dbg, expressionSelectors.plusIcon).click();
const evaluation = waitForDispatch(dbg, "EVALUATE_EXPRESSION");
findElementWithSelector(dbg, expressionSelectors.input).focus();
type(dbg, input);

Просмотреть файл

@ -10,6 +10,7 @@
*/
const expressionSelectors = {
plusIcon: ".watch-expressions-pane button.plus",
input: "input.input-expression"
};
@ -33,6 +34,7 @@ function assertEmptyValue(dbg, index) {
async function addExpression(dbg, input) {
info("Adding an expression");
findElementWithSelector(dbg, expressionSelectors.plusIcon).click();
findElementWithSelector(dbg, expressionSelectors.input).focus();
type(dbg, input);
pressKey(dbg, "Enter");

Просмотреть файл

@ -0,0 +1,20 @@
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org
root = true
[*]
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
indent_style = space
indent_size = 2
[*.hbs]
insert_final_newline = false
[*.{diff,md}]
trim_trailing_whitespace = false

Просмотреть файл

@ -0,0 +1,9 @@
{
/**
Ember CLI sends analytics information by default. The data is completely
anonymous, but there are times when you might want to disable this behavior.
Setting `disableAnalytics` to true will prevent any data from being sent.
*/
"disableAnalytics": false
}

Просмотреть файл

@ -0,0 +1,38 @@
module.exports = {
root: true,
parserOptions: {
ecmaVersion: 2017,
sourceType: 'module'
},
plugins: [
'ember'
],
extends: [
'eslint:recommended',
'plugin:ember/recommended'
],
env: {
browser: true
},
rules: {
},
overrides: [
// node files
{
files: [
'testem.js',
'ember-cli-build.js',
'config/**/*.js',
'lib/*/index.js'
],
parserOptions: {
sourceType: 'script',
ecmaVersion: 2015
},
env: {
browser: false,
node: true
}
}
]
};

Просмотреть файл

@ -0,0 +1,23 @@
# See https://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
# /dist # not ignored because we want to load the static files
/tmp
# dependencies
/node_modules
/bower_components
# misc
/.sass-cache
/connect.lock
/coverage/*
/libpeerconnection.log
npm-debug.log*
yarn-error.log
testem.log
# ember-try
.node_modules.ember-try/
bower.json.ember-try
package.json.ember-try

Просмотреть файл

@ -0,0 +1,26 @@
---
language: node_js
node_js:
- "6"
sudo: false
dist: trusty
addons:
chrome: stable
cache:
directories:
- $HOME/.npm
env:
global:
# See https://git.io/vdao3 for details.
- JOBS=1
before_install:
- npm config set spin false
script:
- npm run lint:js
- npm test

Просмотреть файл

@ -0,0 +1,3 @@
{
"ignore_dirs": ["tmp", "dist"]
}

Просмотреть файл

@ -0,0 +1,4 @@
### Building
* `ember build`

Просмотреть файл

@ -0,0 +1,14 @@
import Application from '@ember/application';
import Resolver from './resolver';
import loadInitializers from 'ember-load-initializers';
import config from './config/environment';
const App = Application.extend({
modulePrefix: config.modulePrefix,
podModulePrefix: config.podModulePrefix,
Resolver
});
loadInitializers(App, config.modulePrefix);
export default App;

Просмотреть файл

Просмотреть файл

@ -0,0 +1,25 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Quickstart</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
{{content-for "head"}}
<link integrity="" rel="stylesheet" href="{{rootURL}}assets/vendor.css">
<link integrity="" rel="stylesheet" href="{{rootURL}}assets/quickstart.css">
{{content-for "head-footer"}}
</head>
<body>
{{content-for "body"}}
<script src="{{rootURL}}assets/vendor.js"></script>
<script src="{{rootURL}}assets/quickstart.js"></script>
{{content-for "body-footer"}}
</body>
</html>

Просмотреть файл

Просмотреть файл

@ -0,0 +1,3 @@
import Resolver from 'ember-resolver';
export default Resolver;

Просмотреть файл

@ -0,0 +1,16 @@
import EmberRouter from '@ember/routing/router';
import config from './config/environment';
const Router = EmberRouter.extend({
location: config.locationType,
rootURL: config.rootURL
});
Router.map(function() {
});
window.mapTestFunction = () => {
window.console.log("pause here", config, Router);
};
export default Router;

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -0,0 +1,5 @@
{{!-- The following component displays Ember's default welcome message. --}}
{{welcome-page}}
{{!-- Feel free to remove this! --}}
{{outlet}}

Просмотреть файл

@ -0,0 +1,58 @@
'use strict';
module.exports = function(environment) {
let ENV = {
modulePrefix: 'quickstart',
environment,
locationType: 'auto',
EmberENV: {
FEATURES: {
// Here you can enable experimental features on an ember canary build
// e.g. 'with-controller': true
},
EXTEND_PROTOTYPES: {
// Prevent Ember Data from overriding Date.parse.
Date: false
}
},
APP: {
// Here you can pass flags/options to your application instance
// when it is created
},
// NOTE(logan): Hard-code the URL for the debugger example to allow it to
// function properly. The default "/" root makes assets fail to load.
rootURL: "/browser/devtools/client/debugger/new/test/mochitest/examples/ember/quickstart/dist/",
// If using "http://localhost:8000/integration/examples/ember/quickstart/dist/" to
// access this test example, uncomment this line and re-run "yarn build".
// rootURL: "/integration/examples/ember/quickstart/dist/",
};
if (environment === 'development') {
// ENV.APP.LOG_RESOLVER = true;
// ENV.APP.LOG_ACTIVE_GENERATION = true;
// ENV.APP.LOG_TRANSITIONS = true;
// ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
// ENV.APP.LOG_VIEW_LOOKUPS = true;
}
if (environment === 'test') {
// Testem prefers this...
ENV.locationType = 'none';
// keep test console output quieter
ENV.APP.LOG_ACTIVE_GENERATION = false;
ENV.APP.LOG_VIEW_LOOKUPS = false;
ENV.APP.rootElement = '#ember-testing';
ENV.APP.autoboot = false;
}
if (environment === 'production') {
// here you can enable a production-specific feature
}
return ENV;
};

Просмотреть файл

@ -0,0 +1,18 @@
'use strict';
const browsers = [
'last 1 Chrome versions',
'last 1 Firefox versions',
'last 1 Safari versions'
];
const isCI = !!process.env.CI;
const isProduction = process.env.EMBER_ENV === 'production';
if (isCI || isProduction) {
browsers.push('ie 11');
}
module.exports = {
browsers
};

Просмотреть файл

Просмотреть файл

@ -0,0 +1,277 @@
"use strict";
define('quickstart/app', ['exports', 'quickstart/resolver', 'ember-load-initializers', 'quickstart/config/environment'], function (exports, _resolver, _emberLoadInitializers, _environment) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
const App = Ember.Application.extend({
modulePrefix: _environment.default.modulePrefix,
podModulePrefix: _environment.default.podModulePrefix,
Resolver: _resolver.default
});
(0, _emberLoadInitializers.default)(App, _environment.default.modulePrefix);
exports.default = App;
});
define('quickstart/components/welcome-page', ['exports', 'ember-welcome-page/components/welcome-page'], function (exports, _welcomePage) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, 'default', {
enumerable: true,
get: function () {
return _welcomePage.default;
}
});
});
define('quickstart/helpers/app-version', ['exports', 'quickstart/config/environment', 'ember-cli-app-version/utils/regexp'], function (exports, _environment, _regexp) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.appVersion = appVersion;
const {
APP: {
version
}
} = _environment.default;
function appVersion(_, hash = {}) {
if (hash.hideSha) {
return version.match(_regexp.versionRegExp)[0];
}
if (hash.hideVersion) {
return version.match(_regexp.shaRegExp)[0];
}
return version;
}
exports.default = Ember.Helper.helper(appVersion);
});
define('quickstart/helpers/pluralize', ['exports', 'ember-inflector/lib/helpers/pluralize'], function (exports, _pluralize) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _pluralize.default;
});
define('quickstart/helpers/singularize', ['exports', 'ember-inflector/lib/helpers/singularize'], function (exports, _singularize) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _singularize.default;
});
define('quickstart/initializers/app-version', ['exports', 'ember-cli-app-version/initializer-factory', 'quickstart/config/environment'], function (exports, _initializerFactory, _environment) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
let name, version;
if (_environment.default.APP) {
name = _environment.default.APP.name;
version = _environment.default.APP.version;
}
exports.default = {
name: 'App Version',
initialize: (0, _initializerFactory.default)(name, version)
};
});
define('quickstart/initializers/container-debug-adapter', ['exports', 'ember-resolver/resolvers/classic/container-debug-adapter'], function (exports, _containerDebugAdapter) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = {
name: 'container-debug-adapter',
initialize() {
let app = arguments[1] || arguments[0];
app.register('container-debug-adapter:main', _containerDebugAdapter.default);
app.inject('container-debug-adapter:main', 'namespace', 'application:main');
}
};
});
define('quickstart/initializers/ember-data', ['exports', 'ember-data/setup-container', 'ember-data'], function (exports, _setupContainer) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = {
name: 'ember-data',
initialize: _setupContainer.default
};
});
define('quickstart/initializers/export-application-global', ['exports', 'quickstart/config/environment'], function (exports, _environment) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.initialize = initialize;
function initialize() {
var application = arguments[1] || arguments[0];
if (_environment.default.exportApplicationGlobal !== false) {
var theGlobal;
if (typeof window !== 'undefined') {
theGlobal = window;
} else if (typeof global !== 'undefined') {
theGlobal = global;
} else if (typeof self !== 'undefined') {
theGlobal = self;
} else {
// no reasonable global, just bail
return;
}
var value = _environment.default.exportApplicationGlobal;
var globalName;
if (typeof value === 'string') {
globalName = value;
} else {
globalName = Ember.String.classify(_environment.default.modulePrefix);
}
if (!theGlobal[globalName]) {
theGlobal[globalName] = application;
application.reopen({
willDestroy: function () {
this._super.apply(this, arguments);
delete theGlobal[globalName];
}
});
}
}
}
exports.default = {
name: 'export-application-global',
initialize: initialize
};
});
define("quickstart/instance-initializers/ember-data", ["exports", "ember-data/initialize-store-service"], function (exports, _initializeStoreService) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = {
name: "ember-data",
initialize: _initializeStoreService.default
};
});
define('quickstart/resolver', ['exports', 'ember-resolver'], function (exports, _emberResolver) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _emberResolver.default;
});
define('quickstart/router', ['exports', 'quickstart/config/environment'], function (exports, _environment) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
const Router = Ember.Router.extend({
location: _environment.default.locationType,
rootURL: _environment.default.rootURL
});
Router.map(function () {});
window.mapTestFunction = () => {
window.console.log("pause here", _environment.default, Router);
};
exports.default = Router;
});
define('quickstart/services/ajax', ['exports', 'ember-ajax/services/ajax'], function (exports, _ajax) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, 'default', {
enumerable: true,
get: function () {
return _ajax.default;
}
});
});
define("quickstart/templates/application", ["exports"], function (exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = Ember.HTMLBars.template({ "id": "d4rGKf2G", "block": "{\"symbols\":[],\"statements\":[[1,[18,\"welcome-page\"],false],[0,\"\\n\"],[0,\"\\n\"],[1,[18,\"outlet\"],false]],\"hasEval\":false}", "meta": { "moduleName": "quickstart/templates/application.hbs" } });
});
define('quickstart/config/environment', [], function() {
var prefix = 'quickstart';
try {
var metaName = prefix + '/config/environment';
var rawConfig = document.querySelector('meta[name="' + metaName + '"]').getAttribute('content');
var config = JSON.parse(unescape(rawConfig));
var exports = { 'default': config };
Object.defineProperty(exports, '__esModule', { value: true });
return exports;
}
catch(err) {
throw new Error('Could not read config from meta tag with name "' + metaName + '".');
}
});
if (!runningTests) {
require("quickstart/app")["default"].create({"name":"quickstart","version":"0.0.0+1dde1d7f"});
}
//# sourceMappingURL=quickstart.map

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -0,0 +1,471 @@
/*!
* QUnit 2.5.1
* https://qunitjs.com/
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2018-02-28T01:37Z
*/
/** Font Family and Sizes */
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult {
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
}
#qunit-testrunner-toolbar, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
#qunit-tests { font-size: smaller; }
/** Resets */
#qunit-tests, #qunit-header, #qunit-banner, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
margin: 0;
padding: 0;
}
/** Header (excluding toolbar) */
#qunit-header {
padding: 0.5em 0 0.5em 1em;
color: #8699A4;
background-color: #0D3349;
font-size: 1.5em;
line-height: 1em;
font-weight: 400;
border-radius: 5px 5px 0 0;
}
#qunit-header a {
text-decoration: none;
color: #C2CCD1;
}
#qunit-header a:hover,
#qunit-header a:focus {
color: #FFF;
}
#qunit-banner {
height: 5px;
}
#qunit-filteredTest {
padding: 0.5em 1em 0.5em 1em;
color: #366097;
background-color: #F4FF77;
}
#qunit-userAgent {
padding: 0.5em 1em 0.5em 1em;
color: #FFF;
background-color: #2B81AF;
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
}
/** Toolbar */
#qunit-testrunner-toolbar {
padding: 0.5em 1em 0.5em 1em;
color: #5E740B;
background-color: #EEE;
}
#qunit-testrunner-toolbar .clearfix {
height: 0;
clear: both;
}
#qunit-testrunner-toolbar label {
display: inline-block;
}
#qunit-testrunner-toolbar input[type=checkbox],
#qunit-testrunner-toolbar input[type=radio] {
margin: 3px;
vertical-align: -2px;
}
#qunit-testrunner-toolbar input[type=text] {
box-sizing: border-box;
height: 1.6em;
}
.qunit-url-config,
.qunit-filter,
#qunit-modulefilter {
display: inline-block;
line-height: 2.1em;
}
.qunit-filter,
#qunit-modulefilter {
float: right;
position: relative;
margin-left: 1em;
}
.qunit-url-config label {
margin-right: 0.5em;
}
#qunit-modulefilter-search {
box-sizing: border-box;
width: 400px;
}
#qunit-modulefilter-search-container:after {
position: absolute;
right: 0.3em;
content: "\25bc";
color: black;
}
#qunit-modulefilter-dropdown {
/* align with #qunit-modulefilter-search */
box-sizing: border-box;
width: 400px;
position: absolute;
right: 0;
top: 50%;
margin-top: 0.8em;
border: 1px solid #D3D3D3;
border-top: none;
border-radius: 0 0 .25em .25em;
color: #000;
background-color: #F5F5F5;
z-index: 99;
}
#qunit-modulefilter-dropdown a {
color: inherit;
text-decoration: none;
}
#qunit-modulefilter-dropdown .clickable.checked {
font-weight: bold;
color: #000;
background-color: #D2E0E6;
}
#qunit-modulefilter-dropdown .clickable:hover {
color: #FFF;
background-color: #0D3349;
}
#qunit-modulefilter-actions {
display: block;
overflow: auto;
/* align with #qunit-modulefilter-dropdown-list */
font: smaller/1.5em sans-serif;
}
#qunit-modulefilter-dropdown #qunit-modulefilter-actions > * {
box-sizing: border-box;
max-height: 2.8em;
display: block;
padding: 0.4em;
}
#qunit-modulefilter-dropdown #qunit-modulefilter-actions > button {
float: right;
font: inherit;
}
#qunit-modulefilter-dropdown #qunit-modulefilter-actions > :last-child {
/* insert padding to align with checkbox margins */
padding-left: 3px;
}
#qunit-modulefilter-dropdown-list {
max-height: 200px;
overflow-y: auto;
margin: 0;
border-top: 2px groove threedhighlight;
padding: 0.4em 0 0;
font: smaller/1.5em sans-serif;
}
#qunit-modulefilter-dropdown-list li {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
#qunit-modulefilter-dropdown-list .clickable {
display: block;
padding-left: 0.15em;
}
/** Tests: Pass/Fail */
#qunit-tests {
list-style-position: inside;
}
#qunit-tests li {
padding: 0.4em 1em 0.4em 1em;
border-bottom: 1px solid #FFF;
list-style-position: inside;
}
#qunit-tests > li {
display: none;
}
#qunit-tests li.running,
#qunit-tests li.pass,
#qunit-tests li.fail,
#qunit-tests li.skipped,
#qunit-tests li.aborted {
display: list-item;
}
#qunit-tests.hidepass {
position: relative;
}
#qunit-tests.hidepass li.running,
#qunit-tests.hidepass li.pass:not(.todo) {
visibility: hidden;
position: absolute;
width: 0;
height: 0;
padding: 0;
border: 0;
margin: 0;
}
#qunit-tests li strong {
cursor: pointer;
}
#qunit-tests li.skipped strong {
cursor: default;
}
#qunit-tests li a {
padding: 0.5em;
color: #C2CCD1;
text-decoration: none;
}
#qunit-tests li p a {
padding: 0.25em;
color: #6B6464;
}
#qunit-tests li a:hover,
#qunit-tests li a:focus {
color: #000;
}
#qunit-tests li .runtime {
float: right;
font-size: smaller;
}
.qunit-assert-list {
margin-top: 0.5em;
padding: 0.5em;
background-color: #FFF;
border-radius: 5px;
}
.qunit-source {
margin: 0.6em 0 0.3em;
}
.qunit-collapsed {
display: none;
}
#qunit-tests table {
border-collapse: collapse;
margin-top: 0.2em;
}
#qunit-tests th {
text-align: right;
vertical-align: top;
padding: 0 0.5em 0 0;
}
#qunit-tests td {
vertical-align: top;
}
#qunit-tests pre {
margin: 0;
white-space: pre-wrap;
word-wrap: break-word;
}
#qunit-tests del {
color: #374E0C;
background-color: #E0F2BE;
text-decoration: none;
}
#qunit-tests ins {
color: #500;
background-color: #FFCACA;
text-decoration: none;
}
/*** Test Counts */
#qunit-tests b.counts { color: #000; }
#qunit-tests b.passed { color: #5E740B; }
#qunit-tests b.failed { color: #710909; }
#qunit-tests li li {
padding: 5px;
background-color: #FFF;
border-bottom: none;
list-style-position: inside;
}
/*** Passing Styles */
#qunit-tests li li.pass {
color: #3C510C;
background-color: #FFF;
border-left: 10px solid #C6E746;
}
#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
#qunit-tests .pass .test-name { color: #366097; }
#qunit-tests .pass .test-actual,
#qunit-tests .pass .test-expected { color: #999; }
#qunit-banner.qunit-pass { background-color: #C6E746; }
/*** Failing Styles */
#qunit-tests li li.fail {
color: #710909;
background-color: #FFF;
border-left: 10px solid #EE5757;
white-space: pre;
}
#qunit-tests > li:last-child {
border-radius: 0 0 5px 5px;
}
#qunit-tests .fail { color: #000; background-color: #EE5757; }
#qunit-tests .fail .test-name,
#qunit-tests .fail .module-name { color: #000; }
#qunit-tests .fail .test-actual { color: #EE5757; }
#qunit-tests .fail .test-expected { color: #008000; }
#qunit-banner.qunit-fail { background-color: #EE5757; }
/*** Aborted tests */
#qunit-tests .aborted { color: #000; background-color: orange; }
/*** Skipped tests */
#qunit-tests .skipped {
background-color: #EBECE9;
}
#qunit-tests .qunit-todo-label,
#qunit-tests .qunit-skipped-label {
background-color: #F4FF77;
display: inline-block;
font-style: normal;
color: #366097;
line-height: 1.8em;
padding: 0 0.5em;
margin: -0.4em 0.4em -0.4em 0;
}
#qunit-tests .qunit-todo-label {
background-color: #EEE;
}
/** Result */
#qunit-testresult {
color: #2B81AF;
background-color: #D2E0E6;
border-bottom: 1px solid #FFF;
}
#qunit-testresult .clearfix {
height: 0;
clear: both;
}
#qunit-testresult .module-name {
font-weight: 700;
}
#qunit-testresult-display {
padding: 0.5em 1em 0.5em 1em;
width: 85%;
float:left;
}
#qunit-testresult-controls {
padding: 0.5em 1em 0.5em 1em;
width: 10%;
float:left;
}
/** Fixture */
#qunit-fixture {
position: absolute;
top: -10000px;
left: -10000px;
width: 1000px;
height: 1000px;
}
#ember-testing-container {
position: relative;
background: white;
bottom: 0;
right: 0;
width: 640px;
height: 384px;
overflow: auto;
z-index: 98;
border: 1px solid #ccc;
margin: 0 auto;
}
#ember-testing-container.full-screen {
width: 100%;
height: 100%;
overflow: auto;
z-index: 98;
border: none;
}
#ember-testing {
width: 200%;
height: 200%;
transform: scale(0.5);
transform-origin: top left;
}
.full-screen #ember-testing {
position: absolute;
width: 100%;
height: 100%;
transform: scale(1);
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -0,0 +1,62 @@
'use strict';
define('quickstart/tests/app.lint-test', [], function () {
'use strict';
QUnit.module('ESLint | app');
QUnit.test('app.js', function (assert) {
assert.expect(1);
assert.ok(true, 'app.js should pass ESLint\n\n');
});
QUnit.test('resolver.js', function (assert) {
assert.expect(1);
assert.ok(true, 'resolver.js should pass ESLint\n\n');
});
QUnit.test('router.js', function (assert) {
assert.expect(1);
assert.ok(true, 'router.js should pass ESLint\n\n');
});
});
define('quickstart/tests/test-helper', ['quickstart/app', 'quickstart/config/environment', '@ember/test-helpers', 'ember-qunit'], function (_app, _environment, _testHelpers, _emberQunit) {
'use strict';
(0, _testHelpers.setApplication)(_app.default.create(_environment.default.APP));
(0, _emberQunit.start)();
});
define('quickstart/tests/tests.lint-test', [], function () {
'use strict';
QUnit.module('ESLint | tests');
QUnit.test('test-helper.js', function (assert) {
assert.expect(1);
assert.ok(true, 'test-helper.js should pass ESLint\n\n');
});
});
define('quickstart/config/environment', [], function() {
var prefix = 'quickstart';
try {
var metaName = prefix + '/config/environment';
var rawConfig = document.querySelector('meta[name="' + metaName + '"]').getAttribute('content');
var config = JSON.parse(unescape(rawConfig));
var exports = { 'default': config };
Object.defineProperty(exports, '__esModule', { value: true });
return exports;
}
catch(err) {
throw new Error('Could not read config from meta tag with name "' + metaName + '".');
}
});
require('quickstart/tests/test-helper');
EmberENV.TESTS_FILE_LOADED = true;
//# sourceMappingURL=tests.map

Просмотреть файл

@ -0,0 +1 @@
{"version":3,"sources":["vendor/ember-cli/tests-prefix.js","quickstart/tests/app.lint-test.js","quickstart/tests/test-helper.js","quickstart/tests/tests.lint-test.js","vendor/ember-cli/app-config.js","vendor/ember-cli/tests-suffix.js"],"sourcesContent":["'use strict';\n","define('quickstart/tests/app.lint-test', [], function () {\n 'use strict';\n\n QUnit.module('ESLint | app');\n\n QUnit.test('app.js', function (assert) {\n assert.expect(1);\n assert.ok(true, 'app.js should pass ESLint\\n\\n');\n });\n\n QUnit.test('resolver.js', function (assert) {\n assert.expect(1);\n assert.ok(true, 'resolver.js should pass ESLint\\n\\n');\n });\n\n QUnit.test('router.js', function (assert) {\n assert.expect(1);\n assert.ok(true, 'router.js should pass ESLint\\n\\n');\n });\n});","import Application from '../app';\nimport config from '../config/environment';\nimport { setApplication } from '@ember/test-helpers';\nimport { start } from 'ember-qunit';\n\nsetApplication(Application.create(config.APP));\n\nstart();\n","define('quickstart/tests/tests.lint-test', [], function () {\n 'use strict';\n\n QUnit.module('ESLint | tests');\n\n QUnit.test('test-helper.js', function (assert) {\n assert.expect(1);\n assert.ok(true, 'test-helper.js should pass ESLint\\n\\n');\n });\n});","define('quickstart/config/environment', [], function() {\n var prefix = 'quickstart';\ntry {\n var metaName = prefix + '/config/environment';\n var rawConfig = document.querySelector('meta[name=\"' + metaName + '\"]').getAttribute('content');\n var config = JSON.parse(unescape(rawConfig));\n\n var exports = { 'default': config };\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n}\ncatch(err) {\n throw new Error('Could not read config from meta tag with name \"' + metaName + '\".');\n}\n\n});\n","require('quickstart/tests/test-helper');\nEmberENV.TESTS_FILE_LOADED = true;\n"],"names":["create","APP"],"mappings":"AAAA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACbA,mCAAe,aAAYA,MAAZ,CAAmB,qBAAOC,GAA1B,CAAf;;AAEA;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;","file":"tests.js"}

Просмотреть файл

@ -0,0 +1,97 @@
#ember-welcome-page-id-selector {
padding: 2em;
box-shadow: 0 0 0px 10px #FFFBF5;
font-family: "Helvetica Neue", "Helvetica", "Roboto", "Arial", sans-serif;
font-size: 16px;
line-height: 1.35em;
background: #FFFBF5;
color: #865931;
height: 100vh;
}
#ember-welcome-page-id-selector img {
max-width: 100%;
}
#ember-welcome-page-id-selector p {
margin: 0 0 .75em;
}
#ember-welcome-page-id-selector h2 {
color: #dd6a58;
margin-top: 1em;
font-size: 1.75em;
line-height: 1.2
}
#ember-welcome-page-id-selector a:link,
#ember-welcome-page-id-selector a:visited {
color: #dd6a58;
text-decoration: none;
}
#ember-welcome-page-id-selector a:hover,
#ember-welcome-page-id-selector a:active {
color: #c13c27;
}
#ember-welcome-page-id-selector .tomster {
flex: 2;
}
#ember-welcome-page-id-selector .welcome {
flex: 3;
}
#ember-welcome-page-id-selector .columns {
display: flex;
max-width: 960px;
margin: 0 auto;
}
#ember-welcome-page-id-selector .welcome ol {
list-style: disc;
padding-left: 2em;
margin-bottom: .75em;
}
#ember-welcome-page-id-selector .welcome > ol > li {
padding-bottom: .5em;
}
#ember-welcome-page-id-selector .postscript {
clear: both;
text-align: center;
padding-top: 3em;
font-size: 14px;
color: #888;
font-style: italic;
line-height: 2;
}
#ember-welcome-page-id-selector .postscript code {
background-color: #F8E7CF;
border-radius: 3px;
font-family: Menlo, Courier, monospace;
font-size: 0.9em;
padding: 0.2em 0.5em;
margin: 0 0.1em;
}
@media (max-width: 700px) {
#ember-welcome-page-id-selector {
padding: 1em;
}
#ember-welcome-page-id-selector .columns {
flex-direction: column;
}
#ember-welcome-page-id-selector .welcome,
#ember-welcome-page-id-selector .tomster {
}
#ember-welcome-page-id-selector .tomster img {
width: 50%;
margin: auto;
display: block;
}
#ember-welcome-page-id-selector h2 {
text-align: center;
}
}
@media (max-width: 400px) {
#ember-welcome-page-id-selector .tomster img {
width: 60%;
}
#ember-welcome-page-id-selector .welcome,
#ember-welcome-page-id-selector .tomster {
width: 100%;
float: none;
margin: auto;
}
}

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 89 KiB

Просмотреть файл

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Quickstart</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="quickstart/config/environment" content="%7B%22modulePrefix%22%3A%22quickstart%22%2C%22environment%22%3A%22development%22%2C%22locationType%22%3A%22auto%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%7D%7D%2C%22APP%22%3A%7B%22name%22%3A%22quickstart%22%2C%22version%22%3A%220.0.0+1dde1d7f%22%7D%2C%22rootURL%22%3A%22/browser/devtools/client/debugger/new/test/mochitest/examples/ember/quickstart/dist/%22%2C%22exportApplicationGlobal%22%3Atrue%7D" />
<link integrity="" rel="stylesheet" href="/browser/devtools/client/debugger/new/test/mochitest/examples/ember/quickstart/dist/assets/vendor.css">
<link integrity="" rel="stylesheet" href="/browser/devtools/client/debugger/new/test/mochitest/examples/ember/quickstart/dist/assets/quickstart.css">
</head>
<body>
<script src="/browser/devtools/client/debugger/new/test/mochitest/examples/ember/quickstart/dist/assets/vendor.js"></script>
<script src="/browser/devtools/client/debugger/new/test/mochitest/examples/ember/quickstart/dist/assets/quickstart.js"></script>
</body>
</html>

Просмотреть файл

@ -0,0 +1,3 @@
# http://www.robotstxt.org
User-agent: *
Disallow:

Просмотреть файл

@ -0,0 +1,19 @@
/*
* This is dummy file that exists for the sole purpose
* of allowing tests to run directly in the browser as
* well as by Testem.
*
* Testem is configured to run tests directly against
* the test build of index.html, which requires a
* snippet to load the testem.js file:
* <script src="/testem.js"></script>
* This has to go before the qunit framework and app
* tests are loaded.
*
* Testem internally supplies this file. However, if you
* run the tests directly in the browser (localhost:8000/tests),
* this file does not exist.
*
* Hence the purpose of this fake file. This file is served
* directly from the express server to satisify the script load.
*/

Просмотреть файл

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Quickstart Tests</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="quickstart/config/environment" content="%7B%22modulePrefix%22%3A%22quickstart%22%2C%22environment%22%3A%22test%22%2C%22locationType%22%3A%22none%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%7D%7D%2C%22APP%22%3A%7B%22LOG_ACTIVE_GENERATION%22%3Afalse%2C%22LOG_VIEW_LOOKUPS%22%3Afalse%2C%22rootElement%22%3A%22%23ember-testing%22%2C%22autoboot%22%3Afalse%2C%22name%22%3A%22quickstart%22%2C%22version%22%3A%220.0.0+1dde1d7f%22%7D%2C%22rootURL%22%3A%22/browser/devtools/client/debugger/new/test/mochitest/examples/ember/quickstart/dist/%22%2C%22exportApplicationGlobal%22%3Atrue%7D" />
<link rel="stylesheet" href="/browser/devtools/client/debugger/new/test/mochitest/examples/ember/quickstart/dist/assets/vendor.css">
<link rel="stylesheet" href="/browser/devtools/client/debugger/new/test/mochitest/examples/ember/quickstart/dist/assets/quickstart.css">
<link rel="stylesheet" href="/browser/devtools/client/debugger/new/test/mochitest/examples/ember/quickstart/dist/assets/test-support.css">
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<div id="ember-testing-container">
<div id="ember-testing"></div>
</div>
<script src="/testem.js" integrity=""></script>
<script src="/browser/devtools/client/debugger/new/test/mochitest/examples/ember/quickstart/dist/assets/vendor.js"></script>
<script src="/browser/devtools/client/debugger/new/test/mochitest/examples/ember/quickstart/dist/assets/test-support.js"></script>
<script src="/browser/devtools/client/debugger/new/test/mochitest/examples/ember/quickstart/dist/assets/quickstart.js"></script>
<script src="/browser/devtools/client/debugger/new/test/mochitest/examples/ember/quickstart/dist/assets/tests.js"></script>
<script>Ember.assert('The tests file was not loaded. Make sure your tests index.html includes "assets/tests.js".', EmberENV.TESTS_FILE_LOADED);</script>
</body>
</html>

Просмотреть файл

@ -0,0 +1,32 @@
'use strict';
const EmberApp = require('ember-cli/lib/broccoli/ember-app');
module.exports = function(defaults) {
// debugger;
let app = new EmberApp(defaults, {
// Add options here
sourcemaps: { enabled: true },
babel: {
sourceMaps: "inline",
},
'ember-babel-cli': {
sourceMaps: "inline",
}
});
// Use `app.import` to add additional libraries to the generated
// output files.
//
// If you need to use different assets in different
// environments, specify an object as the first parameter. That
// object's keys should be the environment name and the values
// should be the asset to use in that environment.
//
// If the library that you are including contains AMD or ES6
// modules that you would like to import into your application
// please specify an object with the list of modules as keys
// along with the exports of each module as its value.
return app.toTree();
};

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,47 @@
{
"name": "quickstart",
"version": "0.0.0",
"private": true,
"description": "Small description for quickstart goes here",
"license": "MIT",
"author": "",
"directories": {
"doc": "doc",
"test": "tests"
},
"repository": "",
"scripts": {
"build": "ember build",
"lint:js": "eslint ./*.js app config lib server tests",
"start": "ember serve",
"test": "ember test"
},
"devDependencies": {
"broccoli-asset-rev": "^2.4.5",
"ember-ajax": "^3.0.0",
"ember-cli": "~3.0.2",
"ember-cli-app-version": "^3.0.0",
"ember-cli-babel": "^6.6.0",
"ember-cli-dependency-checker": "^2.0.0",
"ember-cli-eslint": "^4.2.1",
"ember-cli-htmlbars": "^2.0.1",
"ember-cli-htmlbars-inline-precompile": "^1.0.0",
"ember-cli-inject-live-reload": "^1.4.1",
"ember-cli-qunit": "^4.1.1",
"ember-cli-shims": "^1.2.0",
"ember-cli-sri": "^2.1.0",
"ember-cli-uglify": "^2.0.0",
"ember-data": "~3.0.0",
"ember-export-application-global": "^2.0.0",
"ember-load-initializers": "^1.0.0",
"ember-maybe-import-regenerator": "^0.1.6",
"ember-resolver": "^4.0.0",
"ember-source": "~3.0.0",
"ember-welcome-page": "^3.0.0",
"eslint-plugin-ember": "^5.0.0",
"loader.js": "^4.2.3"
},
"engines": {
"node": "^4.5 || 6.* || >= 7.*"
}
}

Просмотреть файл

@ -0,0 +1,3 @@
# http://www.robotstxt.org
User-agent: *
Disallow:

Просмотреть файл

@ -0,0 +1,24 @@
module.exports = {
test_page: 'tests/index.html?hidepassed',
disable_watching: true,
launch_in_ci: [
'Chrome'
],
launch_in_dev: [
'Chrome'
],
browser_args: {
Chrome: {
mode: 'ci',
args: [
// --no-sandbox is needed when running Chrome inside a container
process.env.TRAVIS ? '--no-sandbox' : null,
'--disable-gpu',
'--headless',
'--remote-debugging-port=0',
'--window-size=1440,900'
].filter(Boolean)
}
}
};

Просмотреть файл

Просмотреть файл

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Quickstart Tests</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
{{content-for "head"}}
{{content-for "test-head"}}
<link rel="stylesheet" href="{{rootURL}}assets/vendor.css">
<link rel="stylesheet" href="{{rootURL}}assets/quickstart.css">
<link rel="stylesheet" href="{{rootURL}}assets/test-support.css">
{{content-for "head-footer"}}
{{content-for "test-head-footer"}}
</head>
<body>
{{content-for "body"}}
{{content-for "test-body"}}
<script src="/testem.js" integrity=""></script>
<script src="{{rootURL}}assets/vendor.js"></script>
<script src="{{rootURL}}assets/test-support.js"></script>
<script src="{{rootURL}}assets/quickstart.js"></script>
<script src="{{rootURL}}assets/tests.js"></script>
{{content-for "body-footer"}}
{{content-for "test-body-footer"}}
</body>
</html>

Просмотреть файл

@ -0,0 +1,8 @@
import Application from '../app';
import config from '../config/environment';
import { setApplication } from '@ember/test-helpers';
import { start } from 'ember-qunit';
setApplication(Application.create(config.APP));
start();

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -746,6 +746,91 @@ function disableBreakpoint(dbg, source, line, column) {
return waitForDispatch(dbg, "DISABLE_BREAKPOINT");
}
async function loadAndAddBreakpoint(dbg, filename, line, column) {
const { selectors: { getBreakpoint, getBreakpoints }, getState } = dbg;
await waitForSources(dbg, filename);
ok(true, "Original sources exist");
const source = findSource(dbg, filename);
await selectSource(dbg, source);
// Test that breakpoint is not off by a line.
await addBreakpoint(dbg, source, line);
is(getBreakpoints(getState()).size, 1, "One breakpoint exists");
ok(
getBreakpoint(getState(), { sourceId: source.id, line, column }),
"Breakpoint has correct line"
);
return source;
}
async function invokeWithBreakpoint(dbg, fnName, filename, { line, column }, handler) {
const { selectors: { getBreakpoints }, getState } = dbg;
const source = await loadAndAddBreakpoint(dbg, filename, line, column);
const invokeResult = invokeInTab(fnName);
let invokeFailed = await Promise.race([
waitForPaused(dbg),
invokeResult.then(() => new Promise(() => {}), () => true)
]);
if (invokeFailed) {
return invokeResult;
}
assertPausedLocation(dbg);
await removeBreakpoint(dbg, source.id, line, column);
is(getBreakpoints(getState()).size, 0, "Breakpoint reverted");
await handler(source);
await resume(dbg);
// If the invoke errored later somehow, capture here so the error is reported nicely.
await invokeResult;
}
async function expandAllScopes(dbg) {
const scopes = await waitForElement(dbg, "scopes");
const scopeElements = scopes.querySelectorAll(
`.tree-node[aria-level="1"][data-expandable="true"]:not([aria-expanded="true"])`
);
const indices = Array.from(scopeElements, el => {
return Array.prototype.indexOf.call(el.parentNode.childNodes, el);
}).reverse();
for (const index of indices) {
await toggleScopeNode(dbg, index + 1);
}
}
async function assertScopes(dbg, items) {
await expandAllScopes(dbg);
for (const [i, val] of items.entries()) {
if (Array.isArray(val)) {
is(getScopeLabel(dbg, i + 1), val[0]);
is(
getScopeValue(dbg, i + 1),
val[1],
`"${val[0]}" has the expected "${val[1]}" value`
);
} else {
is(getScopeLabel(dbg, i + 1), val);
}
}
is(getScopeLabel(dbg, items.length + 1), "Window");
}
/**
* Removes a breakpoint from a source at line/col.
*

Просмотреть файл

@ -272,6 +272,7 @@ devtools.jar:
skin/images/debugger/close.svg (themes/images/debugger/close.svg)
skin/images/debugger/coffeescript.svg (themes/images/debugger/coffeescript.svg)
skin/images/debugger/domain.svg (themes/images/debugger/domain.svg)
skin/images/debugger/extension.svg (themes/images/debugger/extension.svg)
skin/images/debugger/file.svg (themes/images/debugger/file.svg)
skin/images/debugger/folder.svg (themes/images/debugger/folder.svg)
skin/images/debugger/forward.svg (themes/images/debugger/forward.svg)

Просмотреть файл

@ -655,6 +655,10 @@ addWatchExpressionText=Add watch expression
# variables view popup.
addWatchExpressionButton=Watch
# LOCALIZATION NOTE (extensionsText): The text that is displayed to represent
# "moz-extension" directories in the source tree
extensionsText=Extensions
# LOCALIZATION NOTE (emptyVariablesText): The text that is displayed in the
# variables pane when there are no variables to display.
emptyVariablesText=No variables to display

Просмотреть файл

@ -0,0 +1,6 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<path fill="context-fill" d="M14.5 8c-.971 0-1 1-1.75 1a.765.765 0 0 1-.75-.75V5a1 1 0 0 0-1-1H7.75A.765.765 0 0 1 7 3.25c0-.75 1-.779 1-1.75C8 .635 7.1 0 6 0S4 .635 4 1.5c0 .971 1 1 1 1.75a.765.765 0 0 1-.75.75H1a1 1 0 0 0-1 1v2.25A.765.765 0 0 0 .75 8c.75 0 .779-1 1.75-1C3.365 7 4 7.9 4 9s-.635 2-1.5 2c-.971 0-1-1-1.75-1a.765.765 0 0 0-.75.75V15a1 1 0 0 0 1 1h3.25a.765.765 0 0 0 .75-.75c0-.75-1-.779-1-1.75 0-.865.9-1.5 2-1.5s2 .635 2 1.5c0 .971-1 1-1 1.75a.765.765 0 0 0 .75.75H11a1 1 0 0 0 1-1v-3.25a.765.765 0 0 1 .75-.75c.75 0 .779 1 1.75 1 .865 0 1.5-.9 1.5-2s-.635-2-1.5-2z"></path>
</svg>

После

Ширина:  |  Высота:  |  Размер: 899 B