mirror of https://github.com/rancher/ui.git
Flip the lazy loading switch for all engines and remove browserify
loading overlay would stick on login sometimes first update for auto importer add required unsafe eval remove project level xterm loading ansi up lazy-load dot-object lazy load marked Move logger models out of logging engine, it prevents lazy loading add auto-importer config to logging semver & json2yaml lazy load pretty cron lazy load shell quote bug - typo in function name remove debugger lint and bugs add shellquote constant to deal with undef error Remove async from global and load module properly add ignore file for silver-searcher auto-import d3 lib auto-import Identicon auto-import jquery growl update jsondiffpatch and auto-import Remove unneeded voids ember-auto-load jszip pipeline bug Refactor verify-auth route for lazy engines auto-import to all engines/addons auto-import momentjs auto-import yaml auto-import file-saver update globals bugs review changes yarn lock move bable option back into the right place bug fixes decouple dependencies for nodes engine decouple dependencies for global-admin decouple dependencies for login engine decouple dependencies for alerts engine decouple dependencies for logging engine decouple dependencies for pipeline engine Lint sync and fix review bugs updates for rebase
This commit is contained in:
parent
5aede14acd
commit
4ace4f0411
|
|
@ -6,3 +6,4 @@ server/*
|
|||
tmp/*
|
||||
vendor/*
|
||||
bower.js
|
||||
ember-cli-build.js
|
||||
|
|
|
|||
19
.eslintrc.js
19
.eslintrc.js
|
|
@ -27,9 +27,11 @@ const propertyOrder = [
|
|||
|
||||
module.exports = {
|
||||
root: true,
|
||||
parser: 'babel-eslint',
|
||||
parserOptions: {
|
||||
ecmaVersion: 2017,
|
||||
sourceType: "module"
|
||||
sourceType: "module",
|
||||
allowImportExportEverywhere: true
|
||||
},
|
||||
extends: [
|
||||
"eslint:recommended",
|
||||
|
|
@ -37,30 +39,15 @@ module.exports = {
|
|||
],
|
||||
globals: {
|
||||
"$": true,
|
||||
"-Promise": true,
|
||||
"ALY": true,
|
||||
"AWS": true,
|
||||
"AnsiUp": true,
|
||||
"Identicon": true,
|
||||
"Prism": true,
|
||||
"ShellQuote": true,
|
||||
"Stripe": true,
|
||||
"Terminal": true,
|
||||
"Ui": true,
|
||||
"WebSocket": true,
|
||||
"YAML": true,
|
||||
"_": true,
|
||||
"async": true,
|
||||
"commonmark": true,
|
||||
"d3": true,
|
||||
"document": true,
|
||||
"jQuery": true,
|
||||
"jsondiffpatch": true,
|
||||
"md5": true,
|
||||
"moment": true,
|
||||
"navigator": true,
|
||||
"window": true,
|
||||
"ipaddr": true,
|
||||
},
|
||||
env: {
|
||||
browser: true,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
# compiled output
|
||||
/dist
|
||||
/tmp
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/bower_components
|
||||
|
||||
# misc
|
||||
/.sass-cache
|
||||
/connect.lock
|
||||
/coverage/*
|
||||
/libpeerconnection.log
|
||||
npm-debug.log
|
||||
testem.log
|
||||
.DS_Store
|
||||
.tern-port
|
||||
.tern-project
|
||||
.vscode
|
||||
.vscodeignore
|
||||
.jsbeautifyrc
|
||||
jsconfig.json
|
||||
/typings
|
||||
.env
|
||||
.floo
|
||||
.flooignore
|
||||
GPATH
|
||||
GRTAGS
|
||||
GTAGS
|
||||
*.code-workspace
|
||||
.dir-locals.el
|
||||
|
||||
|
||||
*.swp
|
||||
*~
|
||||
\#.*
|
||||
.python-version
|
||||
\#*
|
||||
.\#*
|
||||
|
||||
*.org
|
||||
yarn-error.log
|
||||
yarn.lock
|
||||
/vendor/*.js
|
||||
|
|
@ -2,10 +2,6 @@ import Application from '@ember/application';
|
|||
import Resolver from './resolver';
|
||||
import loadInitializers from 'ember-load-initializers';
|
||||
import config from './config/environment';
|
||||
import jsyaml from 'npm:js-yaml';
|
||||
|
||||
// init jsyaml for codemirror, can't directly import npm module from addon `shared`
|
||||
window.jsyaml || (window.jsyaml = jsyaml);
|
||||
|
||||
const App = Application.extend({
|
||||
modulePrefix: config.modulePrefix,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { cancel, next, scheduleOnce, schedule } from '@ember/runloop';
|
||||
import { cancel, next, schedule } from '@ember/runloop';
|
||||
import { inject as service } from '@ember/service';
|
||||
import Route from '@ember/routing/route';
|
||||
import C from 'ui/utils/constants';
|
||||
|
|
@ -78,9 +78,9 @@ export default Route.extend({
|
|||
duration: 100,
|
||||
queue: false,
|
||||
easing: 'linear',
|
||||
complete: function() { // eslint-disable-line
|
||||
complete: schedule('afterRender', function() { // eslint-disable-line
|
||||
$('#loading-overlay').stop().show().fadeIn({duration: 200, queue: false, easing: 'linear'}); // eslint-disable-line
|
||||
}
|
||||
})
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
@ -98,9 +98,9 @@ export default Route.extend({
|
|||
duration: 200,
|
||||
queue: false,
|
||||
easing: 'linear',
|
||||
complete: function() { // eslint-disable-line
|
||||
complete: schedule('afterRender', function() { // eslint-disable-line
|
||||
$('#loading-underlay').stop().fadeOut({duration: 100, queue: false, easing: 'linear'}); // eslint-disable-line
|
||||
}
|
||||
})
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
@ -111,10 +111,7 @@ export default Route.extend({
|
|||
set(this, 'hideTimer', next(hide));
|
||||
} else {
|
||||
// console.log('Loading finished', id, get(this, 'loadingId'));
|
||||
// needed to set this to run after render as there was wierdness wiht new register page
|
||||
scheduleOnce('afterRender', () => {
|
||||
hide();
|
||||
});
|
||||
hide();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
<div class="shell-popup">
|
||||
{{container-shell
|
||||
instance=model
|
||||
command=command
|
||||
windows=windows
|
||||
containerName=containerName
|
||||
showProtip=false
|
||||
cols=80
|
||||
rows=24
|
||||
dismiss=(action "cancel")
|
||||
disconncted=(action "cancel")
|
||||
instance=model
|
||||
command=command
|
||||
windows=windows
|
||||
containerName=containerName
|
||||
showProtip=false
|
||||
cols=80
|
||||
rows=24
|
||||
dismiss=(action "cancel")
|
||||
disconncted=(action "cancel")
|
||||
}}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,15 +1,16 @@
|
|||
import { next } from '@ember/runloop';
|
||||
import { set, get, observer } from '@ember/object';
|
||||
import { set, setProperties, get, observer } from '@ember/object';
|
||||
import { inject as service } from '@ember/service';
|
||||
import Component from '@ember/component';
|
||||
import Util from 'ui/utils/util';
|
||||
import { alternateLabel } from 'ui/utils/platform';
|
||||
import layout from './template';
|
||||
import AnsiUp from 'npm:ansi_up';
|
||||
import C from 'ui/utils/constants';
|
||||
|
||||
const LINES = 500;
|
||||
|
||||
var AnsiUp = null;
|
||||
|
||||
export default Component.extend({
|
||||
scope: service(),
|
||||
prefs: service(),
|
||||
|
|
@ -30,19 +31,15 @@ export default Component.extend({
|
|||
init() {
|
||||
this._super(...arguments);
|
||||
|
||||
const containerName = get(this, 'containerName') || get(this, 'instance.containers.firstObject.name');
|
||||
const wrapLines = !!get(this, `prefs.${ C.PREFS.WRAP_LINES }`);
|
||||
if (AnsiUp) {
|
||||
this._bootstrap();
|
||||
} else {
|
||||
import('ansi_up').then( (module) => {
|
||||
AnsiUp = module.default;
|
||||
|
||||
set(this, 'wrapLines', wrapLines);
|
||||
set(this, 'containerName', containerName);
|
||||
|
||||
const followTimer = setInterval(() => {
|
||||
if ( get(this, 'isFollow') ) {
|
||||
this.send('scrollToBottom');
|
||||
}
|
||||
}, 1000);
|
||||
|
||||
set(this, 'followTimer', followTimer);
|
||||
this._bootstrap();
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
didInsertElement() {
|
||||
|
|
@ -114,6 +111,25 @@ export default Component.extend({
|
|||
set(this, `prefs.${ C.PREFS.WRAP_LINES }`, get(this, 'wrapLines'));
|
||||
}),
|
||||
|
||||
_bootstrap() {
|
||||
setProperties(this, {
|
||||
wrapLines: !!get(this, `prefs.${ C.PREFS.WRAP_LINES }`),
|
||||
containerName: get(this, 'containerName') || get(this, 'instance.containers.firstObject.name'),
|
||||
})
|
||||
|
||||
this._initTimer();
|
||||
},
|
||||
|
||||
_initTimer() {
|
||||
const followTimer = setInterval(() => {
|
||||
if ( get(this, 'isFollow') ) {
|
||||
this.send('scrollToBottom');
|
||||
}
|
||||
}, 1000);
|
||||
|
||||
set(this, 'followTimer', followTimer);
|
||||
},
|
||||
|
||||
exec() {
|
||||
var instance = get(this, 'instance');
|
||||
const clusterId = get(this, 'scope.currentCluster.id');
|
||||
|
|
@ -143,7 +159,7 @@ export default Component.extend({
|
|||
};
|
||||
|
||||
socket.onmessage = (message) => {
|
||||
let ansiup = new AnsiUp.default;
|
||||
let ansiup = new AnsiUp;
|
||||
|
||||
set(this, 'status', 'connected');
|
||||
const data = AWS.util.base64.decode(message.data).toString();
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import { isSafari } from 'ui/utils/platform';
|
|||
import { evaluate } from 'shared/utils/evaluate';
|
||||
import { inject as service } from '@ember/service';
|
||||
import layout from './template';
|
||||
import YAML from 'yamljs';
|
||||
|
||||
const HIDDEN = 'Hidden';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
import { isArray } from '@ember/array';
|
||||
import TextField from '@ember/component/text-field';
|
||||
import ShellQuote from 'npm:shell-quote'
|
||||
import layout from './template';
|
||||
|
||||
const ShellQuote = window.ShellQuote;
|
||||
|
||||
export const OPS = ['||', '&&', ';;', '|&', '&', ';', '(', ')', '|', '<', '>'];
|
||||
export function reop(xs) {
|
||||
return xs.map((s) => {
|
||||
|
|
|
|||
|
|
@ -3,9 +3,11 @@ import { computed, get, set } from '@ember/object';
|
|||
import { isSafari } from 'ui/utils/platform';
|
||||
import { next } from '@ember/runloop';
|
||||
import { inject as service } from '@ember/service';
|
||||
import json2yaml from 'npm:json2yaml';
|
||||
import dotObject from 'npm:dot-object';
|
||||
import json2yaml from 'json2yaml';
|
||||
import layout from './template';
|
||||
import YAML from 'yamljs';
|
||||
|
||||
var dotObject = null;
|
||||
|
||||
function convertKey(key) {
|
||||
let out = '';
|
||||
|
|
@ -32,6 +34,17 @@ export default Component.extend({
|
|||
accept: '.yml, .yaml',
|
||||
app: null,
|
||||
|
||||
init() {
|
||||
this._super(...arguments);
|
||||
|
||||
|
||||
if (!dotObject) {
|
||||
import('dot-object').then( (module) => {
|
||||
dotObject = module.default;
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
actions: {
|
||||
upload() {
|
||||
this.$('INPUT[type=file]')[0].click();
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import layout from './template';
|
|||
import {
|
||||
get, set, computed, observer, setProperties
|
||||
} from '@ember/object';
|
||||
import moment from 'moment';
|
||||
|
||||
export default Component.extend(ModalBase, NewOrEdit, {
|
||||
endpointService: service('endpoint'),
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import Component from '@ember/component';
|
|||
import { get, set, observer } from '@ember/object';
|
||||
import { inject as service } from '@ember/service';
|
||||
import CodeMirror from 'codemirror';
|
||||
import jsyaml from 'npm:js-yaml';
|
||||
import jsyaml from 'js-yaml';
|
||||
import ModalBase from 'shared/mixins/modal-base';
|
||||
import layout from './template';
|
||||
import ChildHook from 'shared/mixins/child-hook';
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ import { get, set, computed } from '@ember/object';
|
|||
import Component from '@ember/component';
|
||||
import ModalBase from 'shared/mixins/modal-base';
|
||||
import layout from './template';
|
||||
import jsondiffpatch from 'jsondiffpatch';
|
||||
import moment from 'moment';
|
||||
|
||||
const HIDDEN_FIELDS = ['digest'];
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,9 @@ import Component from '@ember/component';
|
|||
import ModalBase from 'shared/mixins/modal-base';
|
||||
import layout from './template';
|
||||
import C from 'shared/utils/constants';
|
||||
import moment from 'moment';
|
||||
|
||||
import jsondiffpatch from 'jsondiffpatch';
|
||||
|
||||
const HIDDEN_FIELDS = ['created', 'creatorId', 'name', 'ownerReferences', 'removed', 'scale', 'state', 'uuid', 'workloadLabels', 'workloadAnnotations'];
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import C from 'ui/utils/constants';
|
|||
import Util from 'ui/utils/util';
|
||||
import { compare as compareVersion } from 'ui/utils/parse-version';
|
||||
import { task } from 'ember-concurrency';
|
||||
import YAML from 'npm:yamljs';
|
||||
import YAML from 'yamljs';
|
||||
import layout from './template';
|
||||
import { stringifyAnswer } from 'shared/utils/evaluate';
|
||||
import { isEmpty } from '@ember/utils';
|
||||
|
|
|
|||
|
|
@ -4,6 +4,12 @@ import Component from '@ember/component';
|
|||
import { GRADIENT_COLORS } from 'shared/components/svg-gradients/component';
|
||||
import { formatPercent, formatMib, formatKbps }
|
||||
from 'ui/utils/util';
|
||||
import {
|
||||
select,
|
||||
scale,
|
||||
min as d3Min,
|
||||
max as d3Max,
|
||||
} from 'd3';
|
||||
import layout from './template';
|
||||
|
||||
const FORMATTERS = {
|
||||
|
|
@ -20,31 +26,31 @@ export default Component.extend({
|
|||
classNames: ['spark-line'],
|
||||
attributeBindings: ['cssSize:style'],
|
||||
|
||||
data: null,
|
||||
width: null,
|
||||
height: 20,
|
||||
margin: 2,
|
||||
data: null,
|
||||
width: null,
|
||||
height: 20,
|
||||
margin: 2,
|
||||
|
||||
min: 0,
|
||||
min: 0,
|
||||
|
||||
minMax: null, // lower bound on how small automatic max can be
|
||||
max: null, // set an explicit max
|
||||
maxDoubleInital: false, // if true, set max to double the initial non-zero data point
|
||||
scaleDown: false, // if true, max is allowed to go back down. If false it can only go up.
|
||||
|
||||
gradient: null,
|
||||
colorIdx: 0,
|
||||
interpolation: 'basis', // 'step-after',
|
||||
formatter: 'value',
|
||||
gradient: null,
|
||||
colorIdx: 0,
|
||||
interpolation: 'basis', // 'step-after',
|
||||
formatter: 'value',
|
||||
|
||||
svg: null,
|
||||
line: null,
|
||||
dot: null,
|
||||
text: null,
|
||||
textBg: null,
|
||||
x: null,
|
||||
y: null,
|
||||
observedMax: null, // The largest max seen so far
|
||||
svg: null,
|
||||
line: null,
|
||||
dot: null,
|
||||
text: null,
|
||||
textBg: null,
|
||||
x: null,
|
||||
y: null,
|
||||
observedMax: null, // The largest max seen so far
|
||||
|
||||
hasData: function() {
|
||||
if (this.get('data.length') > 0 && !this.get('svg')) {
|
||||
|
|
@ -93,8 +99,8 @@ export default Component.extend({
|
|||
x.domain([0, data.get('length') - 1]);
|
||||
x.range([0, width - margin]);
|
||||
|
||||
var min = this.get('min') === null ? d3.min(data) : this.get('min');
|
||||
var max = this.adjustMax(d3.max(data));
|
||||
var min = this.get('min') === null ? d3Min(data) : this.get('min');
|
||||
var max = this.adjustMax(d3Max(data));
|
||||
|
||||
y.domain([min, max]);
|
||||
y.range([height - margin, margin]);
|
||||
|
|
@ -125,14 +131,14 @@ export default Component.extend({
|
|||
}.observes('data', 'data.[]'),
|
||||
create() {
|
||||
let margin = this.get('margin');
|
||||
var svg = d3.select(this.$()[0])
|
||||
var svg = select(this.$()[0])
|
||||
.attr('transform', `translate(${ margin },${ margin })`);
|
||||
|
||||
this.set('svg', svg);
|
||||
this.set('x', d3.scale.linear());
|
||||
this.set('y', d3.scale.linear());
|
||||
this.set('x', scale.linear());
|
||||
this.set('y', scale.linear());
|
||||
|
||||
var line = d3.svg.line()
|
||||
var line = svg.line()
|
||||
.defined((d) => (typeof d === 'number'))
|
||||
.x((d, i) => this.get('x')(i))
|
||||
.y((d) => this.get('y')(d));
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import Component from '@ember/component';
|
||||
import { select } from 'd3';
|
||||
import layout from './template';
|
||||
|
||||
export const GRADIENT_COLORS = {
|
||||
|
|
@ -12,7 +13,7 @@ export default Component.extend({
|
|||
layout,
|
||||
tagName: '',
|
||||
didInsertElement() {
|
||||
var svg = d3.select('body').append('svg:svg')
|
||||
var svg = select('body').append('svg:svg')
|
||||
.attr('id', 'svg-gradients')
|
||||
.attr('height', '0')
|
||||
.attr('height', '0')
|
||||
|
|
|
|||
|
|
@ -2,6 +2,17 @@ import { get } from '@ember/object';
|
|||
import Route from '@ember/routing/route';
|
||||
|
||||
export default Route.extend({
|
||||
beforeModel() {
|
||||
if (window.ShellQuote) {
|
||||
return;
|
||||
} else {
|
||||
return import('shell-quote').then( (module) => {
|
||||
window.ShellQuote = module.default;
|
||||
|
||||
return module.default;
|
||||
})
|
||||
}
|
||||
},
|
||||
model(params) {
|
||||
const pod = get(this, 'store').find('pod', params.container_id);
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,18 @@ export default Route.extend({
|
|||
clusterStore: service(),
|
||||
globalStore: service(),
|
||||
|
||||
beforeModel() {
|
||||
if (window.Prettycron) {
|
||||
return;
|
||||
} else {
|
||||
return import('prettycron').then( (module) => {
|
||||
window.Prettycron = module;
|
||||
|
||||
return module;
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
model(params/* , transition*/) {
|
||||
var store = get(this, 'store');
|
||||
|
||||
|
|
|
|||
|
|
@ -54,17 +54,17 @@
|
|||
</div>
|
||||
{{else}}
|
||||
{{container/new-edit
|
||||
loggingEnabled=model.loggingEnabled
|
||||
scaleMode=dataMap.scaleMode
|
||||
isUpgrade=dataMap.isUpgrade
|
||||
service=dataMap.workload
|
||||
launchConfig=dataMap.container
|
||||
launchConfigIndex=launchConfigIndex
|
||||
done=(action 'done')
|
||||
cancel=(action 'cancel')
|
||||
editing=false
|
||||
primaryResource=dataMap.workload
|
||||
primaryService=dataMap.workload
|
||||
allHosts=dataMap.allHosts
|
||||
loggingEnabled=model.loggingEnabled
|
||||
scaleMode=dataMap.scaleMode
|
||||
isUpgrade=dataMap.isUpgrade
|
||||
service=dataMap.workload
|
||||
launchConfig=dataMap.container
|
||||
launchConfigIndex=launchConfigIndex
|
||||
done=(action 'done')
|
||||
cancel=(action 'cancel')
|
||||
editing=false
|
||||
primaryResource=dataMap.workload
|
||||
primaryService=dataMap.workload
|
||||
allHosts=dataMap.allHosts
|
||||
}}
|
||||
{{/if}}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import Resource from 'ember-api-store/models/resource';
|
||||
import modelMixin from 'logging/mixins/logging-model';
|
||||
import modelMixin from 'ui/mixins/logging-model';
|
||||
|
||||
export default Resource.extend(modelMixin, { type: 'clusterlogging', });
|
||||
|
|
@ -3,6 +3,7 @@ import { inject as service } from '@ember/service';
|
|||
import { get, computed } from '@ember/object';
|
||||
import { hash } from 'rsvp';
|
||||
import C from 'ui/utils/constants';
|
||||
import moment from 'moment';
|
||||
|
||||
export default Resource.extend({
|
||||
growl: service(),
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import { inject as service } from '@ember/service';
|
|||
import Resource from 'ember-api-store/models/resource';
|
||||
import C from 'ui/utils/constants';
|
||||
import { get, computed } from '@ember/object'
|
||||
import Identicon from 'identicon.js';
|
||||
|
||||
var Principal = Resource.extend({
|
||||
intl: service(),
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import Resource from 'ember-api-store/models/resource';
|
||||
import modelMixin from 'logging/mixins/logging-model';
|
||||
import modelMixin from 'ui/mixins/logging-model';
|
||||
|
||||
const ProjectLogging = Resource.extend(modelMixin, { type: 'projectlogging', });
|
||||
|
||||
|
|
@ -3,6 +3,7 @@ import { get, set, computed } from '@ember/object';
|
|||
import { hasMany } from 'ember-api-store/utils/denormalize';
|
||||
import { next } from '@ember/runloop'
|
||||
import Resource from 'ember-api-store/models/resource';
|
||||
import Identicon from 'identicon.js';
|
||||
|
||||
export default Resource.extend({
|
||||
router: service(),
|
||||
|
|
|
|||
|
|
@ -12,18 +12,17 @@ export default Route.extend(VerifyAuth, {
|
|||
|
||||
model(params/* , transition */) {
|
||||
if (window.opener && !get(params, 'login')) {
|
||||
let occName = get(params, 'config') ? `security.authentication.${ get(params, 'config') }` : `security.authentication.github`;
|
||||
let openerController = window.opener.lc(occName);
|
||||
let openerStore = get(openerController, 'globalStore');
|
||||
let qp = get(params, 'config') || get(params, 'authProvider');
|
||||
let type = `${ qp }Config`;
|
||||
let config = openerStore.getById(type, qp);
|
||||
let gh = get(this, 'github');
|
||||
let stateMsg = 'Authorization state did not match, please try again.';
|
||||
let openersGithub = window.opener.ls('github');
|
||||
let openerStore = window.opener.ls('globalStore');
|
||||
let qp = get(params, 'config') || get(params, 'authProvider');
|
||||
let type = `${ qp }Config`;
|
||||
let config = openerStore.getById(type, qp);
|
||||
let gh = get(this, 'github');
|
||||
let stateMsg = 'Authorization state did not match, please try again.';
|
||||
|
||||
if (get(params, 'config') === 'github') {
|
||||
return gh.testConfig(config).then((resp) => {
|
||||
gh.authorize(resp, openerController.get('github.state'));
|
||||
gh.authorize(resp, openersGithub.get('state'));
|
||||
})
|
||||
.catch((err) => {
|
||||
this.send('gotError', err);
|
||||
|
|
@ -37,8 +36,7 @@ export default Route.extend(VerifyAuth, {
|
|||
}
|
||||
|
||||
if (get(params, 'code')) {
|
||||
// TODO see if session.githubState works here
|
||||
if (openerController.get('github').stateMatches(get(params, 'state'))) {
|
||||
if (openersGithub.stateMatches(get(params, 'state'))) {
|
||||
reply(params.error_description, params.code);
|
||||
} else {
|
||||
reply(stateMsg);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,18 @@ import { hash } from 'rsvp';
|
|||
import Route from '@ember/routing/route';
|
||||
|
||||
export default Route.extend({
|
||||
beforeModel() {
|
||||
if (window.ShellQuote) {
|
||||
return;
|
||||
} else {
|
||||
return import('shell-quote').then( (module) => {
|
||||
window.ShellQuote = module.default;
|
||||
|
||||
return module.default;
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
model(params) {
|
||||
return hash({ workload: this.get('store').find('workload', params.workload_id), }).then((hash) => EmberObject.create(hash));
|
||||
},
|
||||
|
|
|
|||
|
|
@ -62,11 +62,11 @@ module.exports = function(environment) {
|
|||
|
||||
|
||||
minifyCSS: {
|
||||
enabled: false
|
||||
enabled: false
|
||||
},
|
||||
|
||||
minifyJS: {
|
||||
enabled: false
|
||||
enabled: false
|
||||
},
|
||||
|
||||
contentSecurityPolicy: {
|
||||
|
|
@ -79,7 +79,8 @@ module.exports = function(environment) {
|
|||
'frame-src': "'self' releases.rancher.com",
|
||||
|
||||
// Allow connect to anywhere, for console and event stream socket
|
||||
'connect-src': '*'
|
||||
'connect-src': '*',
|
||||
'unsafe-eval': "'self' releases.rancher.com"
|
||||
},
|
||||
|
||||
APP: {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
/* eslint-env node */
|
||||
const EmberApp = require('ember-cli/lib/broccoli/ember-app');
|
||||
const env = EmberApp.env();
|
||||
const webpack = require('webpack');
|
||||
|
||||
module.exports = function(defaults) {
|
||||
// Pull in a few useful environment settings for index.html to use
|
||||
|
|
@ -16,6 +17,9 @@ module.exports = function(defaults) {
|
|||
});
|
||||
|
||||
var app = new EmberApp(defaults, {
|
||||
babel: {
|
||||
plugins: [ require('ember-auto-import/babel-plugin') ]
|
||||
},
|
||||
'ember-cli-babel': { includePolyfill: true, },
|
||||
storeConfigInMeta: false,
|
||||
inlineContent: inline,
|
||||
|
|
@ -32,7 +36,34 @@ module.exports = function(defaults) {
|
|||
}
|
||||
}
|
||||
},
|
||||
nodeAssets: { 'xterm': { import: ['dist/xterm.css'] } },
|
||||
autoImport: {
|
||||
alias: {
|
||||
'xterm-fit': 'node_modules/xterm/dist/addons/fit/fit.js'
|
||||
},
|
||||
webpack: {
|
||||
externals: { jquery: 'jQuery' },
|
||||
node: {
|
||||
fs: 'empty'
|
||||
},
|
||||
plugins: [
|
||||
new webpack.EnvironmentPlugin({
|
||||
LATER_COV: false
|
||||
}),
|
||||
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
|
||||
],
|
||||
}
|
||||
},
|
||||
|
||||
assetLoader: {
|
||||
generateURI(filePath) {
|
||||
// we need to slice the trailing slash off baseAssets because filePath has a leading slash
|
||||
const url = appConfig.baseAssets.slice(0, -1);
|
||||
|
||||
// console.log('file path: ', `${ url }${ filePath }`);
|
||||
return `${ url }${ filePath }`;
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
SRI: { enabled: false, },
|
||||
|
||||
|
|
@ -70,44 +101,24 @@ module.exports = function(defaults) {
|
|||
// 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.
|
||||
app.import('node_modules/async/dist/async.js');
|
||||
app.import('node_modules/d3/d3.js');
|
||||
app.import('node_modules/identicon.js/pnglib.js');
|
||||
app.import('node_modules/identicon.js/identicon.js');
|
||||
app.import('node_modules/jgrowl/jquery.jgrowl.css');
|
||||
app.import('node_modules/jgrowl/jquery.jgrowl.js');
|
||||
app.import('node_modules/jsondiffpatch/public/build/jsondiffpatch.js');
|
||||
app.import('node_modules/jsondiffpatch/public/build/jsondiffpatch-formatters.js');
|
||||
app.import('node_modules/jszip/dist/jszip.js')
|
||||
app.import('node_modules/moment/moment.js');
|
||||
app.import('node_modules/prismjs/prism.js');
|
||||
app.import('node_modules/prismjs/components/prism-bash.js');
|
||||
app.import('node_modules/prismjs/components/prism-yaml.js');
|
||||
app.import('node_modules/prismjs/components/prism-json.js');
|
||||
app.import('node_modules/ember-source/dist/ember-template-compiler.js');
|
||||
app.import('node_modules/ipaddr.js/lib/ipaddr.js');
|
||||
app.import('node_modules/xterm/dist/xterm.js');
|
||||
app.import('node_modules/xterm/dist/addons/fit/fit.js', {
|
||||
using: [{
|
||||
transformation: 'amd',
|
||||
as: 'xterm-fit'
|
||||
}]
|
||||
});
|
||||
app.import('node_modules/jsondiffpatch/dist/formatters-styles/html.css');
|
||||
app.import('node_modules/xterm/dist/xterm.css');
|
||||
app.import('vendor/icons/style.css');
|
||||
|
||||
// app.import('vendor/aws-sdk-ec2.js');
|
||||
app.import('node_modules/ember-source/dist/ember-template-compiler.js');
|
||||
app.import('vendor/aws-sdk-ec2-iam-2.279.1.min.js');
|
||||
app.import('vendor/ember-shortcuts.js');
|
||||
app.import('vendor/file-saver/fileSaver.mini.js');
|
||||
app.import('vendor/aliyun-sdk.js');
|
||||
|
||||
app.import('vendor/icons/fonts/rancher-icons.svg', { destDir: 'assets/fonts/' });
|
||||
app.import('vendor/icons/fonts/rancher-icons.ttf', { destDir: 'assets/fonts/' });
|
||||
app.import('vendor/icons/fonts/rancher-icons.woff', { destDir: 'assets/fonts/' });
|
||||
app.import('vendor/icons/style.css');
|
||||
app.import('vendor/json-sanitizer/json-sanitizer.js');
|
||||
app.import('vendor/prompt/prompt-v1-latin-300.woff', { destDir: 'assets/fonts/' });
|
||||
app.import('vendor/prompt/prompt-v1-latin-300.woff2', { destDir: 'assets/fonts/' });
|
||||
app.import('vendor/prompt/prompt-v1-latin-600.woff', { destDir: 'assets/fonts/' });
|
||||
app.import('vendor/prompt/prompt-v1-latin-600.woff2', { destDir: 'assets/fonts/' });
|
||||
app.import('vendor/aliyun-sdk.js');
|
||||
|
||||
return app.toTree();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import { get, set, observer, setProperties } from '@ember/object';
|
||||
import Component from '@ember/component'
|
||||
import moment from 'moment';
|
||||
|
||||
export default Component.extend({
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-env node */
|
||||
/* eslint-disable */
|
||||
const webpack = require('webpack');
|
||||
|
||||
'use strict';
|
||||
|
||||
const EngineAddon = require('ember-engines/lib/engine-addon');
|
||||
|
|
@ -6,9 +8,12 @@ const EngineAddon = require('ember-engines/lib/engine-addon');
|
|||
module.exports = EngineAddon.extend({
|
||||
name: 'alert',
|
||||
|
||||
lazyLoading: { enabled: false },
|
||||
lazyLoading: { enabled: true },
|
||||
|
||||
isDevelopingAddon() {
|
||||
return true;
|
||||
},
|
||||
options: {
|
||||
babel: { plugins: [require('ember-auto-import/babel-plugin')] }
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -5,13 +5,11 @@
|
|||
"ember-engine"
|
||||
],
|
||||
"dependencies": {
|
||||
"ember-basic-dropdown": "*",
|
||||
"ember-math-helpers": "*",
|
||||
"ember-auto-import": "*",
|
||||
"ember-truth-helpers": "*",
|
||||
"ember-intl": "*",
|
||||
"ember-cli-htmlbars": "*",
|
||||
"ember-cli-babel": "*",
|
||||
"ember-cli-clipboard": "*",
|
||||
"ember-href-to": "*"
|
||||
},
|
||||
"ember-addon": {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-env node */
|
||||
/* eslint-disable */
|
||||
const webpack = require('webpack');
|
||||
|
||||
'use strict';
|
||||
|
||||
const EngineAddon = require('ember-engines/lib/engine-addon');
|
||||
|
|
@ -6,9 +8,12 @@ const EngineAddon = require('ember-engines/lib/engine-addon');
|
|||
module.exports = EngineAddon.extend({
|
||||
name: 'global-admin',
|
||||
|
||||
lazyLoading: { enabled: false },
|
||||
lazyLoading: { enabled: true },
|
||||
|
||||
isDevelopingAddon() {
|
||||
return true;
|
||||
},
|
||||
options: {
|
||||
babel: { plugins: [require('ember-auto-import/babel-plugin')] }
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -5,20 +5,10 @@
|
|||
"ember-engine"
|
||||
],
|
||||
"dependencies": {
|
||||
"async": "*",
|
||||
"jgrowl": "*",
|
||||
"momentjs": "*",
|
||||
"card": "*",
|
||||
"d3": "*",
|
||||
"ember-basic-dropdown": "*",
|
||||
"ember-math-helpers": "*",
|
||||
"ember-truth-helpers": "*",
|
||||
"ember-auto-import": "*",
|
||||
"ember-cli-htmlbars": "*",
|
||||
"ember-cli-babel": "*",
|
||||
"ember-cli-clipboard": "*",
|
||||
"ember-href-to": "*",
|
||||
"ember-concurrency": "*",
|
||||
"marked": "*"
|
||||
"ember-cli-babel": "*"
|
||||
},
|
||||
"ember-addon": {
|
||||
"paths": [
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import Component from '@ember/component'
|
||||
import { alias } from '@ember/object/computed'
|
||||
import { get, set, computed, setProperties } from '@ember/object'
|
||||
import moment from 'moment';
|
||||
|
||||
const SEVERITIES = [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import Mixin from '@ember/object/mixin';
|
|||
import { inject as service } from '@ember/service';
|
||||
import { alias } from '@ember/object/computed';
|
||||
import { get, set } from '@ember/object'
|
||||
import moment from 'moment';
|
||||
|
||||
export default Mixin.create({
|
||||
scope: service(),
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
export { default } from 'logging/models/clusterlogging';
|
||||
|
|
@ -1 +0,0 @@
|
|||
export { default } from 'logging/models/projectlogging';
|
||||
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-env node */
|
||||
/* eslint-disable */
|
||||
const webpack = require('webpack');
|
||||
|
||||
'use strict';
|
||||
|
||||
const EngineAddon = require('ember-engines/lib/engine-addon');
|
||||
|
|
@ -6,9 +8,12 @@ const EngineAddon = require('ember-engines/lib/engine-addon');
|
|||
module.exports = EngineAddon.extend({
|
||||
name: 'logging',
|
||||
|
||||
lazyLoading: { enabled: false },
|
||||
lazyLoading: { enabled: true },
|
||||
|
||||
isDevelopingAddon() {
|
||||
return true;
|
||||
},
|
||||
options: {
|
||||
babel: { plugins: [require('ember-auto-import/babel-plugin')] }
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -5,13 +5,12 @@
|
|||
"ember-engine"
|
||||
],
|
||||
"dependencies": {
|
||||
"ember-auto-import": "*",
|
||||
"ember-basic-dropdown": "*",
|
||||
"ember-math-helpers": "*",
|
||||
"ember-truth-helpers": "*",
|
||||
"ember-intl": "*",
|
||||
"ember-cli-htmlbars": "*",
|
||||
"ember-cli-babel": "*",
|
||||
"ember-cli-clipboard": "*",
|
||||
"ember-href-to": "*"
|
||||
},
|
||||
"ember-addon": {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-env node */
|
||||
/* eslint-disable */
|
||||
const webpack = require('webpack');
|
||||
|
||||
'use strict';
|
||||
|
||||
const EngineAddon = require('ember-engines/lib/engine-addon');
|
||||
|
|
@ -6,9 +8,12 @@ const EngineAddon = require('ember-engines/lib/engine-addon');
|
|||
module.exports = EngineAddon.extend({
|
||||
name: 'login',
|
||||
|
||||
lazyLoading: { enabled: false },
|
||||
lazyLoading: { enabled: true },
|
||||
|
||||
isDevelopingAddon() {
|
||||
return true;
|
||||
},
|
||||
options: {
|
||||
babel: { plugins: [require('ember-auto-import/babel-plugin')] }
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -5,11 +5,9 @@
|
|||
"ember-engine"
|
||||
],
|
||||
"dependencies": {
|
||||
"ember-basic-dropdown": "*",
|
||||
"ember-truth-helpers": "*",
|
||||
"ember-auto-import": "*",
|
||||
"ember-cli-htmlbars": "*",
|
||||
"ember-cli-babel": "*",
|
||||
"ember-cli-clipboard": "*"
|
||||
"ember-cli-babel": "*"
|
||||
},
|
||||
"ember-addon": {
|
||||
"paths": [
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import { get, set } from '@ember/object';
|
|||
import { ajaxPromise } from 'ember-api-store/utils/ajax-promise';
|
||||
import Component from '@ember/component';
|
||||
import layout from './template';
|
||||
import { eachSeries } from 'async';
|
||||
|
||||
let RANCHER_GROUP = 'rancher-machine';
|
||||
let DEFAULT_TEMPLATE = 'Linux Ubuntu 16.04 LTS 64-bit';
|
||||
|
|
@ -251,7 +252,7 @@ export default Component.extend(Driver, {
|
|||
protocol: 'TCP'
|
||||
});
|
||||
|
||||
return async.eachSeries(
|
||||
return eachSeries(
|
||||
RANCHER_INGRESS_RULES,
|
||||
(item, cb) => {
|
||||
item.securitygroupid =
|
||||
|
|
@ -464,4 +465,4 @@ export default Component.extend(Driver, {
|
|||
true
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-env node */
|
||||
/* eslint-disable */
|
||||
const webpack = require('webpack');
|
||||
|
||||
'use strict';
|
||||
|
||||
const EngineAddon = require('ember-engines/lib/engine-addon');
|
||||
|
|
@ -6,9 +8,12 @@ const EngineAddon = require('ember-engines/lib/engine-addon');
|
|||
module.exports = EngineAddon.extend({
|
||||
name: 'nodes',
|
||||
|
||||
lazyLoading: { enabled: false },
|
||||
lazyLoading: { enabled: true },
|
||||
|
||||
isDevelopingAddon() {
|
||||
return true;
|
||||
},
|
||||
options: {
|
||||
babel: { plugins: [require('ember-auto-import/babel-plugin')] }
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -5,20 +5,9 @@
|
|||
"ember-engine"
|
||||
],
|
||||
"dependencies": {
|
||||
"async": "*",
|
||||
"jgrowl": "*",
|
||||
"momentjs": "*",
|
||||
"card": "*",
|
||||
"d3": "*",
|
||||
"ember-basic-dropdown": "*",
|
||||
"ember-math-helpers": "*",
|
||||
"ember-truth-helpers": "*",
|
||||
"ember-auto-import": "*",
|
||||
"ember-cli-htmlbars": "*",
|
||||
"ember-cli-babel": "*",
|
||||
"ember-cli-clipboard": "*",
|
||||
"ember-href-to": "*",
|
||||
"ember-concurrency": "*",
|
||||
"marked": "*"
|
||||
"ember-cli-babel": "*"
|
||||
},
|
||||
"ember-addon": {
|
||||
"paths": [
|
||||
|
|
|
|||
|
|
@ -21,11 +21,12 @@
|
|||
</div>
|
||||
<div class="row mb-10">
|
||||
{{input-yaml
|
||||
showUpload=false
|
||||
showDownload=false
|
||||
canChangeName=false
|
||||
value=config
|
||||
autoResize=true
|
||||
showUpload=false
|
||||
showDownload=false
|
||||
canChangeName=false
|
||||
value=config
|
||||
autoResize=true
|
||||
loading=loading
|
||||
}}
|
||||
</div>
|
||||
{{copy-to-clipboard tooltipText="" buttonText="copyToClipboard.tooltip" clipboardText=config class="with-clip"}}
|
||||
|
|
|
|||
|
|
@ -111,6 +111,9 @@ export default Component.extend({
|
|||
promptDisable() {
|
||||
set(this, 'confirmDisable', true);
|
||||
later(this, function() {
|
||||
if ( this.isDestroyed || this.isDestroying ) {
|
||||
return;
|
||||
}
|
||||
set(this, 'confirmDisable', false);
|
||||
}, 10000);
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
import Helper from '@ember/component/helper';
|
||||
import moment from 'moment';
|
||||
|
||||
|
||||
export function dateDuration(params) {
|
||||
let time = moment.duration(params[0]);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-env node */
|
||||
/* eslint-disable */
|
||||
const webpack = require('webpack');
|
||||
|
||||
'use strict';
|
||||
|
||||
const EngineAddon = require('ember-engines/lib/engine-addon');
|
||||
|
|
@ -6,9 +8,13 @@ const EngineAddon = require('ember-engines/lib/engine-addon');
|
|||
module.exports = EngineAddon.extend({
|
||||
name: 'pipeline',
|
||||
|
||||
lazyLoading: { enabled: false },
|
||||
lazyLoading: { enabled: true },
|
||||
|
||||
isDevelopingAddon() {
|
||||
return true;
|
||||
},
|
||||
|
||||
options: {
|
||||
babel: { plugins: [require('ember-auto-import/babel-plugin')] }
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -5,22 +5,15 @@
|
|||
"ember-engine"
|
||||
],
|
||||
"dependencies": {
|
||||
"ember-basic-dropdown": "*",
|
||||
"ember-math-helpers": "*",
|
||||
"ember-truth-helpers": "*",
|
||||
"ember-auto-import": "*",
|
||||
"ember-intl": "*",
|
||||
"ember-cli": "*",
|
||||
"ember-cli-htmlbars": "*",
|
||||
"ember-cli-babel": "*",
|
||||
"ember-cli-clipboard": "*",
|
||||
"ember-href-to": "*",
|
||||
"ember-browserify": "*",
|
||||
"ember-cli-babel": "*",
|
||||
"ember-cli-htmlbars": "*",
|
||||
"ember-drag-drop": "*",
|
||||
"ember-intl": "*",
|
||||
"ember-truth-helpers": "*",
|
||||
"prettycron": "*"
|
||||
"ember-drag-drop": "*"
|
||||
},
|
||||
"ember-addon": {
|
||||
"paths": [
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import layout from './template';
|
|||
import { inject as service } from '@ember/service';
|
||||
import { hash } from 'rsvp';
|
||||
import { on } from '@ember/object/evented';
|
||||
import ipaddr from 'ipaddr.js';
|
||||
|
||||
import {
|
||||
sizes,
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ import { underlineToCamel, removeEmpty, keysToCamel, validateEndpoint } from 'sh
|
|||
import { validateHostname } from 'ember-api-store/utils/validate';
|
||||
|
||||
import C from 'shared/utils/constants';
|
||||
import YAML from 'npm:yamljs';
|
||||
import json2yaml from 'npm:json2yaml';
|
||||
import YAML from 'yamljs';
|
||||
import json2yaml from 'json2yaml';
|
||||
import layout from './template';
|
||||
import { resolve } from 'rsvp';
|
||||
import { isEmpty } from '@ember/utils';
|
||||
|
|
|
|||
|
|
@ -1,6 +1,10 @@
|
|||
import Component from '@ember/component';
|
||||
import layout from './template';
|
||||
import { observer } from '@ember/object'
|
||||
import prismjs from 'prismjs';
|
||||
import 'prismjs/components/prism-bash';
|
||||
import 'prismjs/components/prism-yaml';
|
||||
import 'prismjs/components/prism-json';
|
||||
|
||||
export default Component.extend({
|
||||
layout,
|
||||
|
|
@ -14,6 +18,7 @@ export default Component.extend({
|
|||
classNameBindings: ['languageClass', 'hide:hide', 'constrained:constrained'],
|
||||
|
||||
highlighted: null,
|
||||
|
||||
didReceiveAttrs() {
|
||||
this.highlightedChanged();
|
||||
},
|
||||
|
|
@ -21,8 +26,9 @@ export default Component.extend({
|
|||
highlightedChanged: observer('language', 'code', function() {
|
||||
var lang = this.get('language');
|
||||
|
||||
this.set('highlighted', Prism.highlight(this.get('code') || '', Prism.languages[lang], lang));
|
||||
this.set('highlighted', prismjs.highlight(this.get('code') || '', prismjs.languages[lang], lang));
|
||||
}),
|
||||
|
||||
languageClass: function() {
|
||||
var lang = this.get('language');
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import Component from '@ember/component';
|
|||
import { alternateLabel } from 'ui/utils/platform';
|
||||
import ModalBase from 'ui/mixins/modal-base';
|
||||
import layout from './template';
|
||||
import { eachLimit } from 'async';
|
||||
|
||||
|
||||
export default Component.extend(ModalBase, {
|
||||
|
|
@ -26,7 +27,7 @@ export default Component.extend(ModalBase, {
|
|||
confirm() {
|
||||
const resources = get(this, 'resources').slice().reverse();
|
||||
|
||||
async.eachLimit(resources, 5, (resource, cb) => {
|
||||
eachLimit(resources, 5, (resource, cb) => {
|
||||
if ( !resource ) {
|
||||
return cb();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,9 +6,12 @@ import * as fit from 'xterm-fit'
|
|||
import { next } from '@ember/runloop';
|
||||
import layout from './template';
|
||||
import Component from '@ember/component';
|
||||
import Terminal from 'xterm';
|
||||
|
||||
const DEFAULT_COMMAND = ['/bin/sh', '-c', 'TERM=xterm-256color; export TERM; [ -x /bin/bash ] && ([ -x /usr/bin/script ] && /usr/bin/script -q -c "/bin/bash" /dev/null || exec /bin/bash) || exec /bin/sh'];
|
||||
|
||||
// var Terminal = null;
|
||||
|
||||
export default Component.extend(ThrottledResize, {
|
||||
scope: service(),
|
||||
|
||||
|
|
@ -31,9 +34,7 @@ export default Component.extend(ThrottledResize, {
|
|||
init() {
|
||||
this._super(...arguments);
|
||||
|
||||
const containerName = get(this, 'containerName') || get(this, 'instance.containers.firstObject.name');
|
||||
|
||||
set(this, 'containerName', containerName);
|
||||
this._bootstrap();
|
||||
},
|
||||
|
||||
didInsertElement() {
|
||||
|
|
@ -64,6 +65,10 @@ export default Component.extend(ThrottledResize, {
|
|||
return (get(this, 'instance.containers') || []).filterBy('state', 'running');
|
||||
}),
|
||||
|
||||
_bootstrap() {
|
||||
set(this, 'containerName', get(this, 'containerName') || get(this, 'instance.containers.firstObject.name'));
|
||||
},
|
||||
|
||||
fit() {
|
||||
var term = get(this, 'term');
|
||||
var socket = get(this, 'socket');
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import layout from './template';
|
|||
import { inject as service } from '@ember/service';
|
||||
import { get, set, computed } from '@ember/object';
|
||||
import { next } from '@ember/runloop';
|
||||
import Identicon from 'identicon.js';
|
||||
|
||||
let missingPrincipals = [];
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import { Promise as EmberPromise, all } from 'rsvp';
|
|||
import ThrottledResize from 'shared/mixins/throttled-resize';
|
||||
import { downloadFile } from 'shared/utils/download-files';
|
||||
import CodeMirror from 'codemirror';
|
||||
import jsyaml from 'npm:js-yaml';
|
||||
import jsyaml from 'js-yaml';
|
||||
|
||||
export default Component.extend(ThrottledResize, {
|
||||
settings: service(),
|
||||
|
|
@ -39,6 +39,13 @@ export default Component.extend(ThrottledResize, {
|
|||
|
||||
shouldChangeName: true,
|
||||
|
||||
init() {
|
||||
this._super(...arguments);
|
||||
|
||||
// needed for code mirror???
|
||||
window.jsyaml || (window.jsyaml = jsyaml);
|
||||
},
|
||||
|
||||
actions: {
|
||||
click() {
|
||||
this.$('INPUT[type=file]')[0].click();
|
||||
|
|
|
|||
|
|
@ -1,15 +1,32 @@
|
|||
// https://github.com/ef4/ember-browserify#the-workaround
|
||||
import Marked from 'npm:marked'; // eslint-disable-line no-unused-vars
|
||||
import Component from '@ember/component';
|
||||
import layout from './template';
|
||||
|
||||
import { htmlSafe } from '@ember/string';
|
||||
import { get, computed } from '@ember/object';
|
||||
|
||||
var Marked = null;
|
||||
|
||||
export default Component.extend({
|
||||
layout,
|
||||
markdown: null,
|
||||
init() {
|
||||
this._super(...arguments);
|
||||
|
||||
|
||||
if (!Marked) {
|
||||
import('marked').then( (module) => {
|
||||
Marked = module.default;
|
||||
get(this, 'parsedMarkdown');
|
||||
});
|
||||
}
|
||||
},
|
||||
parsedMarkdown: computed('markdown', function() {
|
||||
return htmlSafe(Marked(get(this, 'markdown')));
|
||||
})
|
||||
let out = '';
|
||||
|
||||
if (Marked) {
|
||||
out = htmlSafe(Marked(get(this, 'markdown')));
|
||||
}
|
||||
|
||||
return out;
|
||||
}),
|
||||
|
||||
});
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import { get, set, computed, observer } from '@ember/object';
|
|||
import NewOrEdit from 'ui/mixins/new-or-edit';
|
||||
import { inject as service } from '@ember/service';
|
||||
import CodeMirror from 'codemirror';
|
||||
import jsyaml from 'npm:js-yaml';
|
||||
import jsyaml from 'js-yaml';
|
||||
import ModalBase from 'shared/mixins/modal-base';
|
||||
import fetchYaml from 'shared/utils/fetch-yaml';
|
||||
import layout from './template';
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import { inject as service } from '@ember/service';
|
|||
import { alias } from '@ember/object/computed';
|
||||
import { next } from '@ember/runloop';
|
||||
import C from 'ui/utils/constants';
|
||||
import Identicon from 'identicon.js';
|
||||
|
||||
const BASIC_ROLES = [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import Service, { inject as service } from '@ember/service';
|
||||
// @@TODO@@ - 10-27-17 - move errors to addon
|
||||
import Errors from 'ui/utils/errors';
|
||||
import 'jgrowl';
|
||||
|
||||
export default Service.extend({
|
||||
app: service(),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import Helper from '@ember/component/helper';
|
||||
import moment from 'moment';
|
||||
|
||||
export function dateCalendar(params, options) {
|
||||
let out = moment(params[0]).calendar();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import { helper } from '@ember/component/helper';
|
||||
import { htmlSafe } from '@ember/string';
|
||||
import moment from 'moment';
|
||||
|
||||
export function dateFromNow(params) {
|
||||
let d = moment(params[0]);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { helper } from '@ember/component/helper';
|
||||
import moment from 'moment';
|
||||
|
||||
export function dateCalendar(params) {
|
||||
let date = moment(params[0]);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { helper } from '@ember/component/helper';
|
||||
import moment from 'moment';
|
||||
|
||||
export function dateStr(params, options) {
|
||||
var format = 'MMM DD, YYYY hh:mm:ss A';
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { helper } from '@ember/component/helper';
|
||||
import { htmlSafe } from '@ember/string';
|
||||
import Ember from 'ember';
|
||||
import urlRegex from 'npm:url-regex';
|
||||
import urlRegex from 'url-regex';
|
||||
|
||||
const MAX_LENGTH = 1000;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import Helper from '@ember/component/helper';
|
||||
import Prettycron from 'npm:prettycron';
|
||||
|
||||
const Prettycron = window.Prettycron;
|
||||
|
||||
function prettyCronHelper(param) {
|
||||
if (!param[0]) {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { helper } from '@ember/component/helper';
|
||||
import moment from 'moment';
|
||||
|
||||
export function runTime(params) {
|
||||
var s = moment(params[0]);
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import {
|
|||
import Mixin from '@ember/object/mixin';
|
||||
import C from 'ui/utils/constants';
|
||||
import { inject as service } from '@ember/service';
|
||||
import Semver from 'npm:semver';
|
||||
import Semver from 'semver';
|
||||
|
||||
const NONE = 'none',
|
||||
LOADING = 'loading',
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import C from 'shared/utils/constants';
|
|||
import { minorVersion } from 'shared/utils/parse-version';
|
||||
import { get, set, computed, observer } from '@ember/object';
|
||||
import { isEmpty } from '@ember/utils';
|
||||
import { eachLimit } from 'async';
|
||||
|
||||
export function normalizeName(str) {
|
||||
return str; // .replace(/\./g, C.SETTING.DOT_CHAR).toLowerCase();
|
||||
|
|
@ -106,7 +107,7 @@ export default Service.extend(Evented, {
|
|||
var globalStore = get(this, 'globalStore');
|
||||
|
||||
var promise = new EmberPromise((resolve, reject) => {
|
||||
async.eachLimit(names, 3, (name, cb) => {
|
||||
eachLimit(names, 3, (name, cb) => {
|
||||
globalStore
|
||||
.find('setting', denormalizeName(name))
|
||||
.then(() => {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
import { select } from 'd3';
|
||||
|
||||
export default function initGraph(options) {
|
||||
const {
|
||||
el, r, width, height, margin, fontSize
|
||||
} = getConfig(options);
|
||||
const svg = d3.select(el).append('svg').attr('width', width).attr('height', height);
|
||||
const svg = select(el).append('svg').attr('width', width).attr('height', height);
|
||||
|
||||
const healthyStatus = options.healthy ? 'healthy' : 'unhealthy';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,16 +1,18 @@
|
|||
import fetchYaml from 'shared/utils/fetch-yaml';
|
||||
import { all } from 'rsvp';
|
||||
import { addQueryParam } from 'shared/utils/util';
|
||||
import JSZip from 'jszip';
|
||||
import { saveAs } from 'file-saver';
|
||||
|
||||
export function downloadFile(fileName, content, contentType = 'text/plain;charset=utf-8') {
|
||||
const blob = new Blob([content], { type: contentType });
|
||||
|
||||
window.saveAs(blob, fileName);
|
||||
saveAs(blob, fileName);
|
||||
}
|
||||
|
||||
// [{name: 'file1', file: 'data'}, {name: 'file2', file: 'data2'}]
|
||||
export function generateZip(files) {
|
||||
const zip = new window.JSZip();
|
||||
const zip = new JSZip();
|
||||
|
||||
for ( let i = 0 ; i < files.length ; i++ ) {
|
||||
let file = files[i];
|
||||
|
|
|
|||
|
|
@ -5,6 +5,14 @@ import {
|
|||
formatKbps
|
||||
} from 'shared/utils/util';
|
||||
import initTooltip from 'shared/utils/graph-tooltip';
|
||||
import {
|
||||
min as d3Min,
|
||||
max as d3Max,
|
||||
select as d3Select,
|
||||
scale as d3Scale,
|
||||
svg as d3Svg
|
||||
} from 'd3';
|
||||
|
||||
|
||||
const FORMATTERS = {
|
||||
value: (value) => value,
|
||||
|
|
@ -30,26 +38,26 @@ export default function initGraph(options) {
|
|||
maxPoints, formatter, fields, gradient, interpolate, min, query, interval
|
||||
} = getConfig(options);
|
||||
|
||||
const graph = d3.select(el).append('svg')
|
||||
const graph = d3Select(el).append('svg')
|
||||
.attr('width', width + margin.left + margin.right)
|
||||
.attr('height', height + margin.top + margin.bottom);
|
||||
|
||||
const svg = graph.append('g').attr('transform', `translate(${ margin.left },${ margin.top })`);
|
||||
|
||||
const x = d3.scale.linear().domain([0, maxPoints - 1]).range([0, width]);
|
||||
const y = d3.scale.linear().domain([0, 1]).range([height, 0]);
|
||||
const x = d3Scale.linear().domain([0, maxPoints - 1]).range([0, width]);
|
||||
const y = d3Scale.linear().domain([0, 1]).range([height, 0]);
|
||||
|
||||
const line = d3.svg.line().interpolate(interpolate)
|
||||
const line = d3Svg.line().interpolate(interpolate)
|
||||
.defined((d) => typeof d === 'number')
|
||||
.x((d, i) => x(i))
|
||||
.y((d) => y(d));
|
||||
const area = d3.svg.area().interpolate(interpolate)
|
||||
const area = d3Svg.area().interpolate(interpolate)
|
||||
.defined((d) => typeof d === 'number')
|
||||
.x((d, i) => x(i))
|
||||
.y0(height)
|
||||
.y1((d) => y(d));
|
||||
|
||||
const yAxis = d3.svg.axis().scale(y).orient('left')
|
||||
const yAxis = d3Svg.axis().scale(y).orient('left')
|
||||
.ticks(yTicks)
|
||||
.tickFormat(FORMATTERS[formatter]);
|
||||
const yAxisG = svg.append('g').attr('class', 'y axis').call(yAxis);
|
||||
|
|
@ -202,8 +210,8 @@ function updateAxis(all, params) {
|
|||
if (all.length === 0) {
|
||||
return;
|
||||
}
|
||||
const min = params.min === null ? d3.min(all) : params.min;
|
||||
const max = adjustMax(d3.max(all), params.options);
|
||||
const min = params.min === null ? d3Min(all) : params.min;
|
||||
const max = adjustMax(d3Max(all), params.options);
|
||||
const update = params.y.domain()[0] !== min || params.y.domain()[1] !== max
|
||||
|
||||
params.y.domain([min, max]);
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
import { select } from 'd3';
|
||||
|
||||
export default function initTooltip(options) {
|
||||
const hoverLineGroup = options.svg.append('g')
|
||||
.attr('class', 'hover-line');
|
||||
|
|
@ -10,7 +12,7 @@ export default function initTooltip(options) {
|
|||
|
||||
hoverLine.classed('hide', true);
|
||||
|
||||
const tooltip = d3.select(options.el).append('div')
|
||||
const tooltip = select(options.el).append('div')
|
||||
.attr('class', 'hover-label')
|
||||
.style('opacity', 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import Util from 'shared/utils/util';
|
||||
import Semver from 'npm:semver';
|
||||
import Semver from 'semver';
|
||||
|
||||
export function satisfies(version, range) {
|
||||
// Semver doesn't take padding zeros like 17.03.1
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
import { select, event, svg } from 'd3';
|
||||
|
||||
export default function initGraph(options) {
|
||||
const {
|
||||
el, width, height, margin, thickness, fontSize
|
||||
} = getConfig(options);
|
||||
|
||||
const svg = d3.select(el).append('svg')
|
||||
const svg = select(el).append('svg')
|
||||
.attr('width', width).attr('height', height);
|
||||
|
||||
let value = options.value;
|
||||
|
|
@ -73,10 +75,10 @@ function repaintArc(width, margin, value, thickness, valuePath, maxPath) {
|
|||
}
|
||||
|
||||
function addTooltip() {
|
||||
let tooltip = d3.select('#percent-gauge-tooltip');
|
||||
let tooltip = select('#percent-gauge-tooltip');
|
||||
|
||||
if (tooltip.empty()) {
|
||||
tooltip = d3.select('body').append('div')
|
||||
tooltip = select('body').append('div')
|
||||
.attr('class', 'hover-label')
|
||||
.attr('class', 'percent-gauge-tooltip')
|
||||
.attr('id', 'percent-gauge-tooltip')
|
||||
|
|
@ -176,8 +178,8 @@ function addTicks(svg, tooltip, width, height, margin, ticks, currentValue, thic
|
|||
${ tr }
|
||||
</tbody>
|
||||
</table>`)
|
||||
.style('left', `${ (d3.event.pageX) - 30 }px`)
|
||||
.style('top', `${ (d3.event.pageY) - 30 * (tick.labels.length + 1) }px`);
|
||||
.style('left', `${ (event.pageX) - 30 }px`)
|
||||
.style('top', `${ (event.pageY) - 30 * (tick.labels.length + 1) }px`);
|
||||
}).on('mouseout', () => {
|
||||
tooltip.transition()
|
||||
.duration(500)
|
||||
|
|
@ -232,7 +234,7 @@ function createArc(sa, ea, r, thickness, start = 0) {
|
|||
ea = 2.7 * parseInt(ea, 10) - 135;
|
||||
sa = 2.7 * parseInt(start, 10) - 135;
|
||||
|
||||
return d3.svg.arc()
|
||||
return svg.arc()
|
||||
.outerRadius(r)
|
||||
.innerRadius(r - thickness)
|
||||
.startAngle(d2r(sa))
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
import { formatSi } from './parse-unit';
|
||||
import { isEmpty } from '@ember/utils';
|
||||
import { isArray } from '@ember/array';
|
||||
// import ipaddr from 'ipaddr.js';
|
||||
import ipaddr from 'ipaddr.js';
|
||||
|
||||
export function arrayDiff(a, b) {
|
||||
return a.filter((i) => {
|
||||
|
|
|
|||
|
|
@ -1,2 +1 @@
|
|||
import json2yaml from 'npm:json2yaml'; // eslint-disable-line no-unused-vars
|
||||
export { default } from 'shared/components/cluster-options-rke/component';
|
||||
export { default } from 'shared/components/cluster-options-rke/component';
|
||||
|
|
|
|||
|
|
@ -1,3 +1 @@
|
|||
// https://github.com/ef4/ember-browserify#the-workaround
|
||||
import Terminal from 'npm:xterm'; // eslint-disable-line no-unused-vars
|
||||
export { default } from 'shared/components/container-shell/component';
|
||||
|
|
|
|||
|
|
@ -1,3 +1 @@
|
|||
// https://github.com/ef4/ember-browserify#the-workaround
|
||||
import Marked from 'npm:marked'; // eslint-disable-line no-unused-vars
|
||||
export { default } from 'shared/components/marked-down/component';
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
// https://github.com/ef4/ember-browserify#the-workaround
|
||||
import urlRegex from 'npm:url-regex'; // eslint-disable-line no-unused-vars
|
||||
import urlRegex from 'url-regex'; // eslint-disable-line no-unused-vars
|
||||
export { default } from 'shared/helpers/linkify';
|
||||
|
|
|
|||
|
|
@ -1,3 +1 @@
|
|||
// https://github.com/ef4/ember-browserify#the-workaround
|
||||
import Prettycron from 'npm:prettycron'; // eslint-disable-line no-unused-vars
|
||||
export { default } from 'shared/helpers/pretty-cron';
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
// https://github.com/ef4/ember-browserify#the-workaround
|
||||
import Semver from 'npm:semver'; // eslint-disable-line no-unused-vars
|
||||
export {
|
||||
satisfies, parse, comparePart, compare, minorVersion
|
||||
} from 'shared/utils/parse-version';
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
/* eslint-env node */
|
||||
/* eslint-disable */
|
||||
const webpack = require('webpack');
|
||||
|
||||
'use strict';
|
||||
|
||||
module.exports = {
|
||||
|
|
@ -6,5 +8,25 @@ module.exports = {
|
|||
|
||||
isDevelopingAddon() {
|
||||
return true;
|
||||
},
|
||||
options: {
|
||||
babel: { plugins: [require('ember-auto-import/babel-plugin')] },
|
||||
autoImport: {
|
||||
alias: {
|
||||
'xterm-fit': 'node_modules/xterm/dist/addons/fit/fit.js'
|
||||
},
|
||||
webpack: {
|
||||
externals: { jquery: 'jQuery' },
|
||||
node: {
|
||||
fs: 'empty'
|
||||
},
|
||||
plugins: [
|
||||
new webpack.EnvironmentPlugin({
|
||||
LATER_COV: false
|
||||
}),
|
||||
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
|
||||
],
|
||||
}
|
||||
},
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -4,24 +4,34 @@
|
|||
"ember-addon"
|
||||
],
|
||||
"dependencies": {
|
||||
"ansi_up": "*",
|
||||
"async": "*",
|
||||
"ember-api-store": "*",
|
||||
"ember-auto-import": "*",
|
||||
"ember-basic-dropdown": "*",
|
||||
"ember-math-helpers": "*",
|
||||
"ember-truth-helpers": "*",
|
||||
"ember-cli-babel": "*",
|
||||
"ember-cli-clipboard": "*",
|
||||
"ember-cli-htmlbars": "*",
|
||||
"ember-cli-pagination": "*",
|
||||
"ember-cli-babel": "*",
|
||||
"ember-math-helpers": "*",
|
||||
"ember-truth-helpers": "*",
|
||||
"ember-wormhole": "*",
|
||||
"file-saver": "*",
|
||||
"identicon.js": "*",
|
||||
"ipaddr.js": "*",
|
||||
"ivy-codemirror": "*",
|
||||
"jgrowl": "*",
|
||||
"json2yaml": "*",
|
||||
"jsyaml": "*",
|
||||
"jszip": "*",
|
||||
"liquid-fire": "*",
|
||||
"marked": "*",
|
||||
"prettycron": "*",
|
||||
"prismjs": "*",
|
||||
"semver": "*",
|
||||
"shell-quote": "*",
|
||||
"url-regex": "*",
|
||||
"yamljs": "*",
|
||||
"xterm": "*",
|
||||
"ivy-codemirror": "*",
|
||||
"jsyaml": "*",
|
||||
"dot-object": "*",
|
||||
"json2yaml": "*"
|
||||
"xterm-fit": "*",
|
||||
"yamljs": "*"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
20
package.json
20
package.json
|
|
@ -25,6 +25,7 @@
|
|||
"devDependencies": {
|
||||
"ansi_up": "^2.0.2",
|
||||
"async": "2.1.2",
|
||||
"babel-eslint": "^9.0.0",
|
||||
"broccoli-asset-rev": "^2.7.0",
|
||||
"card": "2.4.0",
|
||||
"d3": "3.5.17",
|
||||
|
|
@ -32,8 +33,8 @@
|
|||
"dotenv": "^6.0.0",
|
||||
"ember-api-store": "2.7.2",
|
||||
"ember-assign-helper": "^0.1.2",
|
||||
"ember-auto-import": "^1.2.13",
|
||||
"ember-basic-dropdown": "^1.0.0",
|
||||
"ember-browserify": "^1.2.0",
|
||||
"ember-cli": "~3.3.0",
|
||||
"ember-cli-app-version": "^3.0.0",
|
||||
"ember-cli-babel": "^6.12.0",
|
||||
|
|
@ -44,7 +45,6 @@
|
|||
"ember-cli-htmlbars-inline-precompile": "^1.0.2",
|
||||
"ember-cli-inject-live-reload": "^1.8.2",
|
||||
"ember-cli-inline-content": "^0.4.0",
|
||||
"ember-cli-node-assets": "^0.2.2",
|
||||
"ember-cli-pagination": "^3.1.1",
|
||||
"ember-cli-qunit": "^4.3.2",
|
||||
"ember-cli-release": "^0.2.9",
|
||||
|
|
@ -57,7 +57,8 @@
|
|||
"ember-concurrency": "^0.8.16",
|
||||
"ember-copy": "^1.0.0",
|
||||
"ember-credit-card": "^2.4.0",
|
||||
"ember-engines": "^0.5.20",
|
||||
"ember-drag-drop": "^0.4.7",
|
||||
"ember-engines": "^0.5.22",
|
||||
"ember-export-application-global": "^2.0.0",
|
||||
"ember-href-to": "^1.13.0",
|
||||
"ember-intl": "^2.31.1",
|
||||
|
|
@ -70,33 +71,34 @@
|
|||
"ember-wormhole": "0.5.2",
|
||||
"eslint-plugin-ember": "^5.2.0",
|
||||
"express": "^4.8.5",
|
||||
"file-saver": "^1.3.8",
|
||||
"forever-agent": "^0.6.1",
|
||||
"glob": "^7.1.2",
|
||||
"http-proxy": "^1.16.2",
|
||||
"identicon.js": "^2.3.2",
|
||||
"ipaddr.js": "^1.8.1",
|
||||
"ivy-codemirror": "^2.1.0",
|
||||
"jgrowl": "~1.4.2",
|
||||
"js-yaml": "^3.12.0",
|
||||
"json2yaml": "^1.1.0",
|
||||
"jsondiffpatch": "^0.2.4",
|
||||
"jsondiffpatch": "^0.3.11",
|
||||
"jszip": "^3.1.5",
|
||||
"liquid-fire": "^0.29.2",
|
||||
"loader.js": "^4.7.0",
|
||||
"marked": "^0.3.15",
|
||||
"moment": "~2.22.1",
|
||||
"prismjs": "^1.14.0",
|
||||
"prettycron": "^0.10.0",
|
||||
"prismjs": "^1.15.0",
|
||||
"qunit-dom": "^0.6.2",
|
||||
"semver": "^5.4.1",
|
||||
"shell-quote": "^1.6.1",
|
||||
"url-regex": "^4.1.1",
|
||||
"xterm": "^3.7.0",
|
||||
"webpack": "^4.12.0",
|
||||
"yamljs": "^0.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"body-parser": "^1.18.2",
|
||||
"ember-drag-drop": "^0.4.7",
|
||||
"ivy-codemirror": "^2.1.0",
|
||||
"mysql": "^2.15.0",
|
||||
"prettycron": "^0.10.0",
|
||||
"request": "^2.83.0",
|
||||
"sendgrid": "^4.7.1",
|
||||
"stripe": "^4.15.0"
|
||||
|
|
|
|||
|
|
@ -1,10 +1,39 @@
|
|||
const propertyOrder = [
|
||||
'service',
|
||||
'controller',
|
||||
'query-params',
|
||||
'attribute',
|
||||
'relationship',
|
||||
'property',
|
||||
'single-line-function',
|
||||
|
||||
'init',
|
||||
'beforeModel',
|
||||
'model',
|
||||
'afterModel',
|
||||
'redirect',
|
||||
'setupController',
|
||||
'resetController',
|
||||
['lifecycle-hook','activate','deactivate','didDestroyElement',
|
||||
'didInsertElement','didReceiveAttrs','didRender','didUpdate',
|
||||
'didUpdateAttrs','renderTemplate','serialize','setupController',
|
||||
'willClearRender','willDestroyElement','willInsertElement','willRender','willUpdate'
|
||||
],
|
||||
|
||||
'actions',
|
||||
'observer',
|
||||
'multi-line-function'
|
||||
];
|
||||
|
||||
module.exports = {
|
||||
env: {
|
||||
embertest: true
|
||||
},
|
||||
parser: 'babel-eslint',
|
||||
parserOptions: {
|
||||
ecmaVersion: 2017,
|
||||
sourceType: "module"
|
||||
sourceType: "module",
|
||||
allowImportExportEverywhere: true
|
||||
},
|
||||
extends: [
|
||||
"eslint:recommended",
|
||||
|
|
@ -12,27 +41,13 @@ module.exports = {
|
|||
],
|
||||
globals: {
|
||||
"$": true,
|
||||
"-Promise": true,
|
||||
"ALY": true,
|
||||
"AWS": true,
|
||||
"AnsiUp": true,
|
||||
"Identicon": true,
|
||||
"Prism": true,
|
||||
"ShellQuote": true,
|
||||
"Stripe": true,
|
||||
"Terminal": true,
|
||||
"Ui": true,
|
||||
"WebSocket": true,
|
||||
"YAML": true,
|
||||
"_": true,
|
||||
"async": true,
|
||||
"commonmark": true,
|
||||
"d3": true,
|
||||
"document": true,
|
||||
"jQuery": true,
|
||||
"jsondiffpatch": true,
|
||||
"md5": true,
|
||||
"moment": true,
|
||||
"navigator": true,
|
||||
"window": true,
|
||||
},
|
||||
|
|
@ -50,12 +65,14 @@ module.exports = {
|
|||
"ember/no-observers": "off",
|
||||
"ember/no-on-calls-in-components": "off",
|
||||
"ember/no-side-effects": "off",
|
||||
"ember/order-in-components": "off",
|
||||
"ember/order-in-controllers": "off",
|
||||
"ember/order-in-models": "off",
|
||||
"ember/order-in-routes": "off",
|
||||
"ember/no-old-shims": "error",
|
||||
"ember/order-in-components": ["error", { order: propertyOrder }],
|
||||
"ember/order-in-controllers": ["error", { order: propertyOrder }],
|
||||
"ember/order-in-models": ["error", { order: propertyOrder }],
|
||||
"ember/order-in-routes": ["error", { order: propertyOrder }],
|
||||
"ember/use-brace-expansion": "off",
|
||||
"ember/use-ember-get-and-set": "off",
|
||||
"ember/new-module-imports": "error",
|
||||
"eqeqeq": "error",
|
||||
"generator-star-spacing": "off",
|
||||
"guard-for-in": "off",
|
||||
|
|
@ -63,7 +80,7 @@ module.exports = {
|
|||
"new-cap": "off",
|
||||
"no-caller": "error",
|
||||
"no-cond-assign": [ "error", "except-parens" ],
|
||||
"no-console": "warn",
|
||||
"no-console": "off",
|
||||
"no-debugger": "warn",
|
||||
"no-empty": "off",
|
||||
"no-eq-null": "error",
|
||||
|
|
@ -79,6 +96,7 @@ module.exports = {
|
|||
|
||||
//stylistic
|
||||
"array-bracket-spacing": "error",
|
||||
"padded-blocks": [ "error", "never" ],
|
||||
"block-spacing": [ "error", "always" ],
|
||||
"brace-style": [ "error", "1tbs" ],
|
||||
"comma-spacing": "error",
|
||||
|
|
@ -99,22 +117,40 @@ module.exports = {
|
|||
} ],
|
||||
"keyword-spacing": "error",
|
||||
"lines-between-class-members": "error",
|
||||
"newline-per-chained-call": "error",
|
||||
"newline-per-chained-call": ["error", { "ignoreChainWithDepth": 4 }],
|
||||
"no-whitespace-before-property": "error",
|
||||
"object-curly-newline": [ "error", {
|
||||
"ObjectExpression": { "multiline": true, "minProperties": 3 },
|
||||
"ObjectPattern": { "multiline": true, "minProperties": 3 },
|
||||
"ImportDeclaration": { "multiline": true, "minProperties": 3 },
|
||||
"ImportDeclaration": { "multiline": true, "minProperties": 5 },
|
||||
"ExportDeclaration": { "multiline": true, "minProperties": 3 }
|
||||
} ],
|
||||
"object-curly-spacing": [ "error", "always" ],
|
||||
"object-property-newline": "error",
|
||||
"padded-blocks": "error",
|
||||
"padding-line-between-statements": [
|
||||
"error",
|
||||
{
|
||||
"blankLine": "always",
|
||||
"prev": "*",
|
||||
"next": "return",
|
||||
},
|
||||
// This configuration would require blank lines after every sequence of variable declarations
|
||||
{
|
||||
blankLine: "always",
|
||||
prev: ["const", "let", "var"],
|
||||
next: "*"
|
||||
},
|
||||
{
|
||||
blankLine: "any",
|
||||
prev: ["const", "let", "var"],
|
||||
next: ["const", "let", "var"]
|
||||
}
|
||||
],
|
||||
quotes: [
|
||||
"error",
|
||||
"single",
|
||||
{
|
||||
"avoidEscape": true,
|
||||
"avoidEscape": true,
|
||||
"allowTemplateLiterals": true
|
||||
},
|
||||
],
|
||||
|
|
@ -128,7 +164,6 @@ module.exports = {
|
|||
"switch-colon-spacing": "error",
|
||||
|
||||
// ECMAScript 6
|
||||
"arrow-body-style": [ "error", "as-needed" ],
|
||||
"arrow-parens": "error",
|
||||
"arrow-spacing": [ "error", { "before": true, "after": true } ],
|
||||
"no-trailing-spaces": "error",
|
||||
|
|
@ -136,7 +171,6 @@ module.exports = {
|
|||
"prefer-arrow-callback": "error",
|
||||
"prefer-template": "error",
|
||||
"rest-spread-spacing": "error",
|
||||
// "sort-imports": "error",
|
||||
"template-curly-spacing": [ "error", "always" ],
|
||||
"yield-star-spacing": [ "error", "both" ],
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
import { run } from '@ember/runloop';
|
||||
|
||||
export default function destroyApp(application) {
|
||||
|
||||
run(application, 'destroy');
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,26 +4,19 @@ import startApp from '../helpers/start-app';
|
|||
import destroyApp from '../helpers/destroy-app';
|
||||
|
||||
export default function(name, options = {}) {
|
||||
|
||||
module(name, {
|
||||
beforeEach() {
|
||||
|
||||
this.application = startApp();
|
||||
|
||||
if (options.beforeEach) {
|
||||
|
||||
return options.beforeEach.apply(this, arguments);
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
afterEach() {
|
||||
|
||||
let afterEach = options.afterEach && options.afterEach.apply(this, arguments);
|
||||
return resolve(afterEach).then(() => destroyApp(this.application));
|
||||
|
||||
return resolve(afterEach).then(() => destroyApp(this.application));
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,17 +4,16 @@ import { merge } from '@ember/polyfills';
|
|||
import { run } from '@ember/runloop';
|
||||
|
||||
export default function startApp(attrs) {
|
||||
|
||||
let attributes = merge({}, config.APP);
|
||||
|
||||
attributes = merge(attributes, attrs); // use defaults, but you can override;
|
||||
|
||||
return run(() => {
|
||||
|
||||
let application = Application.create(attributes);
|
||||
|
||||
application.setupForTesting();
|
||||
application.injectTestHelpers();
|
||||
|
||||
return application;
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
var saveAs=saveAs||function(view){"use strict";if(typeof view==="undefined"||typeof navigator!=="undefined"&&/MSIE [1-9]\./.test(navigator.userAgent)){return}var doc=view.document,get_URL=function(){return view.URL||view.webkitURL||view},save_link=doc.createElementNS("http://www.w3.org/1999/xhtml","a"),can_use_save_link="download"in save_link,click=function(node){var event=new MouseEvent("click");node.dispatchEvent(event)},is_safari=/constructor/i.test(view.HTMLElement)||view.safari,is_chrome_ios=/CriOS\/[\d]+/.test(navigator.userAgent),setImmediate=view.setImmediate||view.setTimeout,throw_outside=function(ex){setImmediate(function(){throw ex},0)},force_saveable_type="application/octet-stream",arbitrary_revoke_timeout=1e3*40,revoke=function(file){var revoker=function(){if(typeof file==="string"){get_URL().revokeObjectURL(file)}else{file.remove()}};setTimeout(revoker,arbitrary_revoke_timeout)},dispatch=function(filesaver,event_types,event){event_types=[].concat(event_types);var i=event_types.length;while(i--){var listener=filesaver["on"+event_types[i]];if(typeof listener==="function"){try{listener.call(filesaver,event||filesaver)}catch(ex){throw_outside(ex)}}}},auto_bom=function(blob){if(/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)){return new Blob([String.fromCharCode(65279),blob],{type:blob.type})}return blob},FileSaver=function(blob,name,no_auto_bom){if(!no_auto_bom){blob=auto_bom(blob)}var filesaver=this,type=blob.type,force=type===force_saveable_type,object_url,dispatch_all=function(){dispatch(filesaver,"writestart progress write writeend".split(" "))},fs_error=function(){if((is_chrome_ios||force&&is_safari)&&view.FileReader){var reader=new FileReader;reader.onloadend=function(){var url=is_chrome_ios?reader.result:reader.result.replace(/^data:[^;]*;/,"data:attachment/file;");var popup=view.open(url,"_blank");if(!popup)view.location.href=url;url=undefined;filesaver.readyState=filesaver.DONE;dispatch_all()};reader.readAsDataURL(blob);filesaver.readyState=filesaver.INIT;return}if(!object_url){object_url=get_URL().createObjectURL(blob)}if(force){view.location.href=object_url}else{var opened=view.open(object_url,"_blank");if(!opened){view.location.href=object_url}}filesaver.readyState=filesaver.DONE;dispatch_all();revoke(object_url)};filesaver.readyState=filesaver.INIT;if(can_use_save_link){object_url=get_URL().createObjectURL(blob);setImmediate(function(){save_link.href=object_url;save_link.download=name;click(save_link);dispatch_all();revoke(object_url);filesaver.readyState=filesaver.DONE},0);return}fs_error()},FS_proto=FileSaver.prototype,saveAs=function(blob,name,no_auto_bom){return new FileSaver(blob,name||blob.name||"download",no_auto_bom)};if(typeof navigator!=="undefined"&&navigator.msSaveOrOpenBlob){return function(blob,name,no_auto_bom){name=name||blob.name||"download";if(!no_auto_bom){blob=auto_bom(blob)}return navigator.msSaveOrOpenBlob(blob,name)}}FS_proto.abort=function(){};FS_proto.readyState=FS_proto.INIT=0;FS_proto.WRITING=1;FS_proto.DONE=2;FS_proto.error=FS_proto.onwritestart=FS_proto.onprogress=FS_proto.onwrite=FS_proto.onabort=FS_proto.onerror=FS_proto.onwriteend=null;return saveAs}(typeof self!=="undefined"&&self||typeof window!=="undefined"&&window||this);
|
||||
Loading…
Reference in New Issue