You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by pr...@apache.org on 2018/02/23 04:54:41 UTC
[01/12] zeppelin git commit: [ZEPPELIN-3245] checkstyle/eslintrc for
zeppelin-web (JavaScript)
Repository: zeppelin
Updated Branches:
refs/heads/master f6ef64f84 -> ea2c94474
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/index.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/index.js b/zeppelin-web/src/index.js
index 4c41336..55d6155 100644
--- a/zeppelin-web/src/index.js
+++ b/zeppelin-web/src/index.js
@@ -13,65 +13,65 @@
*/
// import globally uses css here
-import 'github-markdown-css/github-markdown.css'
+import 'github-markdown-css/github-markdown.css';
-import './app/app.js'
-import './app/app.controller.js'
-import './app/home/home.controller.js'
-import './app/notebook/notebook.controller.js'
+import './app/app.js';
+import './app/app.controller.js';
+import './app/home/home.controller.js';
+import './app/notebook/notebook.controller.js';
-import './app/tabledata/tabledata.js'
-import './app/tabledata/transformation.js'
-import './app/tabledata/pivot.js'
-import './app/tabledata/passthrough.js'
-import './app/tabledata/columnselector.js'
-import './app/tabledata/advanced-transformation.js'
-import './app/visualization/visualization.js'
-import './app/visualization/builtins/visualization-table.js'
-import './app/visualization/builtins/visualization-nvd3chart.js'
-import './app/visualization/builtins/visualization-barchart.js'
-import './app/visualization/builtins/visualization-piechart.js'
-import './app/visualization/builtins/visualization-areachart.js'
-import './app/visualization/builtins/visualization-linechart.js'
-import './app/visualization/builtins/visualization-scatterchart.js'
+import './app/tabledata/tabledata.js';
+import './app/tabledata/transformation.js';
+import './app/tabledata/pivot.js';
+import './app/tabledata/passthrough.js';
+import './app/tabledata/columnselector.js';
+import './app/tabledata/advanced-transformation.js';
+import './app/visualization/visualization.js';
+import './app/visualization/builtins/visualization-table.js';
+import './app/visualization/builtins/visualization-nvd3chart.js';
+import './app/visualization/builtins/visualization-barchart.js';
+import './app/visualization/builtins/visualization-piechart.js';
+import './app/visualization/builtins/visualization-areachart.js';
+import './app/visualization/builtins/visualization-linechart.js';
+import './app/visualization/builtins/visualization-scatterchart.js';
-import './app/jobmanager/jobmanager.component.js'
-import './app/interpreter/interpreter.controller.js'
-import './app/interpreter/interpreter.filter.js'
-import './app/interpreter/interpreter-item.directive.js'
-import './app/interpreter/widget/number-widget.directive.js'
-import './app/credential/credential.controller.js'
-import './app/configuration/configuration.controller.js'
-import './app/notebook/revisions-comparator/revisions-comparator.component.js'
-import './app/notebook/paragraph/paragraph.controller.js'
-import './app/notebook/paragraph/clipboard.controller.js'
-import './app/notebook/paragraph/resizable.directive.js'
-import './app/notebook/paragraph/result/result.controller.js'
-import './app/notebook/paragraph/code-editor/code-editor.directive.js'
-import './app/notebook/save-as/save-as.service.js'
-import './app/notebook/save-as/browser-detect.service.js'
-import './app/notebook/elastic-input/elastic-input.controller.js'
-import './app/notebook/dropdown-input/dropdown-input.directive.js'
-import './app/notebook/note-var-share.service.js'
-import './app/notebook-repository/notebook-repository.controller.js'
-import './app/search/result-list.controller.js'
-import './app/search/search.service.js'
-import './app/helium'
-import './app/helium/helium.service.js'
-import './app/notebook/dynamic-forms/dynamic-forms.directive.js'
-import './components/array-ordering/array-ordering.service.js'
-import './components/navbar/navbar.controller.js'
-import './components/navbar/expand-collapse/expand-collapse.directive.js'
-import './components/note-create/note-create.controller.js'
-import './components/note-create/visible.directive.js'
-import './components/note-import/note-import.controller.js'
-import './components/ng-enter/ng-enter.directive.js'
-import './components/ng-escape/ng-escape.directive.js'
-import './components/websocket/websocket-message.service.js'
-import './components/websocket/websocket-event.factory.js'
-import './components/note-list/note-list.factory.js'
-import './components/base-url/base-url.service.js'
-import './components/login/login.controller.js'
-import './components/note-action/note-action.service.js'
-import './components/note-rename/note-rename.controller.js'
-import './components/note-rename/note-rename.service.js'
+import './app/jobmanager/jobmanager.component.js';
+import './app/interpreter/interpreter.controller.js';
+import './app/interpreter/interpreter.filter.js';
+import './app/interpreter/interpreter-item.directive.js';
+import './app/interpreter/widget/number-widget.directive.js';
+import './app/credential/credential.controller.js';
+import './app/configuration/configuration.controller.js';
+import './app/notebook/revisions-comparator/revisions-comparator.component.js';
+import './app/notebook/paragraph/paragraph.controller.js';
+import './app/notebook/paragraph/clipboard.controller.js';
+import './app/notebook/paragraph/resizable.directive.js';
+import './app/notebook/paragraph/result/result.controller.js';
+import './app/notebook/paragraph/code-editor/code-editor.directive.js';
+import './app/notebook/save-as/save-as.service.js';
+import './app/notebook/save-as/browser-detect.service.js';
+import './app/notebook/elastic-input/elastic-input.controller.js';
+import './app/notebook/dropdown-input/dropdown-input.directive.js';
+import './app/notebook/note-var-share.service.js';
+import './app/notebook-repository/notebook-repository.controller.js';
+import './app/search/result-list.controller.js';
+import './app/search/search.service.js';
+import './app/helium';
+import './app/helium/helium.service.js';
+import './app/notebook/dynamic-forms/dynamic-forms.directive.js';
+import './components/array-ordering/array-ordering.service.js';
+import './components/navbar/navbar.controller.js';
+import './components/navbar/expand-collapse/expand-collapse.directive.js';
+import './components/note-create/note-create.controller.js';
+import './components/note-create/visible.directive.js';
+import './components/note-import/note-import.controller.js';
+import './components/ng-enter/ng-enter.directive.js';
+import './components/ng-escape/ng-escape.directive.js';
+import './components/websocket/websocket-message.service.js';
+import './components/websocket/websocket-event.factory.js';
+import './components/note-list/note-list.factory.js';
+import './components/base-url/base-url.service.js';
+import './components/login/login.controller.js';
+import './components/note-action/note-action.service.js';
+import './components/note-rename/note-rename.controller.js';
+import './components/note-rename/note-rename.service.js';
[04/12] zeppelin git commit: [ZEPPELIN-3245] checkstyle/eslintrc for
zeppelin-web (JavaScript)
Posted by pr...@apache.org.
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/tabledata/advanced-transformation.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/tabledata/advanced-transformation.js b/zeppelin-web/src/app/tabledata/advanced-transformation.js
index 8650de5..7420bed 100644
--- a/zeppelin-web/src/app/tabledata/advanced-transformation.js
+++ b/zeppelin-web/src/app/tabledata/advanced-transformation.js
@@ -12,7 +12,7 @@
* limitations under the License.
*/
-import Transformation from './transformation'
+import Transformation from './transformation';
import {
getCurrentChart, getCurrentChartAxis, getCurrentChartParam,
@@ -23,46 +23,46 @@ import {
removeDuplicatedColumnsInMultiDimensionAxis, applyMaxAxisCount,
isInputWidget, isOptionWidget, isCheckboxWidget, isTextareaWidget, parseParameter,
getTransformer,
-} from './advanced-transformation-util'
+} from './advanced-transformation-util';
-const SETTING_TEMPLATE = 'app/tabledata/advanced-transformation-setting.html'
+const SETTING_TEMPLATE = 'app/tabledata/advanced-transformation-setting.html';
export default class AdvancedTransformation extends Transformation {
constructor(config, spec) {
- super(config)
+ super(config);
- this.columns = [] /** [{ name, index, comment }] */
- this.props = {}
- this.spec = spec
+ this.columns = []; /** [{ name, index, comment }] */
+ this.props = {};
+ this.spec = spec;
- initializeConfig(config, spec)
+ initializeConfig(config, spec);
}
emitConfigChange(conf) {
- conf.chartChanged = false
- conf.parameterChanged = false
- this.emitConfig(conf)
+ conf.chartChanged = false;
+ conf.parameterChanged = false;
+ this.emitConfig(conf);
}
emitChartChange(conf) {
- conf.chartChanged = true
- conf.parameterChanged = false
- this.emitConfig(conf)
+ conf.chartChanged = true;
+ conf.parameterChanged = false;
+ this.emitConfig(conf);
}
emitParameterChange(conf) {
- conf.chartChanged = false
- conf.parameterChanged = true
- this.emitConfig(conf)
+ conf.chartChanged = false;
+ conf.parameterChanged = true;
+ this.emitConfig(conf);
}
getSetting() {
- const self = this /** for closure */
- const configInstance = self.config /** for closure */
+ const self = this; /** for closure */
+ const configInstance = self.config; /** for closure */
if (self.spec.initialized) {
- self.spec.initialized = false
- self.emitConfig(configInstance)
+ self.spec.initialized = false;
+ self.emitConfig(configInstance);
}
return {
@@ -71,148 +71,174 @@ export default class AdvancedTransformation extends Transformation {
config: configInstance,
columns: self.columns,
resetAxisConfig: () => {
- resetAxisConfig(configInstance)
- self.emitChartChange(configInstance)
+ resetAxisConfig(configInstance);
+ self.emitChartChange(configInstance);
},
resetParameterConfig: () => {
- resetParameterConfig(configInstance)
- self.emitParameterChange(configInstance)
+ resetParameterConfig(configInstance);
+ self.emitParameterChange(configInstance);
},
toggleColumnPanel: () => {
- configInstance.panel.columnPanelOpened = !configInstance.panel.columnPanelOpened
- self.emitConfigChange(configInstance)
+ configInstance.panel.columnPanelOpened = !configInstance.panel.columnPanelOpened;
+ self.emitConfigChange(configInstance);
},
toggleParameterPanel: () => {
- configInstance.panel.parameterPanelOpened = !configInstance.panel.parameterPanelOpened
- self.emitConfigChange(configInstance)
+ configInstance.panel.parameterPanelOpened = !configInstance.panel.parameterPanelOpened;
+ self.emitConfigChange(configInstance);
},
getAxisAnnotation: (axisSpec) => {
- let anno = `${axisSpec.name}`
+ let anno = `${axisSpec.name}`;
if (axisSpec.valueType) {
- anno = `${anno} (${axisSpec.valueType})`
+ anno = `${anno} (${axisSpec.valueType})`;
}
- return anno
+ return anno;
},
getAxisTypeAnnotation: (axisSpec) => {
- let anno = ''
+ let anno = '';
- let minAxisCount = axisSpec.minAxisCount
- let maxAxisCount = axisSpec.maxAxisCount
+ let minAxisCount = axisSpec.minAxisCount;
+ let maxAxisCount = axisSpec.maxAxisCount;
if (isSingleDimensionAxis(axisSpec)) {
- maxAxisCount = 1
+ maxAxisCount = 1;
}
- let comment = ''
- if (minAxisCount) { comment = `min: ${minAxisCount}` }
- if (minAxisCount && maxAxisCount) { comment = `${comment}, ` }
- if (maxAxisCount) { comment = `${comment}max: ${maxAxisCount}` }
+ let comment = '';
+ if (minAxisCount) {
+ comment = `min: ${minAxisCount}`;
+ }
+ if (minAxisCount && maxAxisCount) {
+ comment = `${comment}, `;
+ }
+ if (maxAxisCount) {
+ comment = `${comment}max: ${maxAxisCount}`;
+ }
if (comment !== '') {
- anno = `${anno} (${comment})`
+ anno = `${anno} (${comment})`;
}
- return anno
+ return anno;
},
getAxisAnnotationColor: (axisSpec) => {
if (isAggregatorAxis(axisSpec)) {
- return { 'background-color': '#5782bd' }
+ return {'background-color': '#5782bd'};
} else if (isGroupAxis(axisSpec)) {
- return { 'background-color': '#cd5c5c' }
+ return {'background-color': '#cd5c5c'};
} else if (isKeyAxis(axisSpec)) {
- return { 'background-color': '#906ebd' }
+ return {'background-color': '#906ebd'};
} else {
- return { 'background-color': '#62bda9' }
+ return {'background-color': '#62bda9'};
}
},
- useSharedAxis: (chartName) => { return useSharedAxis(configInstance, chartName) },
- isGroupAxis: (axisSpec) => { return isGroupAxis(axisSpec) },
- isKeyAxis: (axisSpec) => { return isKeyAxis(axisSpec) },
- isAggregatorAxis: (axisSpec) => { return isAggregatorAxis(axisSpec) },
- isSingleDimensionAxis: (axisSpec) => { return isSingleDimensionAxis(axisSpec) },
- getSingleDimensionAxis: (axisSpec) => { return getCurrentChartAxis(configInstance)[axisSpec.name] },
+ useSharedAxis: (chartName) => {
+ return useSharedAxis(configInstance, chartName);
+ },
+ isGroupAxis: (axisSpec) => {
+ return isGroupAxis(axisSpec);
+ },
+ isKeyAxis: (axisSpec) => {
+ return isKeyAxis(axisSpec);
+ },
+ isAggregatorAxis: (axisSpec) => {
+ return isAggregatorAxis(axisSpec);
+ },
+ isSingleDimensionAxis: (axisSpec) => {
+ return isSingleDimensionAxis(axisSpec);
+ },
+ getSingleDimensionAxis: (axisSpec) => {
+ return getCurrentChartAxis(configInstance)[axisSpec.name];
+ },
chartChanged: (selected) => {
- configInstance.chart.current = selected
- self.emitChartChange(configInstance)
+ configInstance.chart.current = selected;
+ self.emitChartChange(configInstance);
},
axisChanged: function(e, ui, axisSpec) {
- removeDuplicatedColumnsInMultiDimensionAxis(configInstance, axisSpec)
- applyMaxAxisCount(configInstance, axisSpec)
+ removeDuplicatedColumnsInMultiDimensionAxis(configInstance, axisSpec);
+ applyMaxAxisCount(configInstance, axisSpec);
- self.emitChartChange(configInstance)
+ self.emitChartChange(configInstance);
},
aggregatorChanged: (colIndex, axisSpec, aggregator) => {
if (isSingleDimensionAxis(axisSpec)) {
- getCurrentChartAxis(configInstance)[axisSpec.name].aggr = aggregator
+ getCurrentChartAxis(configInstance)[axisSpec.name].aggr = aggregator;
} else {
- getCurrentChartAxis(configInstance)[axisSpec.name][colIndex].aggr = aggregator
- removeDuplicatedColumnsInMultiDimensionAxis(configInstance, axisSpec)
+ getCurrentChartAxis(configInstance)[axisSpec.name][colIndex].aggr = aggregator;
+ removeDuplicatedColumnsInMultiDimensionAxis(configInstance, axisSpec);
}
- self.emitChartChange(configInstance)
+ self.emitChartChange(configInstance);
},
removeFromAxis: function(colIndex, axisSpec) {
if (isSingleDimensionAxis(axisSpec)) {
- getCurrentChartAxis(configInstance)[axisSpec.name] = null
+ getCurrentChartAxis(configInstance)[axisSpec.name] = null;
} else {
- getCurrentChartAxis(configInstance)[axisSpec.name].splice(colIndex, 1)
+ getCurrentChartAxis(configInstance)[axisSpec.name].splice(colIndex, 1);
}
- self.emitChartChange(configInstance)
+ self.emitChartChange(configInstance);
},
- isInputWidget: function(paramSpec) { return isInputWidget(paramSpec) },
- isCheckboxWidget: function(paramSpec) { return isCheckboxWidget(paramSpec) },
- isOptionWidget: function(paramSpec) { return isOptionWidget(paramSpec) },
- isTextareaWidget: function(paramSpec) { return isTextareaWidget(paramSpec) },
+ isInputWidget: function(paramSpec) {
+ return isInputWidget(paramSpec);
+ },
+ isCheckboxWidget: function(paramSpec) {
+ return isCheckboxWidget(paramSpec);
+ },
+ isOptionWidget: function(paramSpec) {
+ return isOptionWidget(paramSpec);
+ },
+ isTextareaWidget: function(paramSpec) {
+ return isTextareaWidget(paramSpec);
+ },
parameterChanged: (paramSpec) => {
- configInstance.chartChanged = false
- configInstance.parameterChanged = true
- self.emitParameterChange(configInstance)
+ configInstance.chartChanged = false;
+ configInstance.parameterChanged = true;
+ self.emitParameterChange(configInstance);
},
parameterOnKeyDown: function(event, paramSpec) {
- const code = event.keyCode || event.which
+ const code = event.keyCode || event.which;
if (code === 13 && isInputWidget(paramSpec)) {
- self.emitParameterChange(configInstance)
+ self.emitParameterChange(configInstance);
} else if (code === 13 && event.shiftKey && isTextareaWidget(paramSpec)) {
- self.emitParameterChange(configInstance)
+ self.emitParameterChange(configInstance);
}
- event.stopPropagation() /** avoid to conflict with paragraph shortcuts */
+ event.stopPropagation(); /** avoid to conflict with paragraph shortcuts */
},
- }
- }
+ },
+ };
}
transform(tableData) {
- this.columns = tableData.columns /** used in `getSetting` */
+ this.columns = tableData.columns; /** used in `getSetting` */
/** initialize in `transform` instead of `getSetting` because this method is called before */
- serializeSharedAxes(this.config)
+ serializeSharedAxes(this.config);
- const conf = this.config
- const chart = getCurrentChart(conf)
- const axis = getCurrentChartAxis(conf)
- const axisSpecs = getCurrentChartAxisSpecs(conf)
- const param = getCurrentChartParam(conf)
- const paramSpecs = getCurrentChartParamSpecs(conf)
- const parsedParam = parseParameter(paramSpecs, param)
+ const conf = this.config;
+ const chart = getCurrentChart(conf);
+ const axis = getCurrentChartAxis(conf);
+ const axisSpecs = getCurrentChartAxisSpecs(conf);
+ const param = getCurrentChartParam(conf);
+ const paramSpecs = getCurrentChartParamSpecs(conf);
+ const parsedParam = parseParameter(paramSpecs, param);
- let { transformer, column, } = getTransformer(conf, tableData.rows, axisSpecs, axis)
+ let {transformer, column} = getTransformer(conf, tableData.rows, axisSpecs, axis);
return {
chartChanged: conf.chartChanged,
@@ -224,6 +250,6 @@ export default class AdvancedTransformation extends Transformation {
column: column,
transformer: transformer,
- }
+ };
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/tabledata/columnselector.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/tabledata/columnselector.js b/zeppelin-web/src/app/tabledata/columnselector.js
index 9fcf2f1..1998f06 100644
--- a/zeppelin-web/src/app/tabledata/columnselector.js
+++ b/zeppelin-web/src/app/tabledata/columnselector.js
@@ -12,7 +12,7 @@
* limitations under the License.
*/
-import Transformation from './transformation'
+import Transformation from './transformation';
/**
* select columns
@@ -26,55 +26,55 @@ import Transformation from './transformation'
* ]
*/
export default class ColumnselectorTransformation extends Transformation {
- constructor (config, columnSelectorProp) {
- super(config)
- this.props = columnSelectorProp
+ constructor(config, columnSelectorProp) {
+ super(config);
+ this.props = columnSelectorProp;
}
- getSetting () {
- let self = this
- let configObj = self.config
+ getSetting() {
+ let self = this;
+ let configObj = self.config;
return {
template: 'app/tabledata/columnselector_settings.html',
scope: {
config: self.config,
props: self.props,
tableDataColumns: self.tableDataColumns,
- save: function () {
- self.emitConfig(configObj)
+ save: function() {
+ self.emitConfig(configObj);
},
- remove: function (selectorName) {
- configObj[selectorName] = null
- self.emitConfig(configObj)
- }
- }
- }
+ remove: function(selectorName) {
+ configObj[selectorName] = null;
+ self.emitConfig(configObj);
+ },
+ },
+ };
}
/**
* Method will be invoked when tableData or config changes
*/
- transform (tableData) {
- this.tableDataColumns = tableData.columns
- this.removeUnknown()
- return tableData
+ transform(tableData) {
+ this.tableDataColumns = tableData.columns;
+ this.removeUnknown();
+ return tableData;
}
- removeUnknown () {
- let fields = this.config
+ removeUnknown() {
+ let fields = this.config;
for (let f in fields) {
if (fields[f]) {
- let found = false
+ let found = false;
for (let i = 0; i < this.tableDataColumns.length; i++) {
- let a = fields[f]
- let b = this.tableDataColumns[i]
+ let a = fields[f];
+ let b = this.tableDataColumns[i];
if (a.index === b.index && a.name === b.name) {
- found = true
- break
+ found = true;
+ break;
}
}
if (!found && (fields[f] instanceof Object) && !(fields[f] instanceof Array)) {
- fields[f] = null
+ fields[f] = null;
}
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/tabledata/dataset.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/tabledata/dataset.js b/zeppelin-web/src/app/tabledata/dataset.js
index 762e300..ba3ee7d 100644
--- a/zeppelin-web/src/app/tabledata/dataset.js
+++ b/zeppelin-web/src/app/tabledata/dataset.js
@@ -30,7 +30,7 @@ class Dataset {
*/
const DatasetType = Object.freeze({
NETWORK: 'NETWORK',
- TABLE: 'TABLE'
-})
+ TABLE: 'TABLE',
+});
-export {Dataset, DatasetType}
+export {Dataset, DatasetType};
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/tabledata/datasetfactory.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/tabledata/datasetfactory.js b/zeppelin-web/src/app/tabledata/datasetfactory.js
index f2f69c9..6d19a98 100644
--- a/zeppelin-web/src/app/tabledata/datasetfactory.js
+++ b/zeppelin-web/src/app/tabledata/datasetfactory.js
@@ -12,9 +12,9 @@
* limitations under the License.
*/
-import TableData from './tabledata'
-import NetworkData from './networkdata'
-import {DatasetType} from './dataset'
+import TableData from './tabledata';
+import NetworkData from './networkdata';
+import {DatasetType} from './dataset';
/**
* Create table data object from paragraph table type result
@@ -23,11 +23,11 @@ export default class DatasetFactory {
createDataset(datasetType) {
switch (datasetType) {
case DatasetType.NETWORK:
- return new NetworkData()
+ return new NetworkData();
case DatasetType.TABLE:
- return new TableData()
+ return new TableData();
default:
- throw new Error('Dataset type not found')
+ throw new Error('Dataset type not found');
}
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/tabledata/datasetfactory.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/tabledata/datasetfactory.test.js b/zeppelin-web/src/app/tabledata/datasetfactory.test.js
index 0beb137..807456a 100644
--- a/zeppelin-web/src/app/tabledata/datasetfactory.test.js
+++ b/zeppelin-web/src/app/tabledata/datasetfactory.test.js
@@ -12,35 +12,37 @@
* limitations under the License.
*/
-import NetworkData from './networkdata.js'
-import TableData from './tabledata.js'
-import {DatasetType} from './dataset.js'
-import DatasetFactory from './datasetfactory.js'
+import NetworkData from './networkdata.js';
+import TableData from './tabledata.js';
+import {DatasetType} from './dataset.js';
+import DatasetFactory from './datasetfactory.js';
describe('DatasetFactory build', function() {
- let df
+ let df;
beforeAll(function() {
- df = new DatasetFactory()
- })
+ df = new DatasetFactory();
+ });
it('should create a TableData instance', function() {
- let td = df.createDataset(DatasetType.TABLE)
- expect(td instanceof TableData).toBeTruthy()
- expect(td.columns.length).toBe(0)
- expect(td.rows.length).toBe(0)
- })
+ let td = df.createDataset(DatasetType.TABLE);
+ expect(td instanceof TableData).toBeTruthy();
+ expect(td.columns.length).toBe(0);
+ expect(td.rows.length).toBe(0);
+ });
it('should create a NetworkData instance', function() {
- let nd = df.createDataset(DatasetType.NETWORK)
- expect(nd instanceof NetworkData).toBeTruthy()
- expect(nd.columns.length).toBe(0)
- expect(nd.rows.length).toBe(0)
- expect(nd.graph).toEqual({})
- })
+ let nd = df.createDataset(DatasetType.NETWORK);
+ expect(nd instanceof NetworkData).toBeTruthy();
+ expect(nd.columns.length).toBe(0);
+ expect(nd.rows.length).toBe(0);
+ expect(nd.graph).toEqual({});
+ });
it('should thrown an Error', function() {
- expect(function() { df.createDataset('text') })
- .toThrow(new Error('Dataset type not found'))
- })
-})
+ expect(function() {
+ df.createDataset('text');
+ })
+ .toThrow(new Error('Dataset type not found'));
+ });
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/tabledata/network.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/tabledata/network.js b/zeppelin-web/src/app/tabledata/network.js
index 403ea5b..3566722 100644
--- a/zeppelin-web/src/app/tabledata/network.js
+++ b/zeppelin-web/src/app/tabledata/network.js
@@ -12,37 +12,37 @@
* limitations under the License.
*/
-import Transformation from './transformation'
+import Transformation from './transformation';
/**
* trasformation settings for network visualization
*/
export default class NetworkTransformation extends Transformation {
getSetting() {
- let self = this
- let configObj = self.config
+ let self = this;
+ let configObj = self.config;
return {
template: 'app/tabledata/network_settings.html',
scope: {
config: configObj,
isEmptyObject: function(obj) {
- obj = obj || {}
- return angular.equals(obj, {})
+ obj = obj || {};
+ return angular.equals(obj, {});
},
setNetworkLabel: function(label, value) {
- configObj.properties[label].selected = value
+ configObj.properties[label].selected = value;
},
saveConfig: function() {
- self.emitConfig(configObj)
- }
- }
- }
+ self.emitConfig(configObj);
+ },
+ },
+ };
}
setConfig(config) {
}
transform(networkData) {
- return networkData
+ return networkData;
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/tabledata/networkdata.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/tabledata/networkdata.js b/zeppelin-web/src/app/tabledata/networkdata.js
index 70cd86b..368254d 100644
--- a/zeppelin-web/src/app/tabledata/networkdata.js
+++ b/zeppelin-web/src/app/tabledata/networkdata.js
@@ -12,74 +12,74 @@
* limitations under the License.
*/
-import TableData from './tabledata'
-import {DatasetType} from './dataset'
+import TableData from './tabledata';
+import {DatasetType} from './dataset';
/**
* Create network data object from paragraph graph type result
*/
export default class NetworkData extends TableData {
constructor(graph) {
- super()
- this.graph = graph || {}
+ super();
+ this.graph = graph || {};
if (this.graph.nodes) {
- this.loadParagraphResult({msg: JSON.stringify(graph), type: DatasetType.NETWORK})
+ this.loadParagraphResult({msg: JSON.stringify(graph), type: DatasetType.NETWORK});
}
}
loadParagraphResult(paragraphResult) {
if (!paragraphResult || paragraphResult.type !== DatasetType.NETWORK) {
- console.log('Can not load paragraph result')
- return
+ console.log('Can not load paragraph result');
+ return;
}
- this.graph = JSON.parse(paragraphResult.msg.trim() || '{}')
+ this.graph = JSON.parse(paragraphResult.msg.trim() || '{}');
if (!this.graph.nodes) {
- console.log('Graph result is empty')
- return
+ console.log('Graph result is empty');
+ return;
}
- this.graph.edges = this.graph.edges || []
+ this.graph.edges = this.graph.edges || [];
this.networkNodes = angular.equals({}, this.graph.labels || {})
- ? null : {count: this.graph.nodes.length, labels: this.graph.labels}
+ ? null : {count: this.graph.nodes.length, labels: this.graph.labels};
this.networkRelationships = angular.equals([], this.graph.types || [])
- ? null : {count: this.graph.edges.length, types: this.graph.types}
+ ? null : {count: this.graph.edges.length, types: this.graph.types};
- const rows = []
- const comment = ''
- const entities = this.graph.nodes.concat(this.graph.edges)
- const baseColumnNames = [{name: 'id', index: 0, aggr: 'sum'}]
- const containsLabelField = _.find(entities, (entity) => 'label' in entity) != null
+ const rows = [];
+ const comment = '';
+ const entities = this.graph.nodes.concat(this.graph.edges);
+ const baseColumnNames = [{name: 'id', index: 0, aggr: 'sum'}];
+ const containsLabelField = _.find(entities, (entity) => 'label' in entity) !== undefined;
if (this.graph.labels || this.graph.types || containsLabelField) {
- baseColumnNames.push({name: 'label', index: 1, aggr: 'sum'})
+ baseColumnNames.push({name: 'label', index: 1, aggr: 'sum'});
}
const internalFieldsToJump = ['count', 'size', 'totalCount',
- 'data', 'x', 'y', 'labels', 'source', 'target']
- const baseCols = _.map(baseColumnNames, (col) => col.name)
- let keys = _.map(entities, (elem) => Object.keys(elem.data || {}))
- keys = _.flatten(keys)
- keys = _.uniq(keys).filter((key) => baseCols.indexOf(key) === -1)
+ 'data', 'x', 'y', 'labels', 'source', 'target'];
+ const baseCols = _.map(baseColumnNames, (col) => col.name);
+ let keys = _.map(entities, (elem) => Object.keys(elem.data || {}));
+ keys = _.flatten(keys);
+ keys = _.uniq(keys).filter((key) => baseCols.indexOf(key) === -1);
const entityColumnNames = _.map(keys, (elem, i) => {
- return {name: elem, index: i + baseColumnNames.length, aggr: 'sum'}
- })
- const columnNames = baseColumnNames.concat(entityColumnNames)
+ return {name: elem, index: i + baseColumnNames.length, aggr: 'sum'};
+ });
+ const columnNames = baseColumnNames.concat(entityColumnNames);
for (let i = 0; i < entities.length; i++) {
- const entity = entities[i]
- const col = []
- entity.data = entity.data || {}
+ const entity = entities[i];
+ const col = [];
+ entity.data = entity.data || {};
for (let j = 0; j < columnNames.length; j++) {
- const name = columnNames[j].name
+ const name = columnNames[j].name;
const value = name in entity && internalFieldsToJump.indexOf(name) === -1
- ? entity[name] : entity.data[name]
- const parsedValue = value === null || value === undefined ? '' : value
- col.push(parsedValue)
+ ? entity[name] : entity.data[name];
+ const parsedValue = value === null || value === undefined ? '' : value;
+ col.push(parsedValue);
}
- rows.push(col)
+ rows.push(col);
}
- this.comment = comment
- this.columns = columnNames
- this.rows = rows
+ this.comment = comment;
+ this.columns = columnNames;
+ this.rows = rows;
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/tabledata/networkdata.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/tabledata/networkdata.test.js b/zeppelin-web/src/app/tabledata/networkdata.test.js
index 739ac19..cd3a12f 100644
--- a/zeppelin-web/src/app/tabledata/networkdata.test.js
+++ b/zeppelin-web/src/app/tabledata/networkdata.test.js
@@ -12,56 +12,56 @@
* limitations under the License.
*/
-import NetworkData from './networkdata.js'
-import {DatasetType} from './dataset.js'
+import NetworkData from './networkdata.js';
+import {DatasetType} from './dataset.js';
describe('NetworkData build', function() {
- let nd
+ let nd;
beforeEach(function() {
- nd = new NetworkData()
- })
+ nd = new NetworkData();
+ });
it('should initialize the default value', function() {
- expect(nd.columns.length).toBe(0)
- expect(nd.rows.length).toBe(0)
- expect(nd.graph).toEqual({})
- })
+ expect(nd.columns.length).toBe(0);
+ expect(nd.rows.length).toBe(0);
+ expect(nd.graph).toEqual({});
+ });
it('should able to create NetowkData from paragraph result', function() {
- let jsonExpected = {nodes: [{id: 1}, {id: 2}], edges: [{source: 2, target: 1, id: 1}]}
+ let jsonExpected = {nodes: [{id: 1}, {id: 2}], edges: [{source: 2, target: 1, id: 1}]};
nd.loadParagraphResult({
type: DatasetType.NETWORK,
- msg: JSON.stringify(jsonExpected)
- })
+ msg: JSON.stringify(jsonExpected),
+ });
- expect(nd.columns.length).toBe(1)
- expect(nd.rows.length).toBe(3)
- expect(nd.graph.nodes[0].id).toBe(jsonExpected.nodes[0].id)
- expect(nd.graph.nodes[1].id).toBe(jsonExpected.nodes[1].id)
- expect(nd.graph.edges[0].id).toBe(jsonExpected.edges[0].id)
- expect(nd.graph.edges[0].source).toBe(jsonExpected.edges[0].source)
- expect(nd.graph.edges[0].target).toBe(jsonExpected.edges[0].target)
- })
+ expect(nd.columns.length).toBe(1);
+ expect(nd.rows.length).toBe(3);
+ expect(nd.graph.nodes[0].id).toBe(jsonExpected.nodes[0].id);
+ expect(nd.graph.nodes[1].id).toBe(jsonExpected.nodes[1].id);
+ expect(nd.graph.edges[0].id).toBe(jsonExpected.edges[0].id);
+ expect(nd.graph.edges[0].source).toBe(jsonExpected.edges[0].source);
+ expect(nd.graph.edges[0].target).toBe(jsonExpected.edges[0].target);
+ });
it('should able to show data fields source and target', function() {
let jsonExpected = {nodes: [{id: 1, data: {source: 'Source'}}, {id: 2, data: {target: 'Target'}}],
- edges: [{source: 2, target: 1, id: 1, data: {source: 'Source Edge Data', target: 'Target Edge Data'}}]}
+ edges: [{source: 2, target: 1, id: 1, data: {source: 'Source Edge Data', target: 'Target Edge Data'}}]};
nd.loadParagraphResult({
type: DatasetType.NETWORK,
- msg: JSON.stringify(jsonExpected)
- })
+ msg: JSON.stringify(jsonExpected),
+ });
- expect(nd.columns.length).toBe(3)
- expect(nd.rows.length).toBe(3)
- expect(nd.graph.nodes[0].id).toBe(jsonExpected.nodes[0].id)
- expect(nd.graph.nodes[1].id).toBe(jsonExpected.nodes[1].id)
- expect(nd.graph.edges[0].id).toBe(jsonExpected.edges[0].id)
- expect(nd.graph.edges[0].source).toBe(jsonExpected.edges[0].source)
- expect(nd.graph.edges[0].target).toBe(jsonExpected.edges[0].target)
- expect(nd.graph.nodes[0].data.source).toBe(jsonExpected.nodes[0].data.source)
- expect(nd.graph.nodes[1].data.target).toBe(jsonExpected.nodes[1].data.target)
- expect(nd.graph.edges[0].data.source).toBe(jsonExpected.edges[0].data.source)
- expect(nd.graph.edges[0].data.target).toBe(jsonExpected.edges[0].data.target)
- })
-})
+ expect(nd.columns.length).toBe(3);
+ expect(nd.rows.length).toBe(3);
+ expect(nd.graph.nodes[0].id).toBe(jsonExpected.nodes[0].id);
+ expect(nd.graph.nodes[1].id).toBe(jsonExpected.nodes[1].id);
+ expect(nd.graph.edges[0].id).toBe(jsonExpected.edges[0].id);
+ expect(nd.graph.edges[0].source).toBe(jsonExpected.edges[0].source);
+ expect(nd.graph.edges[0].target).toBe(jsonExpected.edges[0].target);
+ expect(nd.graph.nodes[0].data.source).toBe(jsonExpected.nodes[0].data.source);
+ expect(nd.graph.nodes[1].data.target).toBe(jsonExpected.nodes[1].data.target);
+ expect(nd.graph.edges[0].data.source).toBe(jsonExpected.edges[0].data.source);
+ expect(nd.graph.edges[0].data.target).toBe(jsonExpected.edges[0].data.target);
+ });
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/tabledata/passthrough.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/tabledata/passthrough.js b/zeppelin-web/src/app/tabledata/passthrough.js
index e376c43..772b7be 100644
--- a/zeppelin-web/src/app/tabledata/passthrough.js
+++ b/zeppelin-web/src/app/tabledata/passthrough.js
@@ -12,21 +12,21 @@
* limitations under the License.
*/
-import Transformation from './transformation'
+import Transformation from './transformation';
/**
* passthough the data
*/
export default class PassthroughTransformation extends Transformation {
// eslint-disable-next-line no-useless-constructor
- constructor (config) {
- super(config)
+ constructor(config) {
+ super(config);
}
/**
* Method will be invoked when tableData or config changes
*/
- transform (tableData) {
- return tableData
+ transform(tableData) {
+ return tableData;
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/tabledata/pivot.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/tabledata/pivot.js b/zeppelin-web/src/app/tabledata/pivot.js
index da29900..2baa6b5 100644
--- a/zeppelin-web/src/app/tabledata/pivot.js
+++ b/zeppelin-web/src/app/tabledata/pivot.js
@@ -12,192 +12,192 @@
* limitations under the License.
*/
-import Transformation from './transformation'
+import Transformation from './transformation';
/**
* pivot table data and return d3 chart data
*/
export default class PivotTransformation extends Transformation {
// eslint-disable-next-line no-useless-constructor
- constructor (config) {
- super(config)
+ constructor(config) {
+ super(config);
}
- getSetting () {
- let self = this
+ getSetting() {
+ let self = this;
- let configObj = self.config
- console.log('getSetting', configObj)
+ let configObj = self.config;
+ console.log('getSetting', configObj);
return {
template: 'app/tabledata/pivot_settings.html',
scope: {
config: configObj.common.pivot,
tableDataColumns: self.tableDataColumns,
- save: function () {
- self.emitConfig(configObj)
+ save: function() {
+ self.emitConfig(configObj);
},
- removeKey: function (idx) {
- configObj.common.pivot.keys.splice(idx, 1)
- self.emitConfig(configObj)
+ removeKey: function(idx) {
+ configObj.common.pivot.keys.splice(idx, 1);
+ self.emitConfig(configObj);
},
- removeGroup: function (idx) {
- configObj.common.pivot.groups.splice(idx, 1)
- self.emitConfig(configObj)
+ removeGroup: function(idx) {
+ configObj.common.pivot.groups.splice(idx, 1);
+ self.emitConfig(configObj);
},
- removeValue: function (idx) {
- configObj.common.pivot.values.splice(idx, 1)
- self.emitConfig(configObj)
+ removeValue: function(idx) {
+ configObj.common.pivot.values.splice(idx, 1);
+ self.emitConfig(configObj);
},
- setValueAggr: function (idx, aggr) {
- configObj.common.pivot.values[idx].aggr = aggr
- self.emitConfig(configObj)
- }
- }
- }
+ setValueAggr: function(idx, aggr) {
+ configObj.common.pivot.values[idx].aggr = aggr;
+ self.emitConfig(configObj);
+ },
+ },
+ };
}
/**
* Method will be invoked when tableData or config changes
*/
- transform (tableData) {
- this.tableDataColumns = tableData.columns
- this.config.common = this.config.common || {}
- this.config.common.pivot = this.config.common.pivot || {}
- let config = this.config.common.pivot
- let firstTime = (!config.keys && !config.groups && !config.values)
+ transform(tableData) {
+ this.tableDataColumns = tableData.columns;
+ this.config.common = this.config.common || {};
+ this.config.common.pivot = this.config.common.pivot || {};
+ let config = this.config.common.pivot;
+ let firstTime = (!config.keys && !config.groups && !config.values);
- config.keys = config.keys || []
- config.groups = config.groups || []
- config.values = config.values || []
+ config.keys = config.keys || [];
+ config.groups = config.groups || [];
+ config.values = config.values || [];
- this.removeUnknown()
+ this.removeUnknown();
if (firstTime) {
- this.selectDefault()
+ this.selectDefault();
}
return this.pivot(
tableData,
config.keys,
config.groups,
- config.values)
+ config.values);
}
- removeUnknown () {
- let config = this.config.common.pivot
- let tableDataColumns = this.tableDataColumns
- let unique = function (list) {
+ removeUnknown() {
+ let config = this.config.common.pivot;
+ let tableDataColumns = this.tableDataColumns;
+ let unique = function(list) {
for (let i = 0; i < list.length; i++) {
for (let j = i + 1; j < list.length; j++) {
if (angular.equals(list[i], list[j])) {
- list.splice(j, 1)
- j--
+ list.splice(j, 1);
+ j--;
}
}
}
- }
+ };
- let removeUnknown = function (list) {
+ let removeUnknown = function(list) {
for (let i = 0; i < list.length; i++) {
// remove non existing column
- let found = false
+ let found = false;
for (let j = 0; j < tableDataColumns.length; j++) {
- let a = list[i]
- let b = tableDataColumns[j]
+ let a = list[i];
+ let b = tableDataColumns[j];
if (a.index === b.index && a.name === b.name) {
- found = true
- break
+ found = true;
+ break;
}
}
if (!found) {
- list.splice(i, 1)
+ list.splice(i, 1);
}
}
- }
+ };
- unique(config.keys)
- removeUnknown(config.keys)
- unique(config.groups)
- removeUnknown(config.groups)
- removeUnknown(config.values)
+ unique(config.keys);
+ removeUnknown(config.keys);
+ unique(config.groups);
+ removeUnknown(config.groups);
+ removeUnknown(config.values);
}
- selectDefault () {
- let config = this.config.common.pivot
+ selectDefault() {
+ let config = this.config.common.pivot;
if (config.keys.length === 0 &&
config.groups.length === 0 &&
config.values.length === 0) {
if (config.keys.length === 0 && this.tableDataColumns.length > 0) {
- config.keys.push(this.tableDataColumns[0])
+ config.keys.push(this.tableDataColumns[0]);
}
if (config.values.length === 0 && this.tableDataColumns.length > 1) {
- config.values.push(this.tableDataColumns[1])
+ config.values.push(this.tableDataColumns[1]);
}
}
}
- pivot (data, keys, groups, values) {
+ pivot(data, keys, groups, values) {
let aggrFunc = {
- sum: function (a, b) {
- let varA = (a !== undefined) ? (isNaN(a) ? 0 : parseFloat(a)) : 0
- let varB = (b !== undefined) ? (isNaN(b) ? 0 : parseFloat(b)) : 0
- return varA + varB
+ sum: function(a, b) {
+ let varA = (a !== undefined) ? (isNaN(a) ? 0 : parseFloat(a)) : 0;
+ let varB = (b !== undefined) ? (isNaN(b) ? 0 : parseFloat(b)) : 0;
+ return varA + varB;
},
- count: function (a, b) {
- let varA = (a !== undefined) ? parseInt(a) : 0
- let varB = (b !== undefined) ? 1 : 0
- return varA + varB
+ count: function(a, b) {
+ let varA = (a !== undefined) ? parseInt(a) : 0;
+ let varB = (b !== undefined) ? 1 : 0;
+ return varA + varB;
},
- min: function (a, b) {
- let aIsValid = isValidNumber(a)
- let bIsValid = isValidNumber(b)
+ min: function(a, b) {
+ let aIsValid = isValidNumber(a);
+ let bIsValid = isValidNumber(b);
if (!aIsValid) {
- return parseFloat(b)
+ return parseFloat(b);
} else if (!bIsValid) {
- return parseFloat(a)
+ return parseFloat(a);
} else {
- return Math.min(parseFloat(a), parseFloat(b))
+ return Math.min(parseFloat(a), parseFloat(b));
}
},
- max: function (a, b) {
- let aIsValid = isValidNumber(a)
- let bIsValid = isValidNumber(b)
+ max: function(a, b) {
+ let aIsValid = isValidNumber(a);
+ let bIsValid = isValidNumber(b);
if (!aIsValid) {
- return parseFloat(b)
+ return parseFloat(b);
} else if (!bIsValid) {
- return parseFloat(a)
+ return parseFloat(a);
} else {
- return Math.max(parseFloat(a), parseFloat(b))
+ return Math.max(parseFloat(a), parseFloat(b));
}
},
- avg: function (a, b, c) {
- let varA = (a !== undefined) ? (isNaN(a) ? 0 : parseFloat(a)) : 0
- let varB = (b !== undefined) ? (isNaN(b) ? 0 : parseFloat(b)) : 0
- return varA + varB
- }
- }
+ avg: function(a, b, c) {
+ let varA = (a !== undefined) ? (isNaN(a) ? 0 : parseFloat(a)) : 0;
+ let varB = (b !== undefined) ? (isNaN(b) ? 0 : parseFloat(b)) : 0;
+ return varA + varB;
+ },
+ };
let isValidNumber = function(num) {
- return num !== undefined && !isNaN(num)
- }
+ return num !== undefined && !isNaN(num);
+ };
let aggrFuncDiv = {
sum: false,
count: false,
min: false,
max: false,
- avg: true
- }
+ avg: true,
+ };
- let schema = {}
- let rows = {}
+ let schema = {};
+ let rows = {};
for (let i = 0; i < data.rows.length; i++) {
- let row = data.rows[i]
- let s = schema
- let p = rows
+ let row = data.rows[i];
+ let s = schema;
+ let p = rows;
for (let k = 0; k < keys.length; k++) {
- let key = keys[k]
+ let key = keys[k];
// add key to schema
if (!s[key.name]) {
@@ -205,22 +205,22 @@ export default class PivotTransformation extends Transformation {
order: k,
index: key.index,
type: 'key',
- children: {}
- }
+ children: {},
+ };
}
- s = s[key.name].children
+ s = s[key.name].children;
// add key to row
- let keyKey = row[key.index]
+ let keyKey = row[key.index];
if (!p[keyKey]) {
- p[keyKey] = {}
+ p[keyKey] = {};
}
- p = p[keyKey]
+ p = p[keyKey];
}
for (let g = 0; g < groups.length; g++) {
- let group = groups[g]
- let groupKey = row[group.index]
+ let group = groups[g];
+ let groupKey = row[group.index];
// add group to schema
if (!s[groupKey]) {
@@ -228,42 +228,42 @@ export default class PivotTransformation extends Transformation {
order: g,
index: group.index,
type: 'group',
- children: {}
- }
+ children: {},
+ };
}
- s = s[groupKey].children
+ s = s[groupKey].children;
// add key to row
if (!p[groupKey]) {
- p[groupKey] = {}
+ p[groupKey] = {};
}
- p = p[groupKey]
+ p = p[groupKey];
}
for (let v = 0; v < values.length; v++) {
- let value = values[v]
- let valueKey = value.name + '(' + value.aggr + ')'
+ let value = values[v];
+ let valueKey = value.name + '(' + value.aggr + ')';
// add value to schema
if (!s[valueKey]) {
s[valueKey] = {
type: 'value',
order: v,
- index: value.index
- }
+ index: value.index,
+ };
}
// add value to row
if (!p[valueKey]) {
p[valueKey] = {
value: (value.aggr !== 'count') ? row[value.index] : 1,
- count: 1
- }
+ count: 1,
+ };
} else {
p[valueKey] = {
value: aggrFunc[value.aggr](p[valueKey].value, row[value.index], p[valueKey].count + 1),
- count: (aggrFuncDiv[value.aggr]) ? p[valueKey].count + 1 : p[valueKey].count
- }
+ count: (aggrFuncDiv[value.aggr]) ? p[valueKey].count + 1 : p[valueKey].count,
+ };
}
}
}
@@ -274,7 +274,7 @@ export default class PivotTransformation extends Transformation {
groups: groups,
values: values,
schema: schema,
- rows: rows
- }
+ rows: rows,
+ };
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/tabledata/tabledata.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/tabledata/tabledata.js b/zeppelin-web/src/app/tabledata/tabledata.js
index 3fe01b7..745ab17 100644
--- a/zeppelin-web/src/app/tabledata/tabledata.js
+++ b/zeppelin-web/src/app/tabledata/tabledata.js
@@ -11,65 +11,65 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import {Dataset, DatasetType} from './dataset'
+import {Dataset, DatasetType} from './dataset';
/**
* Create table data object from paragraph table type result
*/
export default class TableData extends Dataset {
- constructor (columns, rows, comment) {
- super()
- this.columns = columns || []
- this.rows = rows || []
- this.comment = comment || ''
+ constructor(columns, rows, comment) {
+ super();
+ this.columns = columns || [];
+ this.rows = rows || [];
+ this.comment = comment || '';
}
- loadParagraphResult (paragraphResult) {
+ loadParagraphResult(paragraphResult) {
if (!paragraphResult || paragraphResult.type !== DatasetType.TABLE) {
- console.log('Can not load paragraph result')
- return
+ console.log('Can not load paragraph result');
+ return;
}
- let columnNames = []
- let rows = []
- let array = []
- let textRows = paragraphResult.msg.split('\n')
- let comment = ''
- let commentRow = false
+ let columnNames = [];
+ let rows = [];
+ let array = [];
+ let textRows = paragraphResult.msg.split('\n');
+ let comment = '';
+ let commentRow = false;
for (let i = 0; i < textRows.length; i++) {
- let textRow = textRows[i]
+ let textRow = textRows[i];
if (commentRow) {
- comment += textRow
- continue
+ comment += textRow;
+ continue;
}
if (textRow === '' || textRow === '<!--TABLE_COMMENT-->') {
if (rows.length > 0) {
- commentRow = true
+ commentRow = true;
}
- continue
+ continue;
}
- let textCols = textRow.split('\t')
- let cols = []
- let cols2 = []
+ let textCols = textRow.split('\t');
+ let cols = [];
+ let cols2 = [];
for (let j = 0; j < textCols.length; j++) {
- let col = textCols[j]
+ let col = textCols[j];
if (i === 0) {
- columnNames.push({name: col, index: j, aggr: 'sum'})
+ columnNames.push({name: col, index: j, aggr: 'sum'});
} else {
- cols.push(col)
- cols2.push({key: (columnNames[i]) ? columnNames[i].name : undefined, value: col})
+ cols.push(col);
+ cols2.push({key: (columnNames[i]) ? columnNames[i].name : undefined, value: col});
}
}
if (i !== 0) {
- rows.push(cols)
- array.push(cols2)
+ rows.push(cols);
+ array.push(cols2);
}
}
- this.comment = comment
- this.columns = columnNames
- this.rows = rows
+ this.comment = comment;
+ this.columns = columnNames;
+ this.rows = rows;
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/tabledata/tabledata.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/tabledata/tabledata.test.js b/zeppelin-web/src/app/tabledata/tabledata.test.js
index e24b073..931cc2d 100644
--- a/zeppelin-web/src/app/tabledata/tabledata.test.js
+++ b/zeppelin-web/src/app/tabledata/tabledata.test.js
@@ -12,42 +12,42 @@
* limitations under the License.
*/
-import TableData from './tabledata.js'
-import PivotTransformation from './pivot.js'
+import TableData from './tabledata.js';
+import PivotTransformation from './pivot.js';
-describe('TableData build', function () {
- let td
+describe('TableData build', function() {
+ let td;
- beforeEach(function () {
- console.log(TableData)
- td = new TableData()
- })
+ beforeEach(function() {
+ console.log(TableData);
+ td = new TableData();
+ });
- it('should initialize the default value', function () {
- expect(td.columns.length).toBe(0)
- expect(td.rows.length).toBe(0)
- expect(td.comment).toBe('')
- })
+ it('should initialize the default value', function() {
+ expect(td.columns.length).toBe(0);
+ expect(td.rows.length).toBe(0);
+ expect(td.comment).toBe('');
+ });
- it('should able to create Tabledata from paragraph result', function () {
+ it('should able to create Tabledata from paragraph result', function() {
td.loadParagraphResult({
type: 'TABLE',
- msg: 'key\tvalue\na\t10\nb\t20\n\nhello'
- })
+ msg: 'key\tvalue\na\t10\nb\t20\n\nhello',
+ });
- expect(td.columns.length).toBe(2)
- expect(td.rows.length).toBe(2)
- expect(td.comment).toBe('hello')
- })
-})
+ expect(td.columns.length).toBe(2);
+ expect(td.rows.length).toBe(2);
+ expect(td.comment).toBe('hello');
+ });
+});
describe('PivotTransformation build', function() {
- let pt
+ let pt;
- beforeEach(function () {
- console.log(PivotTransformation)
- pt = new PivotTransformation()
- })
+ beforeEach(function() {
+ console.log(PivotTransformation);
+ pt = new PivotTransformation();
+ });
it('check the result of keys, groups and values unique', function() {
// set inited mock data
@@ -63,33 +63,33 @@ describe('PivotTransformation build', function() {
{index: 3, name: '3'},
{index: 5, name: '5'}],
groups: [],
- values: []
- }
- }
- }
+ values: [],
+ },
+ },
+ };
pt.tableDataColumns = [
{index: 1, name: '1'},
{index: 2, name: '2'},
{index: 3, name: '3'},
{index: 4, name: '4'},
- {index: 5, name: '5'}]
+ {index: 5, name: '5'}];
- pt.setConfig(config)
+ pt.setConfig(config);
- pt.removeUnknown()
+ pt.removeUnknown();
- expect(config.common.pivot.keys.length).toBe(3)
- expect(config.common.pivot.keys[0].index).toBe(4)
- expect(config.common.pivot.keys[1].index).toBe(3)
- expect(config.common.pivot.keys[2].index).toBe(5)
- })
+ expect(config.common.pivot.keys.length).toBe(3);
+ expect(config.common.pivot.keys[0].index).toBe(4);
+ expect(config.common.pivot.keys[1].index).toBe(3);
+ expect(config.common.pivot.keys[2].index).toBe(5);
+ });
it('should aggregate values correctly', function() {
- let td = new TableData()
+ let td = new TableData();
td.loadParagraphResult({
type: 'TABLE',
- msg: 'key\tvalue\na\t10\na\tnull\na\t0\na\t1\n'
- })
+ msg: 'key\tvalue\na\t10\na\tnull\na\t0\na\t1\n',
+ });
let config = {
common: {
@@ -98,34 +98,34 @@ describe('PivotTransformation build', function() {
{
'name': 'key',
'index': 0.0,
- }
+ },
],
groups: [],
values: [
{
'name': 'value',
'index': 1.0,
- 'aggr': 'sum'
- }
- ]
- }
- }
- }
-
- pt.setConfig(config)
- let transformed = pt.transform(td)
- expect(transformed.rows['a']['value(sum)'].value).toBe(11)
-
- pt.config.common.pivot.values[0].aggr = 'max'
- transformed = pt.transform(td)
- expect(transformed.rows['a']['value(max)'].value).toBe(10)
-
- pt.config.common.pivot.values[0].aggr = 'min'
- transformed = pt.transform(td)
- expect(transformed.rows['a']['value(min)'].value).toBe(0)
-
- pt.config.common.pivot.values[0].aggr = 'count'
- transformed = pt.transform(td)
- expect(transformed.rows['a']['value(count)'].value).toBe(4)
- })
-})
+ 'aggr': 'sum',
+ },
+ ],
+ },
+ },
+ };
+
+ pt.setConfig(config);
+ let transformed = pt.transform(td);
+ expect(transformed.rows['a']['value(sum)'].value).toBe(11);
+
+ pt.config.common.pivot.values[0].aggr = 'max';
+ transformed = pt.transform(td);
+ expect(transformed.rows['a']['value(max)'].value).toBe(10);
+
+ pt.config.common.pivot.values[0].aggr = 'min';
+ transformed = pt.transform(td);
+ expect(transformed.rows['a']['value(min)'].value).toBe(0);
+
+ pt.config.common.pivot.values[0].aggr = 'count';
+ transformed = pt.transform(td);
+ expect(transformed.rows['a']['value(count)'].value).toBe(4);
+ });
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/tabledata/transformation.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/tabledata/transformation.js b/zeppelin-web/src/app/tabledata/transformation.js
index f142618..a15e12b 100644
--- a/zeppelin-web/src/app/tabledata/transformation.js
+++ b/zeppelin-web/src/app/tabledata/transformation.js
@@ -16,9 +16,9 @@
* Base class for visualization
*/
export default class Transformation {
- constructor (config) {
- this.config = config
- this._emitter = () => {}
+ constructor(config) {
+ this.config = config;
+ this._emitter = () => {};
}
/**
@@ -27,77 +27,81 @@ export default class Transformation {
* scope : an object to bind to template scope
* }
*/
- getSetting () {
+ getSetting() {
// override this
}
/**
* Method will be invoked when tableData or config changes
*/
- transform (tableData) {
+ transform(tableData) {
// override this
}
/**
* render setting
*/
- renderSetting (targetEl) {
- let setting = this.getSetting()
+ renderSetting(targetEl) {
+ let setting = this.getSetting();
if (!setting) {
- return
+ return;
}
// already readered
if (this._scope) {
- let self = this
- this._scope.$apply(function () {
+ let self = this;
+ this._scope.$apply(function() {
for (let k in setting.scope) {
- self._scope[k] = setting.scope[k]
+ if(setting.scope.hasOwnProperty(k)) {
+ self._scope[k] = setting.scope[k];
+ }
}
for (let k in self._prevSettingScope) {
if (!setting.scope[k]) {
- self._scope[k] = setting.scope[k]
+ self._scope[k] = setting.scope[k];
}
}
- })
- return
+ });
+ return;
} else {
- this._prevSettingScope = setting.scope
+ this._prevSettingScope = setting.scope;
}
- let scope = this._createNewScope()
+ let scope = this._createNewScope();
for (let k in setting.scope) {
- scope[k] = setting.scope[k]
+ if(setting.scope.hasOwnProperty(k)) {
+ scope[k] = setting.scope[k];
+ }
}
- let template = setting.template
+ let template = setting.template;
if (template.split('\n').length === 1 &&
template.endsWith('.html')) { // template is url
- let self = this
- this._templateRequest(template).then(function (t) {
- self._render(targetEl, t, scope)
- })
+ let self = this;
+ this._templateRequest(template).then(function(t) {
+ self._render(targetEl, t, scope);
+ });
} else {
- this._render(targetEl, template, scope)
+ this._render(targetEl, template, scope);
}
}
- _render (targetEl, template, scope) {
- this._targetEl = targetEl
- targetEl.html(template)
- this._compile(targetEl.contents())(scope)
- this._scope = scope
+ _render(targetEl, template, scope) {
+ this._targetEl = targetEl;
+ targetEl.html(template);
+ this._compile(targetEl.contents())(scope);
+ this._scope = scope;
}
- setConfig (config) {
- this.config = config
+ setConfig(config) {
+ this.config = config;
}
/**
* Emit config. config will sent to server and saved.
*/
- emitConfig (config) {
- this._emitter(config)
+ emitConfig(config) {
+ this._emitter(config);
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/visualization/builtins/visualization-areachart.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/visualization/builtins/visualization-areachart.js b/zeppelin-web/src/app/visualization/builtins/visualization-areachart.js
index 494f8ae..886aec9 100644
--- a/zeppelin-web/src/app/visualization/builtins/visualization-areachart.js
+++ b/zeppelin-web/src/app/visualization/builtins/visualization-areachart.js
@@ -12,34 +12,34 @@
* limitations under the License.
*/
-import Nvd3ChartVisualization from './visualization-nvd3chart'
-import PivotTransformation from '../../tabledata/pivot'
+import Nvd3ChartVisualization from './visualization-nvd3chart';
+import PivotTransformation from '../../tabledata/pivot';
/**
* Visualize data in area chart
*/
export default class AreachartVisualization extends Nvd3ChartVisualization {
- constructor (targetEl, config) {
- super(targetEl, config)
+ constructor(targetEl, config) {
+ super(targetEl, config);
- this.pivot = new PivotTransformation(config)
+ this.pivot = new PivotTransformation(config);
try {
- this.config.rotate = {degree: config.rotate.degree}
+ this.config.rotate = {degree: config.rotate.degree};
} catch (e) {
- this.config.rotate = {degree: '-45'}
+ this.config.rotate = {degree: '-45'};
}
}
- type () {
- return 'stackedAreaChart'
+ type() {
+ return 'stackedAreaChart';
}
- getTransformation () {
- return this.pivot
+ getTransformation() {
+ return this.pivot;
}
- render (pivot) {
+ render(pivot) {
let d3Data = this.d3DataFromPivot(
pivot.schema,
pivot.rows,
@@ -48,108 +48,112 @@ export default class AreachartVisualization extends Nvd3ChartVisualization {
pivot.values,
false,
true,
- false)
+ false);
- this.xLabels = d3Data.xLabels
- super.render(d3Data)
- this.config.changeXLabel(this.config.xLabelStatus)
+ this.xLabels = d3Data.xLabels;
+ super.render(d3Data);
+ this.config.changeXLabel(this.config.xLabelStatus);
}
/**
* Set new config
*/
- setConfig (config) {
- super.setConfig(config)
- this.pivot.setConfig(config)
+ setConfig(config) {
+ super.setConfig(config);
+ this.pivot.setConfig(config);
}
- configureChart (chart) {
- let self = this
- let configObj = self.config
+ configureChart(chart) {
+ let self = this;
+ let configObj = self.config;
- chart.xAxis.tickFormat(function (d) { return self.xAxisTickFormat(d, self.xLabels) })
- chart.yAxis.tickFormat(function (d) { return self.yAxisTickFormat(d) })
- chart.yAxis.axisLabelDistance(50)
- chart.useInteractiveGuideline(true) // for better UX and performance issue. (https://github.com/novus/nvd3/issues/691)
+ chart.xAxis.tickFormat(function(d) {
+ return self.xAxisTickFormat(d, self.xLabels);
+ });
+ chart.yAxis.tickFormat(function(d) {
+ return self.yAxisTickFormat(d);
+ });
+ chart.yAxis.axisLabelDistance(50);
+ chart.useInteractiveGuideline(true); // for better UX and performance issue. (https://github.com/novus/nvd3/issues/691)
self.config.changeXLabel = function(type) {
switch (type) {
case 'default':
- self.chart._options['showXAxis'] = true
- self.chart._options['margin'] = {bottom: 50}
- self.chart.xAxis.rotateLabels(0)
- configObj.xLabelStatus = 'default'
- break
+ self.chart._options['showXAxis'] = true;
+ self.chart._options['margin'] = {bottom: 50};
+ self.chart.xAxis.rotateLabels(0);
+ configObj.xLabelStatus = 'default';
+ break;
case 'rotate':
- self.chart._options['showXAxis'] = true
- self.chart._options['margin'] = {bottom: 140}
- self.chart.xAxis.rotateLabels(configObj.rotate.degree)
- configObj.xLabelStatus = 'rotate'
- break
+ self.chart._options['showXAxis'] = true;
+ self.chart._options['margin'] = {bottom: 140};
+ self.chart.xAxis.rotateLabels(configObj.rotate.degree);
+ configObj.xLabelStatus = 'rotate';
+ break;
case 'hide':
- self.chart._options['showXAxis'] = false
- self.chart._options['margin'] = {bottom: 50}
- d3.select('#' + self.targetEl[0].id + '> svg').select('g.nv-axis.nv-x').selectAll('*').remove()
- configObj.xLabelStatus = 'hide'
- break
+ self.chart._options['showXAxis'] = false;
+ self.chart._options['margin'] = {bottom: 50};
+ d3.select('#' + self.targetEl[0].id + '> svg').select('g.nv-axis.nv-x').selectAll('*').remove();
+ configObj.xLabelStatus = 'hide';
+ break;
}
- self.emitConfig(configObj)
- }
+ self.emitConfig(configObj);
+ };
self.config.isXLabelStatus = function(type) {
if (configObj.xLabelStatus === type) {
- return true
+ return true;
} else {
- return false
+ return false;
}
- }
+ };
self.config.setDegree = function(type) {
- configObj.rotate.degree = type
- self.chart.xAxis.rotateLabels(type)
- self.emitConfig(configObj)
- }
+ configObj.rotate.degree = type;
+ self.chart.xAxis.rotateLabels(type);
+ self.emitConfig(configObj);
+ };
self.config.isDegreeEmpty = function() {
if (configObj.rotate.degree.length > 0) {
- return true
+ return true;
} else {
- configObj.rotate.degree = '-45'
- self.emitConfig(configObj)
- return false
+ configObj.rotate.degree = '-45';
+ self.emitConfig(configObj);
+ return false;
}
- }
+ };
- this.chart.style(this.config.style || 'stack')
+ this.chart.style(this.config.style || 'stack');
- this.chart.dispatch.on('stateChange', function (s) {
- self.config.style = s.style
+ this.chart.dispatch.on('stateChange', function(s) {
+ self.config.style = s.style;
// give some time to animation finish
- setTimeout(function () {
- self.emitConfig(self.config)
- }, 500)
- })
+ setTimeout(function() {
+ self.emitConfig(self.config);
+ }, 500);
+ });
}
getSetting(chart) {
- let self = this
- let configObj = self.config
+ let self = this;
+ let configObj = self.config;
// default to visualize xLabel
if (typeof (configObj.xLabelStatus) === 'undefined') {
- configObj.changeXLabel('default')
+ configObj.changeXLabel('default');
}
if (typeof (configObj.rotate.degree) === 'undefined' || configObj.rotate.degree === '') {
- configObj.rotate.degree = '-45'
- self.emitConfig(configObj)
+ configObj.rotate.degree = '-45';
+ self.emitConfig(configObj);
}
return {
template: 'app/visualization/builtins/visualization-displayXAxis.html',
scope: {
- config: configObj
- }
- }
+ config: configObj,
+ },
+ };
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/visualization/builtins/visualization-barchart.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/visualization/builtins/visualization-barchart.js b/zeppelin-web/src/app/visualization/builtins/visualization-barchart.js
index 2653af2..e0279d9 100644
--- a/zeppelin-web/src/app/visualization/builtins/visualization-barchart.js
+++ b/zeppelin-web/src/app/visualization/builtins/visualization-barchart.js
@@ -12,34 +12,34 @@
* limitations under the License.
*/
-import Nvd3ChartVisualization from './visualization-nvd3chart'
-import PivotTransformation from '../../tabledata/pivot'
+import Nvd3ChartVisualization from './visualization-nvd3chart';
+import PivotTransformation from '../../tabledata/pivot';
/**
* Visualize data in bar char
*/
export default class BarchartVisualization extends Nvd3ChartVisualization {
- constructor (targetEl, config) {
- super(targetEl, config)
+ constructor(targetEl, config) {
+ super(targetEl, config);
- this.pivot = new PivotTransformation(config)
+ this.pivot = new PivotTransformation(config);
try {
- this.config.rotate = {degree: config.rotate.degree}
+ this.config.rotate = {degree: config.rotate.degree};
} catch (e) {
- this.config.rotate = {degree: '-45'}
+ this.config.rotate = {degree: '-45'};
}
}
- type () {
- return 'multiBarChart'
+ type() {
+ return 'multiBarChart';
}
- getTransformation () {
- return this.pivot
+ getTransformation() {
+ return this.pivot;
}
- render (pivot) {
+ render(pivot) {
let d3Data = this.d3DataFromPivot(
pivot.schema,
pivot.rows,
@@ -48,96 +48,98 @@ export default class BarchartVisualization extends Nvd3ChartVisualization {
pivot.values,
true,
true,
- true)
+ true);
- super.render(d3Data)
- this.config.changeXLabel(this.config.xLabelStatus)
+ super.render(d3Data);
+ this.config.changeXLabel(this.config.xLabelStatus);
}
/**
* Set new config
*/
- setConfig (config) {
- super.setConfig(config)
- this.pivot.setConfig(config)
+ setConfig(config) {
+ super.setConfig(config);
+ this.pivot.setConfig(config);
}
- configureChart (chart) {
- let self = this
- let configObj = self.config
+ configureChart(chart) {
+ let self = this;
+ let configObj = self.config;
- chart.yAxis.axisLabelDistance(50)
- chart.yAxis.tickFormat(function (d) { return self.yAxisTickFormat(d) })
+ chart.yAxis.axisLabelDistance(50);
+ chart.yAxis.tickFormat(function(d) {
+ return self.yAxisTickFormat(d);
+ });
- self.chart.stacked(this.config.stacked)
+ self.chart.stacked(this.config.stacked);
self.config.changeXLabel = function(type) {
switch (type) {
case 'default':
- self.chart._options['showXAxis'] = true
- self.chart._options['margin'] = {bottom: 50}
- self.chart.xAxis.rotateLabels(0)
- configObj.xLabelStatus = 'default'
- break
+ self.chart._options['showXAxis'] = true;
+ self.chart._options['margin'] = {bottom: 50};
+ self.chart.xAxis.rotateLabels(0);
+ configObj.xLabelStatus = 'default';
+ break;
case 'rotate':
- self.chart._options['showXAxis'] = true
- self.chart._options['margin'] = {bottom: 140}
- self.chart.xAxis.rotateLabels(configObj.rotate.degree)
- configObj.xLabelStatus = 'rotate'
- break
+ self.chart._options['showXAxis'] = true;
+ self.chart._options['margin'] = {bottom: 140};
+ self.chart.xAxis.rotateLabels(configObj.rotate.degree);
+ configObj.xLabelStatus = 'rotate';
+ break;
case 'hide':
- self.chart._options['showXAxis'] = false
- self.chart._options['margin'] = {bottom: 50}
- d3.select('#' + self.targetEl[0].id + '> svg').select('g.nv-axis.nv-x').selectAll('*').remove()
- configObj.xLabelStatus = 'hide'
- break
+ self.chart._options['showXAxis'] = false;
+ self.chart._options['margin'] = {bottom: 50};
+ d3.select('#' + self.targetEl[0].id + '> svg').select('g.nv-axis.nv-x').selectAll('*').remove();
+ configObj.xLabelStatus = 'hide';
+ break;
}
- self.emitConfig(configObj)
- }
+ self.emitConfig(configObj);
+ };
self.config.isXLabelStatus = function(type) {
if (configObj.xLabelStatus === type) {
- return true
+ return true;
} else {
- return false
+ return false;
}
- }
+ };
self.config.setDegree = function(type) {
- configObj.rotate.degree = type
- self.chart.xAxis.rotateLabels(type)
- self.emitConfig(configObj)
- }
+ configObj.rotate.degree = type;
+ self.chart.xAxis.rotateLabels(type);
+ self.emitConfig(configObj);
+ };
this.chart.dispatch.on('stateChange', function(s) {
- configObj.stacked = s.stacked
+ configObj.stacked = s.stacked;
// give some time to animation finish
setTimeout(function() {
- self.emitConfig(configObj)
- }, 500)
- })
+ self.emitConfig(configObj);
+ }, 500);
+ });
}
getSetting(chart) {
- let self = this
- let configObj = self.config
+ let self = this;
+ let configObj = self.config;
// default to visualize xLabel
if (typeof (configObj.xLabelStatus) === 'undefined') {
- configObj.changeXLabel('default')
+ configObj.changeXLabel('default');
}
if (typeof (configObj.rotate.degree) === 'undefined' || configObj.rotate.degree === '') {
- configObj.rotate.degree = '-45'
- self.emitConfig(configObj)
+ configObj.rotate.degree = '-45';
+ self.emitConfig(configObj);
}
return {
template: 'app/visualization/builtins/visualization-displayXAxis.html',
scope: {
- config: configObj
- }
- }
+ config: configObj,
+ },
+ };
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/visualization/builtins/visualization-d3network.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/visualization/builtins/visualization-d3network.js b/zeppelin-web/src/app/visualization/builtins/visualization-d3network.js
index 46ee251..749e434 100644
--- a/zeppelin-web/src/app/visualization/builtins/visualization-d3network.js
+++ b/zeppelin-web/src/app/visualization/builtins/visualization-d3network.js
@@ -12,18 +12,18 @@
* limitations under the License.
*/
-import Visualization from '../visualization'
-import NetworkTransformation from '../../tabledata/network'
+import Visualization from '../visualization';
+import NetworkTransformation from '../../tabledata/network';
/**
* Visualize data in network format
*/
export default class NetworkVisualization extends Visualization {
constructor(targetEl, config) {
- super(targetEl, config)
- console.log('Init network viz')
+ super(targetEl, config);
+ console.log('Init network viz');
if (!config.properties) {
- config.properties = {}
+ config.properties = {};
}
if (!config.d3Graph) {
config.d3Graph = {
@@ -33,101 +33,101 @@ export default class NetworkVisualization extends Visualization {
linkDistance: 80,
},
zoom: {
- minScale: 1.3
- }
- }
+ minScale: 1.3,
+ },
+ };
}
- this.targetEl.addClass('network')
- this.containerId = this.targetEl.prop('id')
- this.force = null
- this.svg = null
- this.$timeout = angular.injector(['ng']).get('$timeout')
- this.$interpolate = angular.injector(['ng']).get('$interpolate')
- this.transformation = new NetworkTransformation(config)
+ this.targetEl.addClass('network');
+ this.containerId = this.targetEl.prop('id');
+ this.force = null;
+ this.svg = null;
+ this.$timeout = angular.injector(['ng']).get('$timeout');
+ this.$interpolate = angular.injector(['ng']).get('$interpolate');
+ this.transformation = new NetworkTransformation(config);
}
refresh() {
- console.log('refresh')
+ console.log('refresh');
}
render(networkData) {
if (!('graph' in networkData)) {
- console.log('graph not found')
- return
+ console.log('graph not found');
+ return;
}
if (!networkData.isRendered) {
- networkData.isRendered = true
+ networkData.isRendered = true;
} else {
- return
+ return;
}
- console.log('Rendering the graph')
+ console.log('Rendering the graph');
if (networkData.graph.edges.length &&
!networkData.isDefaultSet) {
- networkData.isDefaultSet = true
- this._setEdgesDefaults(networkData.graph)
+ networkData.isDefaultSet = true;
+ this._setEdgesDefaults(networkData.graph);
}
- const transformationConfig = this.transformation.getSetting().scope.config
- console.log('cfg', transformationConfig)
+ const transformationConfig = this.transformation.getSetting().scope.config;
+ console.log('cfg', transformationConfig);
if (transformationConfig && angular.equals({}, transformationConfig.properties)) {
- transformationConfig.properties = this.getNetworkProperties(networkData.graph)
+ transformationConfig.properties = this.getNetworkProperties(networkData.graph);
}
- this.targetEl.empty().append('<svg></svg>')
+ this.targetEl.empty().append('<svg></svg>');
- const width = this.targetEl.width()
- const height = this.targetEl.height()
- const self = this
- const defaultOpacity = 0
- const nodeSize = 10
- const textOffset = 3
- const linkSize = 10
+ const width = this.targetEl.width();
+ const height = this.targetEl.height();
+ const self = this;
+ const defaultOpacity = 0;
+ const nodeSize = 10;
+ const textOffset = 3;
+ const linkSize = 10;
const arcPath = (leftHand, d) => {
- let start = leftHand ? d.source : d.target
- let end = leftHand ? d.target : d.source
- let dx = end.x - start.x
- let dy = end.y - start.y
+ let start = leftHand ? d.source : d.target;
+ let end = leftHand ? d.target : d.source;
+ let dx = end.x - start.x;
+ let dy = end.y - start.y;
let dr = d.totalCount === 1
- ? 0 : Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)) / (1 + (1 / d.totalCount) * (d.count - 1))
- let sweep = leftHand ? 0 : 1
- return `M${start.x},${start.y}A${dr},${dr} 0 0,${sweep} ${end.x},${end.y}`
- }
+ ? 0 : Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)) / (1 + (1 / d.totalCount) * (d.count - 1));
+ let sweep = leftHand ? 0 : 1;
+ return `M${start.x},${start.y}A${dr},${dr} 0 0,${sweep} ${end.x},${end.y}`;
+ };
// Use elliptical arc path segments to doubly-encode directionality.
const tick = () => {
// Links
linkPath.attr('d', function(d) {
- return arcPath(true, d)
- })
+ return arcPath(true, d);
+ });
textPath.attr('d', function(d) {
- return arcPath(d.source.x < d.target.x, d)
- })
+ return arcPath(d.source.x < d.target.x, d);
+ });
// Nodes
- circle.attr('transform', (d) => `translate(${d.x},${d.y})`)
- text.attr('transform', (d) => `translate(${d.x},${d.y})`)
- }
+ circle.attr('transform', (d) => `translate(${d.x},${d.y})`);
+ text.attr('transform', (d) => `translate(${d.x},${d.y})`);
+ };
const setOpacity = (scale) => {
- let opacity = scale >= +transformationConfig.d3Graph.zoom.minScale ? 1 : 0
+ let opacity = scale >= +transformationConfig.d3Graph.zoom.minScale ? 1 : 0;
this.svg.selectAll('.nodeLabel')
- .style('opacity', opacity)
+ .style('opacity', opacity);
this.svg.selectAll('textPath')
- .style('opacity', opacity)
- }
+ .style('opacity', opacity);
+ };
const zoom = d3.behavior.zoom()
.scaleExtent([1, 10])
.on('zoom', () => {
- console.log('zoom')
- setOpacity(d3.event.scale)
- container.attr('transform', `translate(${d3.event.translate})scale(${d3.event.scale})`)
- })
+ console.log('zoom');
+ setOpacity(d3.event.scale);
+ container.attr('transform', `translate(${d3.event.translate})scale(${d3.event.scale})`);
+ });
this.svg = d3.select(`#${this.containerId} svg`)
.attr('width', width)
.attr('height', height)
- .call(zoom)
+ .call(zoom);
this.force = d3.layout.force()
.charge(transformationConfig.d3Graph.forceLayout.charge)
@@ -137,54 +137,56 @@ export default class NetworkVisualization extends Visualization {
.links(networkData.graph.edges)
.size([width, height])
.on('start', () => {
- console.log('force layout start')
- this.$timeout(() => { this.force.stop() }, transformationConfig.d3Graph.forceLayout.timeout)
+ console.log('force layout start');
+ this.$timeout(() => {
+ this.force.stop();
+ }, transformationConfig.d3Graph.forceLayout.timeout);
})
.on('end', () => {
- console.log('force layout stop')
- setOpacity(zoom.scale())
+ console.log('force layout stop');
+ setOpacity(zoom.scale());
})
- .start()
+ .start();
const renderFooterOnClick = (entity, type) => {
- const footerId = this.containerId + '_footer'
- const obj = {id: entity.id, label: entity.defaultLabel || entity.label, type: type}
- let html = [`<li><b>${obj.type}_id:</b> ${obj.id}</li>`]
+ const footerId = this.containerId + '_footer';
+ const obj = {id: entity.id, label: entity.defaultLabel || entity.label, type: type};
+ let html = [`<li><b>${obj.type}_id:</b> ${obj.id}</li>`];
if (obj.label) {
- html.push(`<li><b>${obj.type}_type:</b> ${obj.label}</li>`)
+ html.push(`<li><b>${obj.type}_type:</b> ${obj.label}</li>`);
}
html = html.concat(_.map(entity.data, (v, k) => {
- return `<li><b>${k}:</b> ${v}</li>`
- }))
+ return `<li><b>${k}:</b> ${v}</li>`;
+ }));
angular.element('#' + footerId)
.find('.list-inline')
.empty()
- .append(html.join(''))
- }
+ .append(html.join(''));
+ };
const drag = d3.behavior.drag()
.origin((d) => d)
.on('dragstart', function(d) {
- console.log('dragstart')
- d3.event.sourceEvent.stopPropagation()
- d3.select(this).classed('dragging', true)
- self.force.stop()
+ console.log('dragstart');
+ d3.event.sourceEvent.stopPropagation();
+ d3.select(this).classed('dragging', true);
+ self.force.stop();
})
.on('drag', function(d) {
- console.log('drag')
- d.px += d3.event.dx
- d.py += d3.event.dy
- d.x += d3.event.dx
- d.y += d3.event.dy
+ console.log('drag');
+ d.px += d3.event.dx;
+ d.py += d3.event.dy;
+ d.x += d3.event.dx;
+ d.y += d3.event.dy;
})
.on('dragend', function(d) {
- console.log('dragend')
- d.fixed = true
- d3.select(this).classed('dragging', false)
- self.force.resume()
- })
+ console.log('dragend');
+ d.fixed = true;
+ d3.select(this).classed('dragging', false);
+ self.force.resume();
+ });
- const container = this.svg.append('g')
+ const container = this.svg.append('g');
if (networkData.graph.directed) {
container.append('svg:defs').selectAll('marker')
.data(['arrowMarker-' + this.containerId])
@@ -198,26 +200,26 @@ export default class NetworkVisualization extends Visualization {
.attr('markerHeight', 4)
.attr('orient', 'auto')
.append('svg:path')
- .attr('d', 'M0,-5L10,0L0,5')
+ .attr('d', 'M0,-5L10,0L0,5');
}
// Links
const link = container.append('svg:g')
.on('click', () => {
- renderFooterOnClick(d3.select(d3.event.target).datum(), 'edge')
+ renderFooterOnClick(d3.select(d3.event.target).datum(), 'edge');
})
.selectAll('g.link')
.data(self.force.links())
.enter()
- .append('g')
- const getPathId = (d) => this.containerId + '_' + d.source.index + '_' + d.target.index + '_' + d.count
- const showLabel = (d) => this._showNodeLabel(d)
+ .append('g');
+ const getPathId = (d) => this.containerId + '_' + d.source.index + '_' + d.target.index + '_' + d.count;
+ const showLabel = (d) => this._showNodeLabel(d);
const linkPath = link.append('svg:path')
.attr('class', 'link')
.attr('size', linkSize)
- .attr('marker-end', `url(#arrowMarker-${this.containerId})`)
+ .attr('marker-end', `url(#arrowMarker-${this.containerId})`);
const textPath = link.append('svg:path')
.attr('id', getPathId)
- .attr('class', 'textpath')
+ .attr('class', 'textpath');
container.append('svg:g')
.selectAll('.pathLabel')
.data(self.force.links())
@@ -229,11 +231,11 @@ export default class NetworkVisualization extends Visualization {
.attr('text-anchor', 'middle')
.attr('xlink:href', (d) => '#' + getPathId(d))
.text((d) => d.label)
- .style('opacity', defaultOpacity)
+ .style('opacity', defaultOpacity);
// Nodes
const circle = container.append('svg:g')
.on('click', () => {
- renderFooterOnClick(d3.select(d3.event.target).datum(), 'node')
+ renderFooterOnClick(d3.select(d3.event.target).datum(), 'node');
})
.selectAll('circle')
.data(self.force.nodes())
@@ -241,37 +243,37 @@ export default class NetworkVisualization extends Visualization {
.attr('r', (d) => nodeSize)
.attr('fill', (d) => networkData.graph.labels && d.label in networkData.graph.labels
? networkData.graph.labels[d.label] : '#000000')
- .call(drag)
+ .call(drag);
const text = container.append('svg:g').selectAll('g')
.data(self.force.nodes())
- .enter().append('svg:g')
+ .enter().append('svg:g');
text.append('svg:text')
.attr('x', (d) => nodeSize + textOffset)
.attr('size', nodeSize)
.attr('y', '.31em')
.attr('class', (d) => 'nodeLabel shadow label-' + d.label)
.text(showLabel)
- .style('opacity', defaultOpacity)
+ .style('opacity', defaultOpacity);
text.append('svg:text')
.attr('x', (d) => nodeSize + textOffset)
.attr('size', nodeSize)
.attr('y', '.31em')
.attr('class', (d) => 'nodeLabel label-' + d.label)
.text(showLabel)
- .style('opacity', defaultOpacity)
+ .style('opacity', defaultOpacity);
}
destroy() {
}
_showNodeLabel(d) {
- const transformationConfig = this.transformation.getSetting().scope.config
- const selectedLabel = (transformationConfig.properties[d.label] || {selected: 'label'}).selected
- return d.data[selectedLabel] || d[selectedLabel]
+ const transformationConfig = this.transformation.getSetting().scope.config;
+ const selectedLabel = (transformationConfig.properties[d.label] || {selected: 'label'}).selected;
+ return d.data[selectedLabel] || d[selectedLabel];
}
getTransformation() {
- return this.transformation
+ return this.transformation;
}
setNodesDefaults() {
@@ -281,56 +283,56 @@ export default class NetworkVisualization extends Visualization {
graph.edges
.sort((a, b) => {
if (a.source > b.source) {
- return 1
+ return 1;
} else if (a.source < b.source) {
- return -1
+ return -1;
} else if (a.target > b.target) {
- return 1
+ return 1;
} else if (a.target < b.target) {
- return -1
+ return -1;
} else {
- return 0
+ return 0;
}
- })
+ });
graph.edges
.forEach((edge, index) => {
- let prevEdge = graph.edges[index - 1]
+ let prevEdge = graph.edges[index - 1];
edge.count = (index > 0 && +edge.source === +prevEdge.source && +edge.target === +prevEdge.target
- ? prevEdge.count : 0) + 1
+ ? prevEdge.count : 0) + 1;
edge.totalCount = graph.edges
.filter((innerEdge) => +edge.source === +innerEdge.source && +edge.target === +innerEdge.target)
- .length
- })
+ .length;
+ });
graph.edges
.forEach((edge) => {
if (typeof +edge.source === 'number') {
// edge.source = graph.nodes.filter((node) => +edge.source === +node.id)[0] || null
- edge.source = _.find(graph.nodes, (node) => +edge.source === +node.id)
+ edge.source = _.find(graph.nodes, (node) => +edge.source === +node.id);
}
if (typeof +edge.target === 'number') {
// edge.target = graph.nodes.filter((node) => +edge.target === +node.id)[0] || null
- edge.target = _.find(graph.nodes, (node) => +edge.target === +node.id)
+ edge.target = _.find(graph.nodes, (node) => +edge.target === +node.id);
}
- })
+ });
}
getNetworkProperties(graph) {
- const baseCols = ['id', 'label']
- const properties = {}
+ const baseCols = ['id', 'label'];
+ const properties = {};
graph.nodes.forEach(function(node) {
- const hasLabel = 'label' in node && node.label !== ''
+ const hasLabel = 'label' in node && node.label !== '';
if (!hasLabel) {
- return
+ return;
}
- const label = node.label
- const hasKey = hasLabel && label in properties
+ const label = node.label;
+ const hasKey = hasLabel && label in properties;
const keys = _.uniq(Object.keys(node.data || {})
- .concat(hasKey ? properties[label].keys : baseCols))
+ .concat(hasKey ? properties[label].keys : baseCols));
if (!hasKey) {
- properties[label] = {selected: 'label'}
+ properties[label] = {selected: 'label'};
}
- properties[label].keys = keys
- })
- return properties
+ properties[label].keys = keys;
+ });
+ return properties;
}
}
[10/12] zeppelin git commit: [ZEPPELIN-3245] checkstyle/eslintrc for
zeppelin-web (JavaScript)
Posted by pr...@apache.org.
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/jobmanager/jobmanager.component.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/jobmanager/jobmanager.component.js b/zeppelin-web/src/app/jobmanager/jobmanager.component.js
index 364cc45..c883a11 100644
--- a/zeppelin-web/src/app/jobmanager/jobmanager.component.js
+++ b/zeppelin-web/src/app/jobmanager/jobmanager.component.js
@@ -12,129 +12,132 @@
* limitations under the License.
*/
-import './job/job.component'
-import { JobManagerFilter } from './jobmanager.filter'
-import { JobManagerService} from './jobmanager.service'
+import './job/job.component';
+import {JobManagerFilter} from './jobmanager.filter';
+import {JobManagerService} from './jobmanager.service';
-import { getJobIconByStatus, getJobColorByStatus } from './job-status'
+import {getJobIconByStatus, getJobColorByStatus} from './job-status';
angular.module('zeppelinWebApp')
.controller('JobManagerCtrl', JobManagerController)
.filter('JobManager', JobManagerFilter)
- .service('JobManagerService', JobManagerService)
+ .service('JobManagerService', JobManagerService);
const JobDateSorter = {
RECENTLY_UPDATED: 'Recently Update',
OLDEST_UPDATED: 'Oldest Updated',
-}
+};
function JobManagerController($scope, ngToast, JobManagerFilter, JobManagerService) {
- 'ngInject'
+ 'ngInject';
- $scope.isFilterLoaded = false
- $scope.jobs = []
+ $scope.isFilterLoaded = false;
+ $scope.jobs = [];
$scope.sorter = {
- availableDateSorter: Object.keys(JobDateSorter).map(key => { return JobDateSorter[key] }),
+ availableDateSorter: Object.keys(JobDateSorter).map((key) => {
+ return JobDateSorter[key];
+ }),
currentDateSorter: JobDateSorter.RECENTLY_UPDATED,
- }
- $scope.filteredJobs = $scope.jobs
+ };
+ $scope.filteredJobs = $scope.jobs;
$scope.filterConfig = {
isRunningAlwaysTop: true,
noteNameFilterValue: '',
interpreterFilterValue: '*',
isSortByAsc: true,
- }
+ };
$scope.pagination = {
currentPage: 1,
itemsPerPage: 10,
maxPageCount: 5,
- }
+ };
- ngToast.dismiss()
- init()
+ ngToast.dismiss();
+ init();
/** functions */
$scope.setJobDateSorter = function(dateSorter) {
- $scope.sorter.currentDateSorter = dateSorter
- }
+ $scope.sorter.currentDateSorter = dateSorter;
+ };
$scope.getJobsInCurrentPage = function(jobs) {
- const cp = $scope.pagination.currentPage
- const itp = $scope.pagination.itemsPerPage
- return jobs.slice((cp - 1) * itp, (cp * itp))
- }
+ const cp = $scope.pagination.currentPage;
+ const itp = $scope.pagination.itemsPerPage;
+ return jobs.slice((cp - 1) * itp, (cp * itp));
+ };
- let asyncNotebookJobFilter = function (jobs, filterConfig) {
+ let asyncNotebookJobFilter = function(jobs, filterConfig) {
return new Promise((resolve, reject) => {
- $scope.filteredJobs = JobManagerFilter(jobs, filterConfig)
- resolve($scope.filteredJobs)
- })
- }
+ // eslint-disable-next-line new-cap
+ $scope.filteredJobs = JobManagerFilter(jobs, filterConfig);
+ resolve($scope.filteredJobs);
+ });
+ };
$scope.$watch('sorter.currentDateSorter', function() {
$scope.filterConfig.isSortByAsc =
- $scope.sorter.currentDateSorter === JobDateSorter.OLDEST_UPDATED
- asyncNotebookJobFilter($scope.jobs, $scope.filterConfig)
- })
+ $scope.sorter.currentDateSorter === JobDateSorter.OLDEST_UPDATED;
+ asyncNotebookJobFilter($scope.jobs, $scope.filterConfig);
+ });
- $scope.getJobIconByStatus = getJobIconByStatus
- $scope.getJobColorByStatus = getJobColorByStatus
+ $scope.getJobIconByStatus = getJobIconByStatus;
+ $scope.getJobColorByStatus = getJobColorByStatus;
- $scope.filterJobs = function (jobs, filterConfig) {
+ $scope.filterJobs = function(jobs, filterConfig) {
asyncNotebookJobFilter(jobs, filterConfig)
.then(() => {
- $scope.isFilterLoaded = true
- })
- .catch(error => {
- console.error('Failed to search jobs from server', error)
+ $scope.isFilterLoaded = true;
})
- }
+ .catch((error) => {
+ console.error('Failed to search jobs from server', error);
+ });
+ };
- $scope.filterValueToName = function (filterValue, maxStringLength) {
+ $scope.filterValueToName = function(filterValue, maxStringLength) {
if (typeof $scope.defaultInterpreters === 'undefined') {
- return
+ return;
}
- let index = $scope.defaultInterpreters.findIndex(intp => intp.value === filterValue)
+ let index = $scope.defaultInterpreters.findIndex((intp) => intp.value === filterValue);
if (typeof $scope.defaultInterpreters[index].name !== 'undefined') {
if (typeof maxStringLength !== 'undefined' &&
maxStringLength > $scope.defaultInterpreters[index].name) {
- return $scope.defaultInterpreters[index].name.substr(0, maxStringLength - 3) + '...'
+ return $scope.defaultInterpreters[index].name.substr(0, maxStringLength - 3) + '...';
}
- return $scope.defaultInterpreters[index].name
+ return $scope.defaultInterpreters[index].name;
} else {
- return 'NONE'
+ return 'NONE';
}
- }
+ };
- $scope.setFilterValue = function (filterValue) {
- $scope.filterConfig.interpreterFilterValue = filterValue
- $scope.filterJobs($scope.jobs, $scope.filterConfig)
- }
+ $scope.setFilterValue = function(filterValue) {
+ $scope.filterConfig.interpreterFilterValue = filterValue;
+ $scope.filterJobs($scope.jobs, $scope.filterConfig);
+ };
$scope.setJobs = function(jobs) {
- $scope.jobs = jobs
+ $scope.jobs = jobs;
let interpreters = $scope.jobs
- .filter(j => typeof j.interpreter !== 'undefined')
- .map(j => j.interpreter)
- interpreters = [...new Set(interpreters)] // remove duplicated interpreters
+ .filter((j) => typeof j.interpreter !== 'undefined')
+ .map((j) => j.interpreter);
+ interpreters = [...new Set(interpreters)]; // remove duplicated interpreters
- $scope.defaultInterpreters = [ { name: 'ALL', value: '*' } ]
+ $scope.defaultInterpreters = [{name: 'ALL', value: '*'}];
for (let i = 0; i < interpreters.length; i++) {
- $scope.defaultInterpreters.push({ name: interpreters[i], value: interpreters[i] })
+ $scope.defaultInterpreters.push({name: interpreters[i], value: interpreters[i]});
}
- }
+ };
function init() {
- JobManagerService.getJobs()
- JobManagerService.subscribeSetJobs($scope, setJobsCallback)
- JobManagerService.subscribeUpdateJobs($scope, updateJobsCallback)
+ JobManagerService.getJobs();
+ JobManagerService.subscribeSetJobs($scope, setJobsCallback);
+ JobManagerService.subscribeUpdateJobs($scope, updateJobsCallback);
- $scope.$on('$destroy', function () {
- JobManagerService.disconnect()
- })
+ $scope.$on('$destroy', function() {
+ JobManagerService.disconnect();
+ });
}
/*
@@ -142,45 +145,45 @@ function JobManagerController($scope, ngToast, JobManagerFilter, JobManagerServi
*/
function setJobsCallback(event, response) {
- const jobs = response.jobs
- $scope.setJobs(jobs)
- $scope.filterJobs($scope.jobs, $scope.filterConfig)
+ const jobs = response.jobs;
+ $scope.setJobs(jobs);
+ $scope.filterJobs($scope.jobs, $scope.filterConfig);
}
function updateJobsCallback(event, response) {
- let jobs = $scope.jobs
+ let jobs = $scope.jobs;
let jobByNoteId = jobs.reduce((acc, j) => {
- const noteId = j.noteId
- acc[noteId] = j
- return acc
- }, {})
+ const noteId = j.noteId;
+ acc[noteId] = j;
+ return acc;
+ }, {});
- let updatedJobs = response.jobs
- updatedJobs.map(updatedJob => {
+ let updatedJobs = response.jobs;
+ updatedJobs.map((updatedJob) => {
if (typeof jobByNoteId[updatedJob.noteId] === 'undefined') {
- let newItem = angular.copy(updatedJob)
- jobs.push(newItem)
- jobByNoteId[updatedJob.noteId] = newItem
+ let newItem = angular.copy(updatedJob);
+ jobs.push(newItem);
+ jobByNoteId[updatedJob.noteId] = newItem;
} else {
- let job = jobByNoteId[updatedJob.noteId]
+ let job = jobByNoteId[updatedJob.noteId];
if (updatedJob.isRemoved === true) {
- delete jobByNoteId[updatedJob.noteId]
- let removeIndex = jobs.findIndex(j => j.noteId === updatedJob.noteId)
+ delete jobByNoteId[updatedJob.noteId];
+ let removeIndex = jobs.findIndex((j) => j.noteId === updatedJob.noteId);
if (removeIndex) {
- jobs.splice(removeIndex, 1)
+ jobs.splice(removeIndex, 1);
}
} else {
// update the job
- job.isRunningJob = updatedJob.isRunningJob
- job.noteName = updatedJob.noteName
- job.noteType = updatedJob.noteType
- job.interpreter = updatedJob.interpreter
- job.unixTimeLastRun = updatedJob.unixTimeLastRun
- job.paragraphs = updatedJob.paragraphs
+ job.isRunningJob = updatedJob.isRunningJob;
+ job.noteName = updatedJob.noteName;
+ job.noteType = updatedJob.noteType;
+ job.interpreter = updatedJob.interpreter;
+ job.unixTimeLastRun = updatedJob.unixTimeLastRun;
+ job.paragraphs = updatedJob.paragraphs;
}
}
- })
- $scope.filterJobs(jobs, $scope.filterConfig)
+ });
+ $scope.filterJobs(jobs, $scope.filterConfig);
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/jobmanager/jobmanager.component.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/jobmanager/jobmanager.component.test.js b/zeppelin-web/src/app/jobmanager/jobmanager.component.test.js
index a4b858b..7604142 100644
--- a/zeppelin-web/src/app/jobmanager/jobmanager.component.test.js
+++ b/zeppelin-web/src/app/jobmanager/jobmanager.component.test.js
@@ -1,26 +1,26 @@
describe('JobManagerComponent', () => {
- let $scope
- let $controller
+ let $scope;
+ let $controller;
- beforeEach(angular.mock.module('zeppelinWebApp'))
+ beforeEach(angular.mock.module('zeppelinWebApp'));
beforeEach(angular.mock.inject((_$rootScope_, _$controller_) => {
- $scope = _$rootScope_.$new()
- $controller = _$controller_
- }))
+ $scope = _$rootScope_.$new();
+ $controller = _$controller_;
+ }));
it('should set jobs using `setJobs`', () => {
- let ctrl = $controller('JobManagerCtrl', { $scope: $scope, })
- expect(ctrl).toBeDefined()
+ let ctrl = $controller('JobManagerCtrl', {$scope: $scope});
+ expect(ctrl).toBeDefined();
const mockJobs = [
- { noteId: 'TN01', interpreter: 'spark', },
- { noteId: 'TN02', interpreter: 'spark', },
- ]
+ {noteId: 'TN01', interpreter: 'spark'},
+ {noteId: 'TN02', interpreter: 'spark'},
+ ];
- $scope.setJobs(mockJobs)
+ $scope.setJobs(mockJobs);
expect($scope.defaultInterpreters).toEqual([
- { name: 'ALL', value: '*', },
- { name: 'spark', value: 'spark', },
- ])
- })
-})
+ {name: 'ALL', value: '*'},
+ {name: 'spark', value: 'spark'},
+ ]);
+ });
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/jobmanager/jobmanager.filter.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/jobmanager/jobmanager.filter.js b/zeppelin-web/src/app/jobmanager/jobmanager.filter.js
index d6c8d69..c4abb1c 100644
--- a/zeppelin-web/src/app/jobmanager/jobmanager.filter.js
+++ b/zeppelin-web/src/app/jobmanager/jobmanager.filter.js
@@ -13,44 +13,44 @@
*/
export function JobManagerFilter() {
- function filterContext (jobs, filterConfig) {
- let interpreter = filterConfig.interpreterFilterValue
- let noteName = filterConfig.noteNameFilterValue
- let isSortByAsc = filterConfig.isSortByAsc
- let filteredJobs = jobs
+ function filterContext(jobs, filterConfig) {
+ let interpreter = filterConfig.interpreterFilterValue;
+ let noteName = filterConfig.noteNameFilterValue;
+ let isSortByAsc = filterConfig.isSortByAsc;
+ let filteredJobs = jobs;
if (typeof interpreter === 'undefined') {
filteredJobs = filteredJobs.filter((jobItem) => {
- return typeof jobItem.interpreter === 'undefined'
- })
+ return typeof jobItem.interpreter === 'undefined';
+ });
} else if (interpreter !== '*') {
- filteredJobs = filteredJobs.filter(j => j.interpreter === interpreter)
+ filteredJobs = filteredJobs.filter((j) => j.interpreter === interpreter);
}
// filter by note name
if (noteName !== '') {
filteredJobs = filteredJobs.filter((jobItem) => {
- let lowerFilterValue = noteName.toLocaleLowerCase()
- let lowerNotebookName = jobItem.noteName.toLocaleLowerCase()
- return lowerNotebookName.match(new RegExp('.*' + lowerFilterValue + '.*'))
- })
+ let lowerFilterValue = noteName.toLocaleLowerCase();
+ let lowerNotebookName = jobItem.noteName.toLocaleLowerCase();
+ return lowerNotebookName.match(new RegExp('.*' + lowerFilterValue + '.*'));
+ });
}
// sort by name
filteredJobs = filteredJobs.sort((jobItem) => {
- return jobItem.noteName.toLowerCase()
- })
+ return jobItem.noteName.toLowerCase();
+ });
// sort by timestamp
filteredJobs = filteredJobs.sort((x, y) => {
if (isSortByAsc) {
- return x.unixTimeLastRun - y.unixTimeLastRun
+ return x.unixTimeLastRun - y.unixTimeLastRun;
} else {
- return y.unixTimeLastRun - x.unixTimeLastRun
+ return y.unixTimeLastRun - x.unixTimeLastRun;
}
- })
+ });
- return filteredJobs
+ return filteredJobs;
}
- return filterContext
+ return filterContext;
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/jobmanager/jobmanager.service.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/jobmanager/jobmanager.service.js b/zeppelin-web/src/app/jobmanager/jobmanager.service.js
index 603950f..472ac6d 100644
--- a/zeppelin-web/src/app/jobmanager/jobmanager.service.js
+++ b/zeppelin-web/src/app/jobmanager/jobmanager.service.js
@@ -14,51 +14,51 @@
export class JobManagerService {
constructor($http, $rootScope, baseUrlSrv, websocketMsgSrv) {
- 'ngInject'
+ 'ngInject';
- this.$http = $http
- this.$rootScope = $rootScope
- this.BaseUrlService = baseUrlSrv
- this.WebsocketMessageService = websocketMsgSrv
+ this.$http = $http;
+ this.$rootScope = $rootScope;
+ this.BaseUrlService = baseUrlSrv;
+ this.WebsocketMessageService = websocketMsgSrv;
}
sendStopJobRequest(noteId) {
- const apiURL = this.BaseUrlService.getRestApiBase() + `/notebook/job/${noteId}`
- return this.$http({ method: 'DELETE', url: apiURL, })
+ const apiURL = this.BaseUrlService.getRestApiBase() + `/notebook/job/${noteId}`;
+ return this.$http({method: 'DELETE', url: apiURL});
}
sendRunJobRequest(noteId) {
- const apiURL = this.BaseUrlService.getRestApiBase() + `/notebook/job/${noteId}`
- return this.$http({ method: 'POST', url: apiURL, })
+ const apiURL = this.BaseUrlService.getRestApiBase() + `/notebook/job/${noteId}`;
+ return this.$http({method: 'POST', url: apiURL});
}
getJobs() {
- this.WebsocketMessageService.getJobs()
+ this.WebsocketMessageService.getJobs();
}
disconnect() {
- this.WebsocketMessageService.disconnectJobEvent()
+ this.WebsocketMessageService.disconnectJobEvent();
}
subscribeSetJobs(controllerScope, receiveCallback) {
- const event = 'jobmanager:set-jobs'
- console.log(`(Event) Subscribed: ${event}`)
- const unsubscribeHandler = this.$rootScope.$on(event, receiveCallback)
+ const event = 'jobmanager:set-jobs';
+ console.log(`(Event) Subscribed: ${event}`);
+ const unsubscribeHandler = this.$rootScope.$on(event, receiveCallback);
controllerScope.$on('$destroy', () => {
- console.log(`(Event) Unsubscribed: ${event}`)
- unsubscribeHandler()
- })
+ console.log(`(Event) Unsubscribed: ${event}`);
+ unsubscribeHandler();
+ });
}
subscribeUpdateJobs(controllerScope, receiveCallback) {
- const event = 'jobmanager:update-jobs'
- console.log(`(Event) Subscribed: ${event}`)
- const unsubscribeHandler = this.$rootScope.$on(event, receiveCallback)
+ const event = 'jobmanager:update-jobs';
+ console.log(`(Event) Subscribed: ${event}`);
+ const unsubscribeHandler = this.$rootScope.$on(event, receiveCallback);
controllerScope.$on('$destroy', () => {
- console.log(`(Event) Unsubscribed: ${event}`)
- unsubscribeHandler()
- })
+ console.log(`(Event) Unsubscribed: ${event}`);
+ unsubscribeHandler();
+ });
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/jobmanager/jobmanager.service.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/jobmanager/jobmanager.service.test.js b/zeppelin-web/src/app/jobmanager/jobmanager.service.test.js
index fbb0829..be7196d 100644
--- a/zeppelin-web/src/app/jobmanager/jobmanager.service.test.js
+++ b/zeppelin-web/src/app/jobmanager/jobmanager.service.test.js
@@ -1,56 +1,56 @@
-import { ParagraphStatus } from '../notebook/paragraph/paragraph.status'
-import { JobManagerService } from './jobmanager.service'
+import {ParagraphStatus} from '../notebook/paragraph/paragraph.status';
+import {JobManagerService} from './jobmanager.service';
describe('JobManagerService', () => {
- const baseUrlSrvMock = { getRestApiBase: () => '' }
- let service
- let $httpBackend
+ const baseUrlSrvMock = {getRestApiBase: () => ''};
+ let service;
+ let $httpBackend;
- beforeEach(angular.mock.module('zeppelinWebApp'))
+ beforeEach(angular.mock.module('zeppelinWebApp'));
beforeEach(angular.mock.inject((_$rootScope_, _$httpBackend_, _$http_, _websocketMsgSrv_) => {
- $httpBackend = _$httpBackend_
- service = new JobManagerService(_$http_, _$rootScope_, baseUrlSrvMock, _websocketMsgSrv_)
- }))
+ $httpBackend = _$httpBackend_;
+ service = new JobManagerService(_$http_, _$rootScope_, baseUrlSrvMock, _websocketMsgSrv_);
+ }));
it('should sent valid request to run a job', () => {
- const paragraphs = [ { status: ParagraphStatus.PENDING }, ]
- const mockNote = createMockNote(paragraphs)
+ const paragraphs = [{status: ParagraphStatus.PENDING}];
+ const mockNote = createMockNote(paragraphs);
- const noteId = mockNote.noteId
- service.sendRunJobRequest(noteId)
+ const noteId = mockNote.noteId;
+ service.sendRunJobRequest(noteId);
- const url = `/notebook/job/${noteId}`
+ const url = `/notebook/job/${noteId}`;
$httpBackend
.when('POST', url)
- .respond(200, { /** return nothing */ })
- $httpBackend.expectPOST(url)
- $httpBackend.flush()
+ .respond(200, { /** return nothing */ });
+ $httpBackend.expectPOST(url);
+ $httpBackend.flush();
- checkUnknownHttpRequests()
- })
+ checkUnknownHttpRequests();
+ });
it('should sent valid request to stop a job', () => {
- const paragraphs = [ { status: ParagraphStatus.PENDING }, ]
- const mockNote = createMockNote(paragraphs)
+ const paragraphs = [{status: ParagraphStatus.PENDING}];
+ const mockNote = createMockNote(paragraphs);
- const noteId = mockNote.noteId
- service.sendStopJobRequest(noteId)
+ const noteId = mockNote.noteId;
+ service.sendStopJobRequest(noteId);
- const url = `/notebook/job/${noteId}`
+ const url = `/notebook/job/${noteId}`;
$httpBackend
.when('DELETE', url)
- .respond(200, { /** return nothing */ })
- $httpBackend.expectDELETE(url)
- $httpBackend.flush()
+ .respond(200, { /** return nothing */ });
+ $httpBackend.expectDELETE(url);
+ $httpBackend.flush();
- checkUnknownHttpRequests()
- })
+ checkUnknownHttpRequests();
+ });
function checkUnknownHttpRequests() {
- $httpBackend.verifyNoOutstandingExpectation()
- $httpBackend.verifyNoOutstandingRequest()
+ $httpBackend.verifyNoOutstandingExpectation();
+ $httpBackend.verifyNoOutstandingRequest();
}
function createMockNote(paragraphs) {
@@ -60,6 +60,6 @@ describe('JobManagerService', () => {
noteId: 'NT01',
noteName: 'TestNote01',
noteType: 'normal',
- }
+ };
}
-})
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook-repository/notebook-repository.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook-repository/notebook-repository.controller.js b/zeppelin-web/src/app/notebook-repository/notebook-repository.controller.js
index 0f62bc0..d6d13b3 100644
--- a/zeppelin-web/src/app/notebook-repository/notebook-repository.controller.js
+++ b/zeppelin-web/src/app/notebook-repository/notebook-repository.controller.js
@@ -12,76 +12,76 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').controller('NotebookRepositoryCtrl', NotebookRepositoryCtrl)
+angular.module('zeppelinWebApp').controller('NotebookRepositoryCtrl', NotebookRepositoryCtrl);
function NotebookRepositoryCtrl($http, baseUrlSrv, ngToast) {
- 'ngInject'
+ 'ngInject';
- let vm = this
- vm.notebookRepos = []
- vm.showDropdownSelected = showDropdownSelected
- vm.saveNotebookRepo = saveNotebookRepo
+ let vm = this;
+ vm.notebookRepos = [];
+ vm.showDropdownSelected = showDropdownSelected;
+ vm.saveNotebookRepo = saveNotebookRepo;
- _init()
+ _init();
// Public functions
- function saveNotebookRepo (valueform, repo, data) {
- console.log('data %o', data)
+ function saveNotebookRepo(valueform, repo, data) {
+ console.log('data %o', data);
$http.put(baseUrlSrv.getRestApiBase() + '/notebook-repositories', {
'name': repo.className,
- 'settings': data
- }).success(function (data) {
- let index = _.findIndex(vm.notebookRepos, {'className': repo.className})
+ 'settings': data,
+ }).success(function(data) {
+ let index = _.findIndex(vm.notebookRepos, {'className': repo.className});
if (index >= 0) {
- vm.notebookRepos[index] = data.body
- console.log('repos %o, data %o', vm.notebookRepos, data.body)
+ vm.notebookRepos[index] = data.body;
+ console.log('repos %o, data %o', vm.notebookRepos, data.body);
}
- valueform.$show()
- }).error(function () {
+ valueform.$show();
+ }).error(function() {
ngToast.danger({
content: 'We couldn\'t save that NotebookRepo\'s settings',
verticalPosition: 'bottom',
- timeout: '3000'
- })
- valueform.$show()
- })
+ timeout: '3000',
+ });
+ valueform.$show();
+ });
- return 'manual'
+ return 'manual';
}
- function showDropdownSelected (setting) {
- let index = _.findIndex(setting.value, {'value': setting.selected})
+ function showDropdownSelected(setting) {
+ let index = _.findIndex(setting.value, {'value': setting.selected});
if (index < 0) {
- return 'No value'
+ return 'No value';
} else {
- return setting.value[index].name
+ return setting.value[index].name;
}
}
// Private functions
- function _getInterpreterSettings () {
+ function _getInterpreterSettings() {
$http.get(baseUrlSrv.getRestApiBase() + '/notebook-repositories')
- .success(function (data, status, headers, config) {
- vm.notebookRepos = data.body
- console.log('ya notebookRepos %o', vm.notebookRepos)
- }).error(function (data, status, headers, config) {
+ .success(function(data, status, headers, config) {
+ vm.notebookRepos = data.body;
+ console.log('ya notebookRepos %o', vm.notebookRepos);
+ }).error(function(data, status, headers, config) {
if (status === 401) {
ngToast.danger({
content: 'You don\'t have permission on this page',
verticalPosition: 'bottom',
- timeout: '3000'
- })
- setTimeout(function () {
- window.location = baseUrlSrv.getBase()
- }, 3000)
+ timeout: '3000',
+ });
+ setTimeout(function() {
+ window.location = baseUrlSrv.getBase();
+ }, 3000);
}
- console.log('Error %o %o', status, data.message)
- })
+ console.log('Error %o %o', status, data.message);
+ });
}
- function _init () {
- _getInterpreterSettings()
+ function _init() {
+ _getInterpreterSettings();
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/dropdown-input/dropdown-input.directive.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/dropdown-input/dropdown-input.directive.js b/zeppelin-web/src/app/notebook/dropdown-input/dropdown-input.directive.js
index a64204a..0fe43f7 100644
--- a/zeppelin-web/src/app/notebook/dropdown-input/dropdown-input.directive.js
+++ b/zeppelin-web/src/app/notebook/dropdown-input/dropdown-input.directive.js
@@ -12,15 +12,15 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').directive('dropdownInput', dropdownInputDirective)
+angular.module('zeppelinWebApp').directive('dropdownInput', dropdownInputDirective);
function dropdownInputDirective() {
return {
restrict: 'A',
- link: function (scope, element) {
- element.bind('click', function (event) {
- event.stopPropagation()
- })
- }
- }
+ link: function(scope, element) {
+ element.bind('click', function(event) {
+ event.stopPropagation();
+ });
+ },
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/dynamic-forms/dynamic-forms.directive.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/dynamic-forms/dynamic-forms.directive.js b/zeppelin-web/src/app/notebook/dynamic-forms/dynamic-forms.directive.js
index 40a70eb..1b1043e 100644
--- a/zeppelin-web/src/app/notebook/dynamic-forms/dynamic-forms.directive.js
+++ b/zeppelin-web/src/app/notebook/dynamic-forms/dynamic-forms.directive.js
@@ -12,9 +12,9 @@
* limitations under the License.
*/
-import './dynamic-forms.css'
+import './dynamic-forms.css';
-angular.module('zeppelinWebApp').directive('dynamicForms', DynamicFormDirective)
+angular.module('zeppelinWebApp').directive('dynamicForms', DynamicFormDirective);
function DynamicFormDirective($templateRequest, $compile) {
return {
@@ -27,36 +27,36 @@ function DynamicFormDirective($templateRequest, $compile) {
forms: '=forms',
params: '=params',
action: '=action',
- removeaction: '=removeaction'
+ removeaction: '=removeaction',
},
- link: function (scope, element, attrs, controller) {
- scope.loadForm = this.loadForm
- scope.toggleCheckbox = this.toggleCheckbox
- $templateRequest('app/notebook/dynamic-forms/dynamic-forms.directive.html').then(function (formsHtml) {
- let forms = angular.element(formsHtml)
- element.append(forms)
- $compile(forms)(scope)
- })
+ link: function(scope, element, attrs, controller) {
+ scope.loadForm = this.loadForm;
+ scope.toggleCheckbox = this.toggleCheckbox;
+ $templateRequest('app/notebook/dynamic-forms/dynamic-forms.directive.html').then(function(formsHtml) {
+ let forms = angular.element(formsHtml);
+ element.append(forms);
+ $compile(forms)(scope);
+ });
},
- loadForm: function (formulaire, params) {
- let value = formulaire.defaultValue
+ loadForm: function(formulaire, params) {
+ let value = formulaire.defaultValue;
if (params[formulaire.name]) {
- value = params[formulaire.name]
+ value = params[formulaire.name];
}
- params[formulaire.name] = value
+ params[formulaire.name] = value;
},
- toggleCheckbox: function (formulaire, option, params) {
- let idx = params[formulaire.name].indexOf(option.value)
+ toggleCheckbox: function(formulaire, option, params) {
+ let idx = params[formulaire.name].indexOf(option.value);
if (idx > -1) {
- params[formulaire.name].splice(idx, 1)
+ params[formulaire.name].splice(idx, 1);
} else {
- params[formulaire.name].push(option.value)
+ params[formulaire.name].push(option.value);
}
- }
+ },
- }
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/elastic-input/elastic-input.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/elastic-input/elastic-input.controller.js b/zeppelin-web/src/app/notebook/elastic-input/elastic-input.controller.js
index 507b2f6..c11f95b 100644
--- a/zeppelin-web/src/app/notebook/elastic-input/elastic-input.controller.js
+++ b/zeppelin-web/src/app/notebook/elastic-input/elastic-input.controller.js
@@ -12,10 +12,10 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').controller('ElasticInputCtrl', ElasticInputCtrl)
+angular.module('zeppelinWebApp').controller('ElasticInputCtrl', ElasticInputCtrl);
-function ElasticInputCtrl () {
- let vm = this
- vm.showEditor = false
- vm.value = ''
+function ElasticInputCtrl() {
+ let vm = this;
+ vm.showEditor = false;
+ vm.value = '';
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/note-var-share.service.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/note-var-share.service.js b/zeppelin-web/src/app/notebook/note-var-share.service.js
index e79f389..a5975ce 100644
--- a/zeppelin-web/src/app/notebook/note-var-share.service.js
+++ b/zeppelin-web/src/app/notebook/note-var-share.service.js
@@ -12,28 +12,28 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').service('noteVarShareService', NoteVarShareService)
+angular.module('zeppelinWebApp').service('noteVarShareService', NoteVarShareService);
-function NoteVarShareService () {
- 'ngInject'
+function NoteVarShareService() {
+ 'ngInject';
- let store = {}
+ let store = {};
- this.clear = function () {
- store = {}
- }
+ this.clear = function() {
+ store = {};
+ };
- this.put = function (key, value) {
- store[key] = value
- }
+ this.put = function(key, value) {
+ store[key] = value;
+ };
- this.get = function (key) {
- return store[key]
- }
+ this.get = function(key) {
+ return store[key];
+ };
- this.del = function (key) {
- let v = store[key]
- delete store[key]
- return v
- }
+ this.del = function(key) {
+ let v = store[key];
+ delete store[key];
+ return v;
+ };
}
[12/12] zeppelin git commit: [ZEPPELIN-3245] checkstyle/eslintrc for
zeppelin-web (JavaScript)
Posted by pr...@apache.org.
[ZEPPELIN-3245] checkstyle/eslintrc for zeppelin-web (JavaScript)
Have added this PR to add a rule in eslinerc to have semicolons in javascript source
[Improvement | Refactoring]
* [ZEPPELIN-3245](https://issues.apache.org/jira/browse/ZEPPELIN-3245)
```
cd zeppelin-web
npm install (or yarn install if you have yarn)
npm run lint:once
```
Author: Prabhjyot Singh <pr...@gmail.com>
Closes #2804 from prabhjyotsingh/discuss/eslint_semi_rule and squashes the following commits:
4506f243e [Prabhjyot Singh] eslint rule for space
bc43d68a6 [Prabhjyot Singh] merge `[ZEPPELIN-3177]Resize charts on paragaph resize` changes
2d57ba30b [Prabhjyot Singh] fix failing WEB_E2E="true"
f23cb61d4 [Prabhjyot Singh] remove `"linebreak-style": 0,` and `"no-use-before-define": 0,`
39f37fb88 [Prabhjyot Singh] remove "standard" from eslint
6edac44f6 [Prabhjyot Singh] add `"semi": [2, "always"]` rule in eslinerc
Change-Id: I91546ea973c2c9e7540da1586d6329fc93088eb0
Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/ea2c9447
Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/ea2c9447
Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/ea2c9447
Branch: refs/heads/master
Commit: ea2c944742cea6e8e37e225d1acc67cdb195056e
Parents: f6ef64f
Author: Prabhjyot Singh <pr...@gmail.com>
Authored: Fri Feb 23 09:35:30 2018 +0530
Committer: Prabhjyot Singh <pr...@gmail.com>
Committed: Fri Feb 23 10:24:33 2018 +0530
----------------------------------------------------------------------
.../org/apache/zeppelin/AbstractZeppelinIT.java | 2 +-
zeppelin-web/.eslintrc | 24 +-
zeppelin-web/src/app/app.controller.js | 52 +-
zeppelin-web/src/app/app.controller.test.js | 44 +-
zeppelin-web/src/app/app.js | 162 +-
.../configuration/configuration.controller.js | 42 +-
.../src/app/configuration/configuration.test.js | 92 +-
.../src/app/credential/credential.controller.js | 236 +-
.../src/app/credential/credential.test.js | 132 +-
zeppelin-web/src/app/helium/helium-conf.js | 96 +-
zeppelin-web/src/app/helium/helium-package.js | 32 +-
zeppelin-web/src/app/helium/helium-type.js | 2 +-
.../src/app/helium/helium.controller.js | 424 ++--
zeppelin-web/src/app/helium/helium.service.js | 334 +--
zeppelin-web/src/app/helium/index.js | 4 +-
zeppelin-web/src/app/home/home.controller.js | 188 +-
.../interpreter/interpreter-item.directive.js | 20 +-
.../app/interpreter/interpreter.controller.js | 838 +++----
.../src/app/interpreter/interpreter.filter.js | 12 +-
.../widget/number-widget.directive.js | 20 +-
zeppelin-web/src/app/jobmanager/job-status.js | 26 +-
.../src/app/jobmanager/job/job.component.js | 118 +-
.../app/jobmanager/job/job.component.test.js | 70 +-
.../src/app/jobmanager/jobmanager.component.js | 177 +-
.../app/jobmanager/jobmanager.component.test.js | 34 +-
.../src/app/jobmanager/jobmanager.filter.js | 38 +-
.../src/app/jobmanager/jobmanager.service.js | 46 +-
.../app/jobmanager/jobmanager.service.test.js | 66 +-
.../notebook-repository.controller.js | 78 +-
.../dropdown-input/dropdown-input.directive.js | 14 +-
.../dynamic-forms/dynamic-forms.directive.js | 42 +-
.../elastic-input/elastic-input.controller.js | 10 +-
.../src/app/notebook/note-var-share.service.js | 36 +-
.../src/app/notebook/notebook.controller.js | 1590 ++++++------
.../app/notebook/notebook.controller.test.js | 240 +-
.../notebook/paragraph/clipboard.controller.js | 36 +-
.../code-editor/code-editor.directive.js | 24 +-
.../notebook/paragraph/paragraph.controller.js | 1824 +++++++-------
.../paragraph/paragraph.controller.test.js | 68 +-
.../app/notebook/paragraph/paragraph.status.js | 16 +-
.../notebook/paragraph/resizable.directive.js | 66 +-
.../paragraph/result/result.controller.js | 1118 ++++-----
.../revisions-comparator.component.js | 162 +-
.../notebook/save-as/browser-detect.service.js | 26 +-
.../src/app/notebook/save-as/save-as.service.js | 60 +-
.../src/app/search/result-list.controller.js | 134 +-
zeppelin-web/src/app/search/search.service.js | 24 +-
zeppelin-web/src/app/spell/index.js | 4 +-
zeppelin-web/src/app/spell/spell-base.js | 14 +-
zeppelin-web/src/app/spell/spell-result.js | 182 +-
.../tabledata/advanced-transformation-util.js | 1010 ++++----
.../advanced-transformation-util.test.js | 2288 +++++++++---------
.../app/tabledata/advanced-transformation.js | 202 +-
.../src/app/tabledata/columnselector.js | 54 +-
zeppelin-web/src/app/tabledata/dataset.js | 6 +-
.../src/app/tabledata/datasetfactory.js | 12 +-
.../src/app/tabledata/datasetfactory.test.js | 46 +-
zeppelin-web/src/app/tabledata/network.js | 22 +-
zeppelin-web/src/app/tabledata/networkdata.js | 76 +-
.../src/app/tabledata/networkdata.test.js | 72 +-
zeppelin-web/src/app/tabledata/passthrough.js | 10 +-
zeppelin-web/src/app/tabledata/pivot.js | 240 +-
zeppelin-web/src/app/tabledata/tabledata.js | 64 +-
.../src/app/tabledata/tabledata.test.js | 132 +-
.../src/app/tabledata/transformation.js | 68 +-
.../builtins/visualization-areachart.js | 144 +-
.../builtins/visualization-barchart.js | 122 +-
.../builtins/visualization-d3network.js | 256 +-
.../builtins/visualization-linechart.js | 162 +-
.../builtins/visualization-nvd3chart.js | 242 +-
.../builtins/visualization-piechart.js | 66 +-
.../builtins/visualization-scatterchart.js | 326 +--
.../builtins/visualization-table.js | 318 +--
.../builtins/visualization-util.js | 146 +-
.../src/app/visualization/visualization.js | 108 +-
.../array-ordering/array-ordering.service.js | 44 +-
.../src/components/base-url/base-url.service.js | 40 +-
.../src/components/login/login.controller.js | 88 +-
.../expand-collapse.directive.js | 30 +-
.../src/components/navbar/navbar.controller.js | 258 +-
.../components/navbar/navbar.controller.test.js | 28 +-
.../components/ng-enter/ng-enter.directive.js | 18 +-
.../ng-enter/ng-enter.directive.test.js | 26 +-
.../components/ng-escape/ng-escape.directive.js | 18 +-
.../note-action/note-action.service.js | 144 +-
.../note-create/note-create.controller.js | 120 +-
.../note-create/note-create.controller.test.js | 54 +-
.../components/note-create/visible.directive.js | 40 +-
.../note-import/note-import.controller.js | 176 +-
.../components/note-list/note-list.factory.js | 62 +-
.../note-list/note-list.factory.test.js | 122 +-
.../note-rename/note-rename.controller.js | 44 +-
.../note-rename/note-rename.service.js | 12 +-
.../websocket/websocket-event.factory.js | 204 +-
.../websocket/websocket-message.service.js | 292 +--
zeppelin-web/src/index.js | 118 +-
96 files changed, 8777 insertions(+), 8452 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-integration/src/test/java/org/apache/zeppelin/AbstractZeppelinIT.java
----------------------------------------------------------------------
diff --git a/zeppelin-integration/src/test/java/org/apache/zeppelin/AbstractZeppelinIT.java b/zeppelin-integration/src/test/java/org/apache/zeppelin/AbstractZeppelinIT.java
index b4ebfe9..e1992fb 100644
--- a/zeppelin-integration/src/test/java/org/apache/zeppelin/AbstractZeppelinIT.java
+++ b/zeppelin-integration/src/test/java/org/apache/zeppelin/AbstractZeppelinIT.java
@@ -110,7 +110,7 @@ abstract public class AbstractZeppelinIT {
WebDriverWait block = new WebDriverWait(driver, MAX_BROWSER_TIMEOUT_SEC);
block.until(ExpectedConditions.visibilityOfElementLocated(By.id("noteCreateModal")));
clickAndWait(By.id("createNoteButton"));
- block.until(ExpectedConditions.invisibilityOfElementLocated(By.className("pull-right")));
+ block.until(ExpectedConditions.invisibilityOfElementLocated(By.id("createNoteButton")));
}
protected void deleteTestNotebook(final WebDriver driver) {
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/.eslintrc
----------------------------------------------------------------------
diff --git a/zeppelin-web/.eslintrc b/zeppelin-web/.eslintrc
index 6dca5c8..6207bb9 100644
--- a/zeppelin-web/.eslintrc
+++ b/zeppelin-web/.eslintrc
@@ -1,5 +1,5 @@
{
- "extends": ["eslint:recommended", "google", "standard"],
+ "extends": ["eslint:recommended", "google"],
"env": {
"browser": true,
"jasmine": true,
@@ -31,26 +31,11 @@
"process": false
},
"rules": {
- "array-bracket-spacing": 0,
- "space-before-function-paren": 0,
- "no-unneeded-ternary": 0,
- "comma-dangle": 0,
- "object-curly-spacing": 0,
- "standard/object-curly-even-spacing": 0,
- "arrow-parens": 0,
- "require-jsdoc": 0,
- "valid-jsdoc": 0,
- "no-invalid-this": 0,
- "no-console": 0,
- "guard-for-in": 0,
- "no-mixed-operators": 1,
- "no-useless-escape": 1,
"no-bitwise": 2,
"camelcase": 2,
"curly": 2,
"eqeqeq": 2,
"wrap-iife": [2, "any"],
- "no-use-before-define": 0,
"new-cap": 2,
"no-caller": 2,
"quotes": [2, "single"],
@@ -59,6 +44,11 @@
"no-unused-vars": [2, { "vars": "local", "args": "none" }],
"strict": [2, "global"],
"max-len": [2, {"code": 120, "ignoreComments": true, "ignoreRegExpLiterals": true}],
- "linebreak-style": 0
+ "require-jsdoc": "off",
+ "no-console": ["off"],
+ "valid-jsdoc": "off",
+ "semi": [2, "always"],
+ "no-invalid-this": 1,
+ "indent": ["error", 2, { "SwitchCase": 1 }]
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/app.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/app.controller.js b/zeppelin-web/src/app/app.controller.js
index 6c64a33..904fbd7 100644
--- a/zeppelin-web/src/app/app.controller.js
+++ b/zeppelin-web/src/app/app.controller.js
@@ -12,48 +12,48 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').controller('MainCtrl', MainCtrl)
+angular.module('zeppelinWebApp').controller('MainCtrl', MainCtrl);
-function MainCtrl ($scope, $rootScope, $window, arrayOrderingSrv) {
- 'ngInject'
+function MainCtrl($scope, $rootScope, $window, arrayOrderingSrv) {
+ 'ngInject';
- $scope.looknfeel = 'default'
+ $scope.looknfeel = 'default';
- let init = function () {
- $scope.asIframe = (($window.location.href.indexOf('asIframe') > -1) ? true : false)
- }
+ let init = function() {
+ $scope.asIframe = (($window.location.href.indexOf('asIframe') > -1) ? true : false);
+ };
- init()
+ init();
- $rootScope.$on('setIframe', function (event, data) {
+ $rootScope.$on('setIframe', function(event, data) {
if (!event.defaultPrevented) {
- $scope.asIframe = data
- event.preventDefault()
+ $scope.asIframe = data;
+ event.preventDefault();
}
- })
+ });
- $rootScope.$on('setLookAndFeel', function (event, data) {
+ $rootScope.$on('setLookAndFeel', function(event, data) {
if (!event.defaultPrevented && data && data !== '' && data !== $scope.looknfeel) {
- $scope.looknfeel = data
- event.preventDefault()
+ $scope.looknfeel = data;
+ event.preventDefault();
}
- })
+ });
// Set The lookAndFeel to default on every page
- $rootScope.$on('$routeChangeStart', function (event, next, current) {
- $rootScope.$broadcast('setLookAndFeel', 'default')
- })
+ $rootScope.$on('$routeChangeStart', function(event, next, current) {
+ $rootScope.$broadcast('setLookAndFeel', 'default');
+ });
- $rootScope.noteName = function (note) {
+ $rootScope.noteName = function(note) {
if (!_.isEmpty(note)) {
- return arrayOrderingSrv.getNoteName(note)
+ return arrayOrderingSrv.getNoteName(note);
}
- }
+ };
- BootstrapDialog.defaultOptions.onshown = function () {
- angular.element('#' + this.id).find('.btn:last').focus()
- }
+ BootstrapDialog.defaultOptions.onshown = function() {
+ angular.element('#' + this.id).find('.btn:last').focus();
+ };
// Remove BootstrapDialog animation
- BootstrapDialog.configDefaultOptions({animate: false})
+ BootstrapDialog.configDefaultOptions({animate: false});
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/app.controller.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/app.controller.test.js b/zeppelin-web/src/app/app.controller.test.js
index 67d5034..b6c6261 100644
--- a/zeppelin-web/src/app/app.controller.test.js
+++ b/zeppelin-web/src/app/app.controller.test.js
@@ -1,28 +1,28 @@
-describe('Controller: MainCtrl', function () {
- beforeEach(angular.mock.module('zeppelinWebApp'))
+describe('Controller: MainCtrl', function() {
+ beforeEach(angular.mock.module('zeppelinWebApp'));
- let scope
- let rootScope
+ let scope;
+ let rootScope;
- beforeEach(inject(function ($controller, $rootScope) {
- rootScope = $rootScope
- scope = $rootScope.$new()
+ beforeEach(inject(function($controller, $rootScope) {
+ rootScope = $rootScope;
+ scope = $rootScope.$new();
$controller('MainCtrl', {
- $scope: scope
- })
- }))
+ $scope: scope,
+ });
+ }));
- it('should attach "asIframe" to the scope and the default value should be false', function () {
- expect(scope.asIframe).toBeDefined()
- expect(scope.asIframe).toEqual(false)
- })
+ it('should attach "asIframe" to the scope and the default value should be false', function() {
+ expect(scope.asIframe).toBeDefined();
+ expect(scope.asIframe).toEqual(false);
+ });
- it('should set the default value of "looknfeel to "default"', function () {
- expect(scope.looknfeel).toEqual('default')
- })
+ it('should set the default value of "looknfeel to "default"', function() {
+ expect(scope.looknfeel).toEqual('default');
+ });
- it('should set "asIframe" flag to true when a controller broadcasts setIframe event', function () {
- rootScope.$broadcast('setIframe', true)
- expect(scope.asIframe).toEqual(true)
- })
-})
+ it('should set "asIframe" flag to true when a controller broadcasts setIframe event', function() {
+ rootScope.$broadcast('setIframe', true);
+ expect(scope.asIframe).toEqual(true);
+ });
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/app.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/app.js b/zeppelin-web/src/app/app.js
index ed89dd8..64ceff0 100644
--- a/zeppelin-web/src/app/app.js
+++ b/zeppelin-web/src/app/app.js
@@ -15,14 +15,14 @@
* limitations under the License.
*/
-import 'headroom.js'
-import 'headroom.js/dist/angular.headroom'
+import 'headroom.js';
+import 'headroom.js/dist/angular.headroom';
-import 'scrollmonitor/scrollMonitor.js'
-import 'angular-viewport-watch/angular-viewport-watch.js'
+import 'scrollmonitor/scrollMonitor.js';
+import 'angular-viewport-watch/angular-viewport-watch.js';
-import 'angular-ui-grid/ui-grid.css'
-import 'angular-ui-grid'
+import 'angular-ui-grid/ui-grid.css';
+import 'angular-ui-grid';
const requiredModules = [
'ngCookies',
@@ -56,167 +56,169 @@ const requiredModules = [
'ui.grid.moveColumns',
'ui.grid.pagination',
'ui.grid.saveState',
-]
+];
// headroom should not be used for CI, since we have to execute some integration tests.
// otherwise, they will fail.
-if (!process.env.BUILD_CI) { requiredModules.push('headroom') }
+if (!process.env.BUILD_CI) {
+ requiredModules.push('headroom');
+}
let zeppelinWebApp = angular.module('zeppelinWebApp', requiredModules)
- .filter('breakFilter', function () {
- return function (text) {
+ .filter('breakFilter', function() {
+ return function(text) {
// eslint-disable-next-line no-extra-boolean-cast
if (!!text) {
- return text.replace(/\n/g, '<br />')
+ return text.replace(/\n/g, '<br />');
}
- }
+ };
})
- .config(function ($httpProvider, $routeProvider, ngToastProvider) {
+ .config(function($httpProvider, $routeProvider, ngToastProvider) {
// withCredentials when running locally via grunt
- $httpProvider.defaults.withCredentials = true
+ $httpProvider.defaults.withCredentials = true;
let visBundleLoad = {
- load: ['heliumService', function (heliumService) {
- return heliumService.load
- }]
- }
+ load: ['heliumService', function(heliumService) {
+ return heliumService.load;
+ }],
+ };
$routeProvider
.when('/', {
- templateUrl: 'app/home/home.html'
+ templateUrl: 'app/home/home.html',
})
.when('/notebook/:noteId', {
templateUrl: 'app/notebook/notebook.html',
controller: 'NotebookCtrl',
- resolve: visBundleLoad
+ resolve: visBundleLoad,
})
.when('/notebook/:noteId/paragraph?=:paragraphId', {
templateUrl: 'app/notebook/notebook.html',
controller: 'NotebookCtrl',
- resolve: visBundleLoad
+ resolve: visBundleLoad,
})
.when('/notebook/:noteId/paragraph/:paragraphId?', {
templateUrl: 'app/notebook/notebook.html',
controller: 'NotebookCtrl',
- resolve: visBundleLoad
+ resolve: visBundleLoad,
})
.when('/notebook/:noteId/revision/:revisionId', {
templateUrl: 'app/notebook/notebook.html',
controller: 'NotebookCtrl',
- resolve: visBundleLoad
+ resolve: visBundleLoad,
})
.when('/jobmanager', {
templateUrl: 'app/jobmanager/jobmanager.html',
- controller: 'JobManagerCtrl'
+ controller: 'JobManagerCtrl',
})
.when('/interpreter', {
templateUrl: 'app/interpreter/interpreter.html',
- controller: 'InterpreterCtrl'
+ controller: 'InterpreterCtrl',
})
.when('/notebookRepos', {
templateUrl: 'app/notebook-repository/notebook-repository.html',
controller: 'NotebookRepositoryCtrl',
- controllerAs: 'noterepo'
+ controllerAs: 'noterepo',
})
.when('/credential', {
templateUrl: 'app/credential/credential.html',
- controller: 'CredentialCtrl'
+ controller: 'CredentialCtrl',
})
.when('/helium', {
templateUrl: 'app/helium/helium.html',
- controller: 'HeliumCtrl'
+ controller: 'HeliumCtrl',
})
.when('/configuration', {
templateUrl: 'app/configuration/configuration.html',
- controller: 'ConfigurationCtrl'
+ controller: 'ConfigurationCtrl',
})
.when('/search/:searchTerm', {
templateUrl: 'app/search/result-list.html',
- controller: 'SearchResultCtrl'
+ controller: 'SearchResultCtrl',
})
.otherwise({
- redirectTo: '/'
- })
+ redirectTo: '/',
+ });
ngToastProvider.configure({
dismissButton: true,
dismissOnClick: false,
combineDuplications: true,
- timeout: 6000
- })
+ timeout: 6000,
+ });
})
// handel logout on API failure
- .config(function ($httpProvider, $provide) {
+ .config(function($httpProvider, $provide) {
if (process.env.PROD) {
- $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'
+ $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
}
- $provide.factory('httpInterceptor', function ($q, $rootScope) {
+ $provide.factory('httpInterceptor', function($q, $rootScope) {
return {
- 'responseError': function (rejection) {
+ 'responseError': function(rejection) {
if (rejection.status === 405) {
- let data = {}
- data.info = ''
- $rootScope.$broadcast('session_logout', data)
+ let data = {};
+ data.info = '';
+ $rootScope.$broadcast('session_logout', data);
}
- $rootScope.$broadcast('httpResponseError', rejection)
- return $q.reject(rejection)
- }
- }
- })
- $httpProvider.interceptors.push('httpInterceptor')
+ $rootScope.$broadcast('httpResponseError', rejection);
+ return $q.reject(rejection);
+ },
+ };
+ });
+ $httpProvider.interceptors.push('httpInterceptor');
})
- .constant('TRASH_FOLDER_ID', '~Trash')
+ .constant('TRASH_FOLDER_ID', '~Trash');
-function auth () {
- let $http = angular.injector(['ng']).get('$http')
- let baseUrlSrv = angular.injector(['zeppelinWebApp']).get('baseUrlSrv')
+function auth() {
+ let $http = angular.injector(['ng']).get('$http');
+ let baseUrlSrv = angular.injector(['zeppelinWebApp']).get('baseUrlSrv');
// withCredentials when running locally via grunt
- $http.defaults.withCredentials = true
+ $http.defaults.withCredentials = true;
jQuery.ajaxSetup({
dataType: 'json',
xhrFields: {
- withCredentials: true
+ withCredentials: true,
},
- crossDomain: true
- })
- let config = (process.env.PROD) ? {headers: { 'X-Requested-With': 'XMLHttpRequest' }} : {}
- return $http.get(baseUrlSrv.getRestApiBase() + '/security/ticket', config).then(function (response) {
- zeppelinWebApp.run(function ($rootScope) {
- let res = angular.fromJson(response.data).body
+ crossDomain: true,
+ });
+ let config = (process.env.PROD) ? {headers: {'X-Requested-With': 'XMLHttpRequest'}} : {};
+ return $http.get(baseUrlSrv.getRestApiBase() + '/security/ticket', config).then(function(response) {
+ zeppelinWebApp.run(function($rootScope) {
+ let res = angular.fromJson(response.data).body;
if (res['redirectURL']) {
- window.location.href = res['redirectURL'] + window.location.href
+ window.location.href = res['redirectURL'] + window.location.href;
} else {
- $rootScope.ticket = res
- $rootScope.ticket.screenUsername = $rootScope.ticket.principal
+ $rootScope.ticket = res;
+ $rootScope.ticket.screenUsername = $rootScope.ticket.principal;
if ($rootScope.ticket.principal.indexOf('#Pac4j') === 0) {
- let re = ', name=(.*?),'
- $rootScope.ticket.screenUsername = $rootScope.ticket.principal.match(re)[1]
+ let re = ', name=(.*?),';
+ $rootScope.ticket.screenUsername = $rootScope.ticket.principal.match(re)[1];
}
}
- })
- }, function (errorResponse) {
+ });
+ }, function(errorResponse) {
// Handle error case
- let redirect = errorResponse.headers('Location')
+ let redirect = errorResponse.headers('Location');
if (errorResponse.status === 401 && redirect !== undefined) {
// Handle page redirect
- window.location.href = redirect
+ window.location.href = redirect;
}
- })
+ });
}
-function bootstrapApplication () {
- zeppelinWebApp.run(function ($rootScope, $location) {
- $rootScope.$on('$routeChangeStart', function (event, next, current) {
- $rootScope.pageTitle = 'Zeppelin'
+function bootstrapApplication() {
+ zeppelinWebApp.run(function($rootScope, $location) {
+ $rootScope.$on('$routeChangeStart', function(event, next, current) {
+ $rootScope.pageTitle = 'Zeppelin';
if (!$rootScope.ticket && next.$$route && !next.$$route.publicAccess) {
- $location.path('/')
+ $location.path('/');
}
- })
- })
- angular.bootstrap(document, ['zeppelinWebApp'])
+ });
+ });
+ angular.bootstrap(document, ['zeppelinWebApp']);
}
-angular.element(document).ready(function () {
- auth().then(bootstrapApplication)
-})
+angular.element(document).ready(function() {
+ auth().then(bootstrapApplication);
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/configuration/configuration.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/configuration/configuration.controller.js b/zeppelin-web/src/app/configuration/configuration.controller.js
index 0d845de..0f5eba3 100644
--- a/zeppelin-web/src/app/configuration/configuration.controller.js
+++ b/zeppelin-web/src/app/configuration/configuration.controller.js
@@ -12,37 +12,37 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').controller('ConfigurationCtrl', ConfigurationCtrl)
+angular.module('zeppelinWebApp').controller('ConfigurationCtrl', ConfigurationCtrl);
-function ConfigurationCtrl ($scope, $http, baseUrlSrv, ngToast) {
- 'ngInject'
+function ConfigurationCtrl($scope, $http, baseUrlSrv, ngToast) {
+ 'ngInject';
- $scope.configrations = []
- ngToast.dismiss()
+ $scope.configrations = [];
+ ngToast.dismiss();
- let getConfigurations = function () {
+ let getConfigurations = function() {
$http.get(baseUrlSrv.getRestApiBase() + '/configurations/all')
- .success(function (data, status, headers, config) {
- $scope.configurations = data.body
+ .success(function(data, status, headers, config) {
+ $scope.configurations = data.body;
})
- .error(function (data, status, headers, config) {
+ .error(function(data, status, headers, config) {
if (status === 401) {
ngToast.danger({
content: 'You don\'t have permission on this page',
verticalPosition: 'bottom',
- timeout: '3000'
- })
- setTimeout(function () {
- window.location = baseUrlSrv.getBase()
- }, 3000)
+ timeout: '3000',
+ });
+ setTimeout(function() {
+ window.location = baseUrlSrv.getBase();
+ }, 3000);
}
- console.log('Error %o %o', status, data.message)
- })
- }
+ console.log('Error %o %o', status, data.message);
+ });
+ };
- let init = function () {
- getConfigurations()
- }
+ let init = function() {
+ getConfigurations();
+ };
- init()
+ init();
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/configuration/configuration.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/configuration/configuration.test.js b/zeppelin-web/src/app/configuration/configuration.test.js
index 8add102..4d98a08 100644
--- a/zeppelin-web/src/app/configuration/configuration.test.js
+++ b/zeppelin-web/src/app/configuration/configuration.test.js
@@ -1,69 +1,69 @@
-import template from './configuration.html'
+import template from './configuration.html';
-describe('Controller: Configuration', function () {
- beforeEach(angular.mock.module('zeppelinWebApp'))
+describe('Controller: Configuration', function() {
+ beforeEach(angular.mock.module('zeppelinWebApp'));
- let baseUrlSrvMock = { getRestApiBase: () => '' }
+ let baseUrlSrvMock = {getRestApiBase: () => ''};
- let ctrl // controller instance
- let $scope
- let $compile
- let $controller // controller generator
- let $httpBackend
- let ngToast
+ let ctrl; // controller instance
+ let $scope;
+ let $compile;
+ let $controller; // controller generator
+ let $httpBackend;
+ let ngToast;
beforeEach(inject((_$controller_, _$rootScope_, _$compile_, _$httpBackend_, _ngToast_) => {
- $scope = _$rootScope_.$new()
- $compile = _$compile_
- $controller = _$controller_
- $httpBackend = _$httpBackend_
- ngToast = _ngToast_
- }))
+ $scope = _$rootScope_.$new();
+ $compile = _$compile_;
+ $controller = _$controller_;
+ $httpBackend = _$httpBackend_;
+ ngToast = _ngToast_;
+ }));
- afterEach(function () {
- $httpBackend.verifyNoOutstandingExpectation()
- $httpBackend.verifyNoOutstandingRequest()
- })
+ afterEach(function() {
+ $httpBackend.verifyNoOutstandingExpectation();
+ $httpBackend.verifyNoOutstandingRequest();
+ });
it('should get configuration initially', () => {
- const conf = { 'conf1': 'value1' }
- ctrl = $controller('ConfigurationCtrl', { $scope: $scope, baseUrlSrv: baseUrlSrvMock, })
- expect(ctrl).toBeDefined()
+ const conf = {'conf1': 'value1'};
+ ctrl = $controller('ConfigurationCtrl', {$scope: $scope, baseUrlSrv: baseUrlSrvMock});
+ expect(ctrl).toBeDefined();
$httpBackend
.when('GET', '/configurations/all')
- .respond(200, { body: conf, })
- $httpBackend.expectGET('/configurations/all')
- $httpBackend.flush()
+ .respond(200, {body: conf});
+ $httpBackend.expectGET('/configurations/all');
+ $httpBackend.flush();
- expect($scope.configurations).toEqual(conf) // scope is updated after $httpBackend.flush()
- })
+ expect($scope.configurations).toEqual(conf); // scope is updated after $httpBackend.flush()
+ });
it('should display ngToast when failed to get configuration properly', () => {
- ctrl = $controller('ConfigurationCtrl', { $scope: $scope, baseUrlSrv: baseUrlSrvMock, })
- spyOn(ngToast, 'danger')
+ ctrl = $controller('ConfigurationCtrl', {$scope: $scope, baseUrlSrv: baseUrlSrvMock});
+ spyOn(ngToast, 'danger');
- $httpBackend.when('GET', '/configurations/all').respond(401, {})
- $httpBackend.expectGET('/configurations/all')
- $httpBackend.flush()
+ $httpBackend.when('GET', '/configurations/all').respond(401, {});
+ $httpBackend.expectGET('/configurations/all');
+ $httpBackend.flush();
- expect(ngToast.danger).toHaveBeenCalled()
- })
+ expect(ngToast.danger).toHaveBeenCalled();
+ });
it('should render list of configurations as the sorted order', () => {
$scope.configurations = {
'zeppelin.server.port': '8080',
'zeppelin.server.addr': '0.0.0.0',
- }
- const elem = $compile(template)($scope)
- $scope.$digest()
- const tbody = elem.find('tbody')
- const tds = tbody.find('td')
+ };
+ const elem = $compile(template)($scope);
+ $scope.$digest();
+ const tbody = elem.find('tbody');
+ const tds = tbody.find('td');
// should be sorted
- expect(tds[0].innerText.trim()).toBe('zeppelin.server.addr')
- expect(tds[1].innerText.trim()).toBe('0.0.0.0')
- expect(tds[2].innerText.trim()).toBe('zeppelin.server.port')
- expect(tds[3].innerText.trim()).toBe('8080')
- })
-})
+ expect(tds[0].innerText.trim()).toBe('zeppelin.server.addr');
+ expect(tds[1].innerText.trim()).toBe('0.0.0.0');
+ expect(tds[2].innerText.trim()).toBe('zeppelin.server.port');
+ expect(tds[3].innerText.trim()).toBe('8080');
+ });
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/credential/credential.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/credential/credential.controller.js b/zeppelin-web/src/app/credential/credential.controller.js
index 102876e..cf6c340 100644
--- a/zeppelin-web/src/app/credential/credential.controller.js
+++ b/zeppelin-web/src/app/credential/credential.controller.js
@@ -12,194 +12,196 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').controller('CredentialCtrl', CredentialController)
+angular.module('zeppelinWebApp').controller('CredentialCtrl', CredentialController);
function CredentialController($scope, $http, baseUrlSrv, ngToast) {
- 'ngInject'
+ 'ngInject';
- ngToast.dismiss()
+ ngToast.dismiss();
- $scope.credentialInfo = []
- $scope.showAddNewCredentialInfo = false
- $scope.availableInterpreters = []
+ $scope.credentialInfo = [];
+ $scope.showAddNewCredentialInfo = false;
+ $scope.availableInterpreters = [];
- $scope.entity = ''
- $scope.password = ''
- $scope.username = ''
+ $scope.entity = '';
+ $scope.password = '';
+ $scope.username = '';
$scope.hasCredential = () => {
- return Array.isArray($scope.credentialInfo) && $scope.credentialInfo.length
- }
+ return Array.isArray($scope.credentialInfo) && $scope.credentialInfo.length;
+ };
- let getCredentialInfo = function () {
+ let getCredentialInfo = function() {
$http.get(baseUrlSrv.getRestApiBase() + '/credential')
- .success(function (data, status, headers, config) {
- $scope.credentialInfo.length = 0 // keep the ref while cleaning
- const returnedCredentials = data.body.userCredentials
+ .success(function(data, status, headers, config) {
+ $scope.credentialInfo.length = 0; // keep the ref while cleaning
+ const returnedCredentials = data.body.userCredentials;
for (let key in returnedCredentials) {
- const value = returnedCredentials[key]
- $scope.credentialInfo.push({
- entity: key,
- password: value.password,
- username: value.username,
- })
+ if (returnedCredentials.hasOwnProperty(key)) {
+ const value = returnedCredentials[key];
+ $scope.credentialInfo.push({
+ entity: key,
+ password: value.password,
+ username: value.username,
+ });
+ }
}
- console.log('Success %o %o', status, $scope.credentialInfo)
+ console.log('Success %o %o', status, $scope.credentialInfo);
})
- .error(function (data, status, headers, config) {
+ .error(function(data, status, headers, config) {
if (status === 401) {
- showToast('You do not have permission on this page', 'danger')
- setTimeout(function () {
- window.location = baseUrlSrv.getBase()
- }, 3000)
+ showToast('You do not have permission on this page', 'danger');
+ setTimeout(function() {
+ window.location = baseUrlSrv.getBase();
+ }, 3000);
}
- console.log('Error %o %o', status, data.message)
- })
- }
+ console.log('Error %o %o', status, data.message);
+ });
+ };
$scope.isValidCredential = function() {
- return $scope.entity.trim() !== '' && $scope.username.trim() !== ''
- }
+ return $scope.entity.trim() !== '' && $scope.username.trim() !== '';
+ };
- $scope.addNewCredentialInfo = function () {
+ $scope.addNewCredentialInfo = function() {
if (!$scope.isValidCredential()) {
- showToast('Username \\ Entity can not be empty.', 'danger')
- return
+ showToast('Username \\ Entity can not be empty.', 'danger');
+ return;
}
let newCredential = {
'entity': $scope.entity,
'username': $scope.username,
- 'password': $scope.password
- }
+ 'password': $scope.password,
+ };
$http.put(baseUrlSrv.getRestApiBase() + '/credential', newCredential)
- .success(function (data, status, headers, config) {
- showToast('Successfully saved credentials.', 'success')
- $scope.credentialInfo.push(newCredential)
- resetCredentialInfo()
- $scope.showAddNewCredentialInfo = false
- console.log('Success %o %o', status, data.message)
+ .success(function(data, status, headers, config) {
+ showToast('Successfully saved credentials.', 'success');
+ $scope.credentialInfo.push(newCredential);
+ resetCredentialInfo();
+ $scope.showAddNewCredentialInfo = false;
+ console.log('Success %o %o', status, data.message);
})
- .error(function (data, status, headers, config) {
- showToast('Error saving credentials', 'danger')
- console.log('Error %o %o', status, data.message)
- })
- }
+ .error(function(data, status, headers, config) {
+ showToast('Error saving credentials', 'danger');
+ console.log('Error %o %o', status, data.message);
+ });
+ };
- let getAvailableInterpreters = function () {
+ let getAvailableInterpreters = function() {
$http.get(baseUrlSrv.getRestApiBase() + '/interpreter/setting')
- .success(function (data, status, headers, config) {
+ .success(function(data, status, headers, config) {
for (let setting = 0; setting < data.body.length; setting++) {
$scope.availableInterpreters.push(
- data.body[setting].group + '.' + data.body[setting].name)
+ data.body[setting].group + '.' + data.body[setting].name);
}
angular.element('#entityname').autocomplete({
source: $scope.availableInterpreters,
- select: function (event, selected) {
- $scope.entity = selected.item.value
- return false
- }
- })
+ select: function(event, selected) {
+ $scope.entity = selected.item.value;
+ return false;
+ },
+ });
})
- .error(function (data, status, headers, config) {
- showToast(data.message, 'danger')
- console.log('Error %o %o', status, data.message)
- })
- }
+ .error(function(data, status, headers, config) {
+ showToast(data.message, 'danger');
+ console.log('Error %o %o', status, data.message);
+ });
+ };
- $scope.toggleAddNewCredentialInfo = function () {
+ $scope.toggleAddNewCredentialInfo = function() {
if ($scope.showAddNewCredentialInfo) {
- $scope.showAddNewCredentialInfo = false
+ $scope.showAddNewCredentialInfo = false;
} else {
- $scope.showAddNewCredentialInfo = true
+ $scope.showAddNewCredentialInfo = true;
}
- }
+ };
- $scope.cancelCredentialInfo = function () {
- $scope.showAddNewCredentialInfo = false
- resetCredentialInfo()
- }
+ $scope.cancelCredentialInfo = function() {
+ $scope.showAddNewCredentialInfo = false;
+ resetCredentialInfo();
+ };
- const resetCredentialInfo = function () {
- $scope.entity = ''
- $scope.username = ''
- $scope.password = ''
- }
+ const resetCredentialInfo = function() {
+ $scope.entity = '';
+ $scope.username = '';
+ $scope.password = '';
+ };
- $scope.copyOriginCredentialsInfo = function () {
- showToast('Since entity is a unique key, you can edit only username & password', 'info')
- }
+ $scope.copyOriginCredentialsInfo = function() {
+ showToast('Since entity is a unique key, you can edit only username & password', 'info');
+ };
- $scope.updateCredentialInfo = function (form, data, entity) {
+ $scope.updateCredentialInfo = function(form, data, entity) {
if (!$scope.isValidCredential()) {
- showToast('Username \\ Entity can not be empty.', 'danger')
- return
+ showToast('Username \\ Entity can not be empty.', 'danger');
+ return;
}
let credential = {
entity: entity,
username: data.username,
- password: data.password
- }
+ password: data.password,
+ };
$http.put(baseUrlSrv.getRestApiBase() + '/credential/', credential)
- .success(function (data, status, headers, config) {
- const index = $scope.credentialInfo.findIndex(elem => elem.entity === entity)
- $scope.credentialInfo[index] = credential
- return true
- })
- .error(function (data, status, headers, config) {
- showToast('We could not save the credential', 'danger')
- console.log('Error %o %o', status, data.message)
- form.$show()
+ .success(function(data, status, headers, config) {
+ const index = $scope.credentialInfo.findIndex((elem) => elem.entity === entity);
+ $scope.credentialInfo[index] = credential;
+ return true;
})
- return false
- }
-
- $scope.removeCredentialInfo = function (entity) {
+ .error(function(data, status, headers, config) {
+ showToast('We could not save the credential', 'danger');
+ console.log('Error %o %o', status, data.message);
+ form.$show();
+ });
+ return false;
+ };
+
+ $scope.removeCredentialInfo = function(entity) {
BootstrapDialog.confirm({
closable: false,
closeByBackdrop: false,
closeByKeyboard: false,
title: '',
message: 'Do you want to delete this credential information?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
$http.delete(baseUrlSrv.getRestApiBase() + '/credential/' + entity)
- .success(function (data, status, headers, config) {
- const index = $scope.credentialInfo.findIndex(elem => elem.entity === entity)
- $scope.credentialInfo.splice(index, 1)
- console.log('Success %o %o', status, data.message)
- })
- .error(function (data, status, headers, config) {
- showToast(data.message, 'danger')
- console.log('Error %o %o', status, data.message)
+ .success(function(data, status, headers, config) {
+ const index = $scope.credentialInfo.findIndex((elem) => elem.entity === entity);
+ $scope.credentialInfo.splice(index, 1);
+ console.log('Success %o %o', status, data.message);
})
+ .error(function(data, status, headers, config) {
+ showToast(data.message, 'danger');
+ console.log('Error %o %o', status, data.message);
+ });
}
- }
- })
- }
+ },
+ });
+ };
function showToast(message, type) {
- const verticalPosition = 'bottom'
- const timeout = '3000'
+ const verticalPosition = 'bottom';
+ const timeout = '3000';
if (type === 'success') {
- ngToast.success({ content: message, verticalPosition: verticalPosition, timeout: timeout, })
+ ngToast.success({content: message, verticalPosition: verticalPosition, timeout: timeout});
} else if (type === 'info') {
- ngToast.info({ content: message, verticalPosition: verticalPosition, timeout: timeout, })
+ ngToast.info({content: message, verticalPosition: verticalPosition, timeout: timeout});
} else {
- ngToast.danger({ content: message, verticalPosition: verticalPosition, timeout: timeout, })
+ ngToast.danger({content: message, verticalPosition: verticalPosition, timeout: timeout});
}
}
- let init = function () {
- getAvailableInterpreters()
- getCredentialInfo()
- }
+ let init = function() {
+ getAvailableInterpreters();
+ getCredentialInfo();
+ };
- init()
+ init();
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/credential/credential.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/credential/credential.test.js b/zeppelin-web/src/app/credential/credential.test.js
index d90567b..2b3c17a 100644
--- a/zeppelin-web/src/app/credential/credential.test.js
+++ b/zeppelin-web/src/app/credential/credential.test.js
@@ -1,114 +1,114 @@
-describe('Controller: Credential', function () {
- beforeEach(angular.mock.module('zeppelinWebApp'))
+describe('Controller: Credential', function() {
+ beforeEach(angular.mock.module('zeppelinWebApp'));
- let baseUrlSrvMock = { getRestApiBase: () => '' }
+ let baseUrlSrvMock = {getRestApiBase: () => ''};
- let $scope
- let $controller // controller generator
- let $httpBackend
+ let $scope;
+ let $controller; // controller generator
+ let $httpBackend;
beforeEach(inject((_$controller_, _$rootScope_, _$compile_, _$httpBackend_, _ngToast_) => {
- $scope = _$rootScope_.$new()
- $controller = _$controller_
- $httpBackend = _$httpBackend_
- }))
+ $scope = _$rootScope_.$new();
+ $controller = _$controller_;
+ $httpBackend = _$httpBackend_;
+ }));
- const credentialResponse = { 'spark.testCredential': { username: 'user1', password: 'password1' }, }
+ const credentialResponse = {'spark.testCredential': {username: 'user1', password: 'password1'}};
const interpreterResponse = [
- { 'name': 'spark', 'group': 'spark', },
- { 'name': 'md', 'group': 'md', },
- ] // simplified
+ {'name': 'spark', 'group': 'spark'},
+ {'name': 'md', 'group': 'md'},
+ ]; // simplified
function setupInitialization(credentialRes, interpreterRes) {
// requests should follow the exact order
$httpBackend
.when('GET', '/interpreter/setting')
- .respond(200, { body: interpreterRes, })
- $httpBackend.expectGET('/interpreter/setting')
+ .respond(200, {body: interpreterRes});
+ $httpBackend.expectGET('/interpreter/setting');
$httpBackend
.when('GET', '/credential')
- .respond(200, { body: { userCredentials: credentialRes, } })
- $httpBackend.expectGET('/credential')
+ .respond(200, {body: {userCredentials: credentialRes}});
+ $httpBackend.expectGET('/credential');
// should flush after calling this function
}
it('should get available interpreters and credentials initially', () => {
- const ctrl = createController()
- expect(ctrl).toBeDefined()
+ const ctrl = createController();
+ expect(ctrl).toBeDefined();
- setupInitialization(credentialResponse, interpreterResponse)
- $httpBackend.flush()
+ setupInitialization(credentialResponse, interpreterResponse);
+ $httpBackend.flush();
expect($scope.credentialInfo).toEqual(
- [{ entity: 'spark.testCredential', username: 'user1', password: 'password1'}]
- )
+ [{entity: 'spark.testCredential', username: 'user1', password: 'password1'}]
+ );
expect($scope.availableInterpreters).toEqual(
['spark.spark', 'md.md']
- )
+ );
- $httpBackend.verifyNoOutstandingExpectation()
- $httpBackend.verifyNoOutstandingRequest()
- })
+ $httpBackend.verifyNoOutstandingExpectation();
+ $httpBackend.verifyNoOutstandingRequest();
+ });
it('should toggle using toggleAddNewCredentialInfo', () => {
- createController()
+ createController();
- expect($scope.showAddNewCredentialInfo).toBe(false)
- $scope.toggleAddNewCredentialInfo()
- expect($scope.showAddNewCredentialInfo).toBe(true)
- $scope.toggleAddNewCredentialInfo()
- expect($scope.showAddNewCredentialInfo).toBe(false)
- })
+ expect($scope.showAddNewCredentialInfo).toBe(false);
+ $scope.toggleAddNewCredentialInfo();
+ expect($scope.showAddNewCredentialInfo).toBe(true);
+ $scope.toggleAddNewCredentialInfo();
+ expect($scope.showAddNewCredentialInfo).toBe(false);
+ });
it('should check empty credentials using isInvalidCredential', () => {
- createController()
+ createController();
- $scope.entity = ''
- $scope.username = ''
- expect($scope.isValidCredential()).toBe(false)
+ $scope.entity = '';
+ $scope.username = '';
+ expect($scope.isValidCredential()).toBe(false);
- $scope.entity = 'spark1'
- $scope.username = ''
- expect($scope.isValidCredential()).toBe(false)
+ $scope.entity = 'spark1';
+ $scope.username = '';
+ expect($scope.isValidCredential()).toBe(false);
- $scope.entity = ''
- $scope.username = 'user1'
- expect($scope.isValidCredential()).toBe(false)
+ $scope.entity = '';
+ $scope.username = 'user1';
+ expect($scope.isValidCredential()).toBe(false);
- $scope.entity = 'spark'
- $scope.username = 'user1'
- expect($scope.isValidCredential()).toBe(true)
- })
+ $scope.entity = 'spark';
+ $scope.username = 'user1';
+ expect($scope.isValidCredential()).toBe(true);
+ });
it('should be able to add credential via addNewCredentialInfo', () => {
- const ctrl = createController()
- expect(ctrl).toBeDefined()
- setupInitialization(credentialResponse, interpreterResponse)
+ const ctrl = createController();
+ expect(ctrl).toBeDefined();
+ setupInitialization(credentialResponse, interpreterResponse);
// when
- const newCredential = { entity: 'spark.sql', username: 'user2', password: 'password2'}
+ const newCredential = {entity: 'spark.sql', username: 'user2', password: 'password2'};
$httpBackend
.when('PUT', '/credential', newCredential)
- .respond(200, { })
- $httpBackend.expectPUT('/credential', newCredential)
+ .respond(200, { });
+ $httpBackend.expectPUT('/credential', newCredential);
- $scope.entity = newCredential.entity
- $scope.username = newCredential.username
- $scope.password = newCredential.password
- $scope.addNewCredentialInfo()
+ $scope.entity = newCredential.entity;
+ $scope.username = newCredential.username;
+ $scope.password = newCredential.password;
+ $scope.addNewCredentialInfo();
- $httpBackend.flush()
+ $httpBackend.flush();
- expect($scope.credentialInfo[1]).toEqual(newCredential)
+ expect($scope.credentialInfo[1]).toEqual(newCredential);
- $httpBackend.verifyNoOutstandingExpectation()
- $httpBackend.verifyNoOutstandingRequest()
- })
+ $httpBackend.verifyNoOutstandingExpectation();
+ $httpBackend.verifyNoOutstandingRequest();
+ });
function createController() {
- return $controller('CredentialCtrl', { $scope: $scope, baseUrlSrv: baseUrlSrvMock, })
+ return $controller('CredentialCtrl', {$scope: $scope, baseUrlSrv: baseUrlSrvMock});
}
-})
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/helium/helium-conf.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/helium/helium-conf.js b/zeppelin-web/src/app/helium/helium-conf.js
index 10ca18a..05a58cf 100644
--- a/zeppelin-web/src/app/helium/helium-conf.js
+++ b/zeppelin-web/src/app/helium/helium-conf.js
@@ -16,84 +16,92 @@ export const HeliumConfFieldType = {
NUMBER: 'number',
JSON: 'json',
STRING: 'string',
-}
+};
/**
* @param persisted <Object> including `type`, `description`, `defaultValue` for each conf key
* @param spec <Object> including `value` for each conf key
*/
-export function mergePersistedConfWithSpec (persisted, spec) {
- const confs = []
+export function mergePersistedConfWithSpec(persisted, spec) {
+ const confs = [];
for (let name in spec) {
- const specField = spec[name]
- const persistedValue = persisted[name]
-
- const value = (persistedValue) ? persistedValue : specField.defaultValue
- const merged = {
- name: name,
- type: specField.type,
- description: specField.description,
- value: value,
- defaultValue: specField.defaultValue,
+ if (spec.hasOwnProperty(name)) {
+ const specField = spec[name];
+ const persistedValue = persisted[name];
+
+ const value = (persistedValue) ? persistedValue : specField.defaultValue;
+ const merged = {
+ name: name,
+ type: specField.type,
+ description: specField.description,
+ value: value,
+ defaultValue: specField.defaultValue,
+ };
+
+ confs.push(merged);
}
-
- confs.push(merged)
}
- return confs
+ return confs;
}
-export function createAllPackageConfigs (defaultPackages, persistedConfs) {
- let packageConfs = {}
+export function createAllPackageConfigs(defaultPackages, persistedConfs) {
+ let packageConfs = {};
for (let name in defaultPackages) {
- const pkgSearchResult = defaultPackages[name]
-
- const spec = pkgSearchResult.pkg.config
- if (!spec) { continue }
-
- const artifact = pkgSearchResult.pkg.artifact
- if (!artifact) { continue }
-
- let persistedConf = {}
- if (persistedConfs[artifact]) {
- persistedConf = persistedConfs[artifact]
+ if (defaultPackages.hasOwnProperty(name)) {
+ const pkgSearchResult = defaultPackages[name];
+
+ const spec = pkgSearchResult.pkg.config;
+ if (!spec) {
+ continue;
+ }
+
+ const artifact = pkgSearchResult.pkg.artifact;
+ if (!artifact) {
+ continue;
+ }
+
+ let persistedConf = {};
+ if (persistedConfs[artifact]) {
+ persistedConf = persistedConfs[artifact];
+ }
+
+ const confs = mergePersistedConfWithSpec(persistedConf, spec);
+ packageConfs[name] = confs;
}
-
- const confs = mergePersistedConfWithSpec(persistedConf, spec)
- packageConfs[name] = confs
}
- return packageConfs
+ return packageConfs;
}
-export function parseConfigValue (type, stringified) {
- let value = stringified
+export function parseConfigValue(type, stringified) {
+ let value = stringified;
try {
if (HeliumConfFieldType.NUMBER === type) {
- value = parseFloat(stringified)
+ value = parseFloat(stringified);
} else if (HeliumConfFieldType.JSON === type) {
- value = JSON.parse(stringified)
+ value = JSON.parse(stringified);
}
} catch (error) {
// return just the stringified one
- console.error(`Failed to parse conf type ${type}, value ${value}`)
+ console.error(`Failed to parse conf type ${type}, value ${value}`);
}
- return value
+ return value;
}
/**
* persist key-value only
* since other info (e.g type, desc) can be provided by default config
*/
-export function createPersistableConfig (currentConfs) {
+export function createPersistableConfig(currentConfs) {
const filtered = currentConfs.reduce((acc, c) => {
- acc[c.name] = parseConfigValue(c.type, c.value)
- return acc
- }, {})
+ acc[c.name] = parseConfigValue(c.type, c.value);
+ return acc;
+ }, {});
- return filtered
+ return filtered;
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/helium/helium-package.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/helium/helium-package.js b/zeppelin-web/src/app/helium/helium-package.js
index 88d191a..2fe9bf5 100644
--- a/zeppelin-web/src/app/helium/helium-package.js
+++ b/zeppelin-web/src/app/helium/helium-package.js
@@ -12,20 +12,22 @@
* limitations under the License.
*/
-export function createDefaultPackage (pkgSearchResult, sce) {
+export function createDefaultPackage(pkgSearchResult, sce) {
for (let pkgIdx in pkgSearchResult) {
- const pkg = pkgSearchResult[pkgIdx]
- pkg.pkg.icon = sce.trustAsHtml(pkg.pkg.icon)
- if (pkg.enabled) {
- pkgSearchResult.splice(pkgIdx, 1)
- return pkg
+ if (pkgSearchResult.hasOwnProperty(pkgIdx)) {
+ const pkg = pkgSearchResult[pkgIdx];
+ pkg.pkg.icon = sce.trustAsHtml(pkg.pkg.icon);
+ if (pkg.enabled) {
+ pkgSearchResult.splice(pkgIdx, 1);
+ return pkg;
+ }
}
}
// show first available version if package is not enabled
- const result = pkgSearchResult[0]
- pkgSearchResult.splice(0, 1)
- return result
+ const result = pkgSearchResult[0];
+ pkgSearchResult.splice(0, 1);
+ return result;
}
/**
@@ -35,13 +37,15 @@ export function createDefaultPackage (pkgSearchResult, sce) {
* @param sce angular `$sce` object
* @returns {Object} including {name, pkgInfo}
*/
-export function createDefaultPackages (pkgSearchResults, sce) {
- const defaultPackages = {}
+export function createDefaultPackages(pkgSearchResults, sce) {
+ const defaultPackages = {};
// show enabled version if any version of package is enabled
for (let name in pkgSearchResults) {
- const pkgSearchResult = pkgSearchResults[name]
- defaultPackages[name] = createDefaultPackage(pkgSearchResult, sce)
+ if (pkgSearchResults.hasOwnProperty(name)) {
+ const pkgSearchResult = pkgSearchResults[name];
+ defaultPackages[name] = createDefaultPackage(pkgSearchResult, sce);
+ }
}
- return defaultPackages
+ return defaultPackages;
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/helium/helium-type.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/helium/helium-type.js b/zeppelin-web/src/app/helium/helium-type.js
index 27b34fa..0b37a41 100644
--- a/zeppelin-web/src/app/helium/helium-type.js
+++ b/zeppelin-web/src/app/helium/helium-type.js
@@ -17,4 +17,4 @@ export const HeliumType = {
SPELL: 'SPELL',
INTERPRETER: 'INTERPRETER',
APPLICATION: 'APPLICATION',
-}
+};
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/helium/helium.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/helium/helium.controller.js b/zeppelin-web/src/app/helium/helium.controller.js
index a397ace..4728e08 100644
--- a/zeppelin-web/src/app/helium/helium.controller.js
+++ b/zeppelin-web/src/app/helium/helium.controller.js
@@ -12,92 +12,94 @@
* limitations under the License.
*/
-import { HeliumType, } from './helium-type'
+import {HeliumType} from './helium-type';
-export default function HeliumCtrl ($scope, $rootScope, $sce,
+export default function HeliumCtrl($scope, $rootScope, $sce,
baseUrlSrv, ngToast, heliumService) {
- 'ngInject'
-
- $scope.pkgSearchResults = {}
- $scope.defaultPackages = {}
- $scope.showVersions = {}
- $scope.bundleOrder = []
- $scope.bundleOrderChanged = false
- $scope.vizTypePkg = {}
- $scope.spellTypePkg = {}
- $scope.intpTypePkg = {}
- $scope.appTypePkg = {}
- $scope.numberOfEachPackageByType = {}
- $scope.allPackageTypes = [HeliumType][0]
- $scope.pkgListByType = 'VISUALIZATION'
- $scope.defaultPackageConfigs = {} // { pkgName, [{name, type, desc, value, defaultValue}] }
- $scope.intpDefaultIcon = $sce.trustAsHtml('<img src="../assets/images/maven_default_icon.png" style="width: 12px"/>')
-
- function init () {
+ 'ngInject';
+
+ $scope.pkgSearchResults = {};
+ $scope.defaultPackages = {};
+ $scope.showVersions = {};
+ $scope.bundleOrder = [];
+ $scope.bundleOrderChanged = false;
+ $scope.vizTypePkg = {};
+ $scope.spellTypePkg = {};
+ $scope.intpTypePkg = {};
+ $scope.appTypePkg = {};
+ $scope.numberOfEachPackageByType = {};
+ $scope.allPackageTypes = [HeliumType][0];
+ $scope.pkgListByType = 'VISUALIZATION';
+ $scope.defaultPackageConfigs = {}; // { pkgName, [{name, type, desc, value, defaultValue}] }
+ $scope.intpDefaultIcon = $sce.trustAsHtml('<img src="../assets/images/maven_default_icon.png" style="width: 12px"/>');
+
+ function init() {
// get all package info and set config
heliumService.getAllPackageInfoAndDefaultPackages()
- .then(({ pkgSearchResults, defaultPackages }) => {
+ .then(({pkgSearchResults, defaultPackages}) => {
// pagination
- $scope.itemsPerPage = 10
- $scope.currentPage = 1
- $scope.maxSize = 5
+ $scope.itemsPerPage = 10;
+ $scope.currentPage = 1;
+ $scope.maxSize = 5;
- $scope.pkgSearchResults = pkgSearchResults
- $scope.defaultPackages = defaultPackages
- classifyPkgType($scope.defaultPackages)
+ $scope.pkgSearchResults = pkgSearchResults;
+ $scope.defaultPackages = defaultPackages;
+ classifyPkgType($scope.defaultPackages);
- return heliumService.getAllPackageConfigs()
+ return heliumService.getAllPackageConfigs();
})
- .then(defaultPackageConfigs => {
- $scope.defaultPackageConfigs = defaultPackageConfigs
- return heliumService.getVisualizationPackageOrder()
- })
- .then(visPackageOrder => {
- setVisPackageOrder(visPackageOrder)
+ .then((defaultPackageConfigs) => {
+ $scope.defaultPackageConfigs = defaultPackageConfigs;
+ return heliumService.getVisualizationPackageOrder();
})
+ .then((visPackageOrder) => {
+ setVisPackageOrder(visPackageOrder);
+ });
}
const setVisPackageOrder = function(visPackageOrder) {
- $scope.bundleOrder = visPackageOrder
- $scope.bundleOrderChanged = false
- }
+ $scope.bundleOrder = visPackageOrder;
+ $scope.bundleOrderChanged = false;
+ };
- let orderPackageByPubDate = function (a, b) {
+ let orderPackageByPubDate = function(a, b) {
if (!a.pkg.published) {
// Because local registry pkgs don't have 'published' field, put current time instead to show them first
- a.pkg.published = new Date().getTime()
+ a.pkg.published = new Date().getTime();
}
- return new Date(a.pkg.published).getTime() - new Date(b.pkg.published).getTime()
- }
+ return new Date(a.pkg.published).getTime() - new Date(b.pkg.published).getTime();
+ };
- const classifyPkgType = function (packageInfo) {
- let allTypesOfPkg = {}
- let vizTypePkg = []
- let spellTypePkg = []
- let intpTypePkg = []
- let appTypePkg = []
+ const classifyPkgType = function(packageInfo) {
+ let allTypesOfPkg = {};
+ let vizTypePkg = [];
+ let spellTypePkg = [];
+ let intpTypePkg = [];
+ let appTypePkg = [];
- let packageInfoArr = Object.keys(packageInfo).map(key => packageInfo[key])
- packageInfoArr = packageInfoArr.sort(orderPackageByPubDate).reverse()
+ let packageInfoArr = Object.keys(packageInfo).map((key) => packageInfo[key]);
+ packageInfoArr = packageInfoArr.sort(orderPackageByPubDate).reverse();
for (let name in packageInfoArr) {
- let pkgs = packageInfoArr[name]
- let pkgType = pkgs.pkg.type
-
- switch (pkgType) {
- case HeliumType.VISUALIZATION:
- vizTypePkg.push(pkgs)
- break
- case HeliumType.SPELL:
- spellTypePkg.push(pkgs)
- break
- case HeliumType.INTERPRETER:
- intpTypePkg.push(pkgs)
- break
- case HeliumType.APPLICATION:
- appTypePkg.push(pkgs)
- break
+ if (packageInfoArr.hasOwnProperty(name)) {
+ let pkgs = packageInfoArr[name];
+ let pkgType = pkgs.pkg.type;
+
+ switch (pkgType) {
+ case HeliumType.VISUALIZATION:
+ vizTypePkg.push(pkgs);
+ break;
+ case HeliumType.SPELL:
+ spellTypePkg.push(pkgs);
+ break;
+ case HeliumType.INTERPRETER:
+ intpTypePkg.push(pkgs);
+ break;
+ case HeliumType.APPLICATION:
+ appTypePkg.push(pkgs);
+ break;
+ }
}
}
@@ -105,95 +107,99 @@ export default function HeliumCtrl ($scope, $rootScope, $sce,
vizTypePkg,
spellTypePkg,
intpTypePkg,
- appTypePkg
- ]
+ appTypePkg,
+ ];
for (let idx in _.keys(HeliumType)) {
- allTypesOfPkg[_.keys(HeliumType)[idx]] = pkgsArr[idx]
+ if (_.keys(HeliumType).hasOwnProperty(idx)) {
+ allTypesOfPkg[_.keys(HeliumType)[idx]] = pkgsArr[idx];
+ }
}
- $scope.allTypesOfPkg = allTypesOfPkg
- }
+ $scope.allTypesOfPkg = allTypesOfPkg;
+ };
$scope.bundleOrderListeners = {
- accept: function (sourceItemHandleScope, destSortableScope) { return true },
- itemMoved: function (event) {},
- orderChanged: function (event) {
- $scope.bundleOrderChanged = true
- }
- }
-
- $scope.saveBundleOrder = function () {
+ accept: function(sourceItemHandleScope, destSortableScope) {
+ return true;
+ },
+ itemMoved: function(event) {},
+ orderChanged: function(event) {
+ $scope.bundleOrderChanged = true;
+ },
+ };
+
+ $scope.saveBundleOrder = function() {
const confirm = BootstrapDialog.confirm({
closable: false,
closeByBackdrop: false,
closeByKeyboard: false,
title: '',
message: 'Save changes?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- confirm.$modalFooter.find('button').addClass('disabled')
+ confirm.$modalFooter.find('button').addClass('disabled');
confirm.$modalFooter.find('button:contains("OK")')
- .html('<i class="fa fa-circle-o-notch fa-spin"></i> Enabling')
+ .html('<i class="fa fa-circle-o-notch fa-spin"></i> Enabling');
heliumService.setVisualizationPackageOrder($scope.bundleOrder)
- .success(function (data, status) {
- setVisPackageOrder($scope.bundleOrder)
- confirm.close()
+ .success(function(data, status) {
+ setVisPackageOrder($scope.bundleOrder);
+ confirm.close();
})
- .error(function (data, status) {
- confirm.close()
- console.log('Failed to save order')
+ .error(function(data, status) {
+ confirm.close();
+ console.log('Failed to save order');
BootstrapDialog.show({
title: 'Error on saving order ',
- message: data.message
- })
- })
- return false
+ message: data.message,
+ });
+ });
+ return false;
}
- }
- })
- }
+ },
+ });
+ };
- let getLicense = function (name, artifact) {
- let filteredPkgSearchResults = _.filter($scope.defaultPackages[name], function (p) {
- return p.artifact === artifact
- })
+ let getLicense = function(name, artifact) {
+ let filteredPkgSearchResults = _.filter($scope.defaultPackages[name], function(p) {
+ return p.artifact === artifact;
+ });
- let license
+ let license;
if (filteredPkgSearchResults.length === 0) {
- filteredPkgSearchResults = _.filter($scope.pkgSearchResults[name], function (p) {
- return p.pkg.artifact === artifact
- })
+ filteredPkgSearchResults = _.filter($scope.pkgSearchResults[name], function(p) {
+ return p.pkg.artifact === artifact;
+ });
if (filteredPkgSearchResults.length > 0) {
- license = filteredPkgSearchResults[0].pkg.license
+ license = filteredPkgSearchResults[0].pkg.license;
}
} else {
- license = filteredPkgSearchResults[0].license
+ license = filteredPkgSearchResults[0].license;
}
if (!license) {
- license = 'Unknown'
+ license = 'Unknown';
}
- return license
- }
+ return license;
+ };
- const getHeliumTypeText = function (type) {
+ const getHeliumTypeText = function(type) {
if (type === HeliumType.VISUALIZATION) {
- return `<a target="_blank" href="https://zeppelin.apache.org/docs/${$rootScope.zeppelinVersion}/development/helium/writing_visualization.html">${type}</a>` // eslint-disable-line max-len
+ return `<a target="_blank" href="https://zeppelin.apache.org/docs/${$rootScope.zeppelinVersion}/development/helium/writing_visualization.html">${type}</a>`; // eslint-disable-line max-len
} else if (type === HeliumType.SPELL) {
- return `<a target="_blank" href="https://zeppelin.apache.org/docs/${$rootScope.zeppelinVersion}/development/helium/writing_spell.html">${type}</a>` // eslint-disable-line max-len
+ return `<a target="_blank" href="https://zeppelin.apache.org/docs/${$rootScope.zeppelinVersion}/development/helium/writing_spell.html">${type}</a>`; // eslint-disable-line max-len
} else {
- return type
+ return type;
}
- }
+ };
- $scope.enable = function (name, artifact, type, groupId, description) {
- let license = getLicense(name, artifact)
- let mavenArtifactInfoToHTML = groupId + ':' + artifact.split('@')[0] + ':' + artifact.split('@')[1]
- let zeppelinVersion = $rootScope.zeppelinVersion
- let url = 'https://zeppelin.apache.org/docs/' + zeppelinVersion + '/manual/interpreterinstallation.html'
+ $scope.enable = function(name, artifact, type, groupId, description) {
+ let license = getLicense(name, artifact);
+ let mavenArtifactInfoToHTML = groupId + ':' + artifact.split('@')[0] + ':' + artifact.split('@')[1];
+ let zeppelinVersion = $rootScope.zeppelinVersion;
+ let url = 'https://zeppelin.apache.org/docs/' + zeppelinVersion + '/manual/interpreterinstallation.html';
- let confirm = ''
+ let confirm = '';
if (type === HeliumType.INTERPRETER) {
confirm = BootstrapDialog.show({
title: '',
@@ -206,8 +212,8 @@ export default function HeliumCtrl ($scope, $rootScope, $sce,
mavenArtifactInfoToHTML + ' </code></pre>' +
'<p>After restart Zeppelin, create interpreter setting and bind it with your note. ' +
'For more detailed information, see <a target="_blank" href=' +
- url + '>Interpreter Installation.</a></p>'
- })
+ url + '>Interpreter Installation.</a></p>',
+ });
} else {
confirm = BootstrapDialog.confirm({
closable: false,
@@ -226,138 +232,138 @@ export default function HeliumCtrl ($scope, $rootScope, $sce,
'<hr style="margin-top: 10px; margin-bottom: 10px;" />' +
'<div style="font-size: 14px;">License</div>' +
`<div style="color:gray">${license}</div>`,
- callback: function (result) {
+ callback: function(result) {
if (result) {
- confirm.$modalFooter.find('button').addClass('disabled')
+ confirm.$modalFooter.find('button').addClass('disabled');
confirm.$modalFooter.find('button:contains("OK")')
- .html('<i class="fa fa-circle-o-notch fa-spin"></i> Enabling')
- heliumService.enable(name, artifact, type).success(function (data, status) {
- init()
- confirm.close()
- }).error(function (data, status) {
- confirm.close()
- console.log('Failed to enable package %o %o. %o', name, artifact, data)
+ .html('<i class="fa fa-circle-o-notch fa-spin"></i> Enabling');
+ heliumService.enable(name, artifact, type).success(function(data, status) {
+ init();
+ confirm.close();
+ }).error(function(data, status) {
+ confirm.close();
+ console.log('Failed to enable package %o %o. %o', name, artifact, data);
BootstrapDialog.show({
title: 'Error on enabling ' + name,
- message: data.message
- })
- })
- return false
+ message: data.message,
+ });
+ });
+ return false;
}
- }
- })
+ },
+ });
}
- }
+ };
- $scope.disable = function (name, artifact) {
+ $scope.disable = function(name, artifact) {
const confirm = BootstrapDialog.confirm({
closable: false,
closeByBackdrop: false,
closeByKeyboard: false,
title: '<div style="font-weight: 300;">Do you want to disable Helium Package?</div>',
message: artifact,
- callback: function (result) {
+ callback: function(result) {
if (result) {
- confirm.$modalFooter.find('button').addClass('disabled')
+ confirm.$modalFooter.find('button').addClass('disabled');
confirm.$modalFooter.find('button:contains("OK")')
- .html('<i class="fa fa-circle-o-notch fa-spin"></i> Disabling')
+ .html('<i class="fa fa-circle-o-notch fa-spin"></i> Disabling');
heliumService.disable(name)
- .success(function (data, status) {
- init()
- confirm.close()
+ .success(function(data, status) {
+ init();
+ confirm.close();
})
- .error(function (data, status) {
- confirm.close()
- console.log('Failed to disable package %o. %o', name, data)
+ .error(function(data, status) {
+ confirm.close();
+ console.log('Failed to disable package %o. %o', name, data);
BootstrapDialog.show({
title: 'Error on disabling ' + name,
- message: data.message
- })
- })
- return false
+ message: data.message,
+ });
+ });
+ return false;
}
- }
- })
- }
+ },
+ });
+ };
- $scope.toggleVersions = function (pkgName) {
+ $scope.toggleVersions = function(pkgName) {
if ($scope.showVersions[pkgName]) {
- $scope.showVersions[pkgName] = false
+ $scope.showVersions[pkgName] = false;
} else {
- $scope.showVersions[pkgName] = true
+ $scope.showVersions[pkgName] = true;
}
- }
+ };
- $scope.isLocalPackage = function (pkgSearchResult) {
- const pkg = pkgSearchResult.pkg
- return pkg.artifact && !pkg.artifact.includes('@')
- }
+ $scope.isLocalPackage = function(pkgSearchResult) {
+ const pkg = pkgSearchResult.pkg;
+ return pkg.artifact && !pkg.artifact.includes('@');
+ };
- $scope.hasNpmLink = function (pkgSearchResult) {
- const pkg = pkgSearchResult.pkg
+ $scope.hasNpmLink = function(pkgSearchResult) {
+ const pkg = pkgSearchResult.pkg;
return (pkg.type === HeliumType.SPELL || pkg.type === HeliumType.VISUALIZATION) &&
- !$scope.isLocalPackage(pkgSearchResult)
- }
+ !$scope.isLocalPackage(pkgSearchResult);
+ };
- $scope.hasMavenLink = function (pkgSearchResult) {
- const pkg = pkgSearchResult.pkg
+ $scope.hasMavenLink = function(pkgSearchResult) {
+ const pkg = pkgSearchResult.pkg;
return (pkg.type === HeliumType.APPLICATION || pkg.type === HeliumType.INTERPRETER) &&
- !$scope.isLocalPackage(pkgSearchResult)
- }
-
- $scope.getPackageSize = function (pkgSearchResult, targetPkgType) {
- let result = []
- _.map(pkgSearchResult, function (pkg) {
- result.push(_.find(pkg, {type: targetPkgType}))
- })
- return _.compact(result).length
- }
-
- $scope.configExists = function (pkgSearchResult) {
+ !$scope.isLocalPackage(pkgSearchResult);
+ };
+
+ $scope.getPackageSize = function(pkgSearchResult, targetPkgType) {
+ let result = [];
+ _.map(pkgSearchResult, function(pkg) {
+ result.push(_.find(pkg, {type: targetPkgType}));
+ });
+ return _.compact(result).length;
+ };
+
+ $scope.configExists = function(pkgSearchResult) {
// helium package config is persisted per version
- return pkgSearchResult.pkg.config && pkgSearchResult.pkg.artifact
- }
+ return pkgSearchResult.pkg.config && pkgSearchResult.pkg.artifact;
+ };
- $scope.configOpened = function (pkgSearchResult) {
- return pkgSearchResult.configOpened && !pkgSearchResult.configFetching
- }
+ $scope.configOpened = function(pkgSearchResult) {
+ return pkgSearchResult.configOpened && !pkgSearchResult.configFetching;
+ };
- $scope.getConfigButtonClass = function (pkgSearchResult) {
+ $scope.getConfigButtonClass = function(pkgSearchResult) {
return (pkgSearchResult.configOpened && pkgSearchResult.configFetching)
- ? 'disabled' : ''
- }
+ ? 'disabled' : '';
+ };
- $scope.toggleConfigButton = function (pkgSearchResult) {
+ $scope.toggleConfigButton = function(pkgSearchResult) {
if (pkgSearchResult.configOpened) {
- pkgSearchResult.configOpened = false
- return
+ pkgSearchResult.configOpened = false;
+ return;
}
- const pkg = pkgSearchResult.pkg
- const pkgName = pkg.name
- pkgSearchResult.configFetching = true
- pkgSearchResult.configOpened = true
+ const pkg = pkgSearchResult.pkg;
+ const pkgName = pkg.name;
+ pkgSearchResult.configFetching = true;
+ pkgSearchResult.configOpened = true;
heliumService.getSinglePackageConfigs(pkg)
- .then(confs => {
- $scope.defaultPackageConfigs[pkgName] = confs
- pkgSearchResult.configFetching = false
- })
- }
+ .then((confs) => {
+ $scope.defaultPackageConfigs[pkgName] = confs;
+ pkgSearchResult.configFetching = false;
+ });
+ };
- $scope.saveConfig = function (pkgSearchResult) {
- const pkgName = pkgSearchResult.pkg.name
- const currentConf = $scope.defaultPackageConfigs[pkgName]
+ $scope.saveConfig = function(pkgSearchResult) {
+ const pkgName = pkgSearchResult.pkg.name;
+ const currentConf = $scope.defaultPackageConfigs[pkgName];
heliumService.saveConfig(pkgSearchResult.pkg, currentConf, () => {
// close after config is saved
- pkgSearchResult.configOpened = false
- })
- }
+ pkgSearchResult.configOpened = false;
+ });
+ };
- $scope.getDescriptionText = function (pkgSearchResult) {
- return $sce.trustAsHtml(pkgSearchResult.pkg.description)
- }
+ $scope.getDescriptionText = function(pkgSearchResult) {
+ return $sce.trustAsHtml(pkgSearchResult.pkg.description);
+ };
- init()
+ init();
}
[11/12] zeppelin git commit: [ZEPPELIN-3245] checkstyle/eslintrc for
zeppelin-web (JavaScript)
Posted by pr...@apache.org.
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/helium/helium.service.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/helium/helium.service.js b/zeppelin-web/src/app/helium/helium.service.js
index d2054b3..7501fae 100644
--- a/zeppelin-web/src/app/helium/helium.service.js
+++ b/zeppelin-web/src/app/helium/helium.service.js
@@ -12,290 +12,294 @@
* limitations under the License.
*/
-import { HeliumType, } from './helium-type'
+import {HeliumType} from './helium-type';
import {
createAllPackageConfigs,
createPersistableConfig,
mergePersistedConfWithSpec,
-} from './helium-conf'
+} from './helium-conf';
import {
createDefaultPackages,
-} from './helium-package'
+} from './helium-package';
-angular.module('zeppelinWebApp').service('heliumService', HeliumService)
+angular.module('zeppelinWebApp').service('heliumService', HeliumService);
export default function HeliumService($http, $sce, baseUrlSrv) {
- 'ngInject'
+ 'ngInject';
- let visualizationBundles = []
- let visualizationPackageOrder = []
+ let visualizationBundles = [];
+ let visualizationPackageOrder = [];
// name `heliumBundles` should be same as `HeliumBundleFactory.HELIUM_BUNDLES_VAR`
- let heliumBundles = []
+ let heliumBundles = [];
// map for `{ magic: interpreter }`
- let spellPerMagic = {}
+ let spellPerMagic = {};
// map for `{ magic: package-name }`
- let pkgNamePerMagic = {}
+ let pkgNamePerMagic = {};
/**
* @param magic {string} e.g `%flowchart`
* @returns {SpellBase} undefined if magic is not registered
*/
- this.getSpellByMagic = function (magic) {
- return spellPerMagic[magic]
- }
+ this.getSpellByMagic = function(magic) {
+ return spellPerMagic[magic];
+ };
- this.executeSpell = function (magic, textWithoutMagic) {
+ this.executeSpell = function(magic, textWithoutMagic) {
const promisedConf = this.getSinglePackageConfigUsingMagic(magic)
- .then(confs => createPersistableConfig(confs))
+ .then((confs) => createPersistableConfig(confs));
- return promisedConf.then(conf => {
- const spell = this.getSpellByMagic(magic)
- const spellResult = spell.interpret(textWithoutMagic, conf)
+ return promisedConf.then((conf) => {
+ const spell = this.getSpellByMagic(magic);
+ const spellResult = spell.interpret(textWithoutMagic, conf);
const parsed = spellResult.getAllParsedDataWithTypes(
- spellPerMagic, magic, textWithoutMagic)
+ spellPerMagic, magic, textWithoutMagic);
- return parsed
- })
- }
+ return parsed;
+ });
+ };
- this.executeSpellAsDisplaySystem = function (magic, textWithoutMagic) {
+ this.executeSpellAsDisplaySystem = function(magic, textWithoutMagic) {
const promisedConf = this.getSinglePackageConfigUsingMagic(magic)
- .then(confs => createPersistableConfig(confs))
+ .then((confs) => createPersistableConfig(confs));
- return promisedConf.then(conf => {
- const spell = this.getSpellByMagic(magic)
- const spellResult = spell.interpret(textWithoutMagic.trim(), conf)
- const parsed = spellResult.getAllParsedDataWithTypes(spellPerMagic)
+ return promisedConf.then((conf) => {
+ const spell = this.getSpellByMagic(magic);
+ const spellResult = spell.interpret(textWithoutMagic.trim(), conf);
+ const parsed = spellResult.getAllParsedDataWithTypes(spellPerMagic);
- return parsed
- })
- }
+ return parsed;
+ });
+ };
- this.getVisualizationCachedPackages = function () {
- return visualizationBundles
- }
+ this.getVisualizationCachedPackages = function() {
+ return visualizationBundles;
+ };
- this.getVisualizationCachedPackageOrder = function () {
- return visualizationPackageOrder
- }
+ this.getVisualizationCachedPackageOrder = function() {
+ return visualizationPackageOrder;
+ };
/**
* @returns {Promise} which returns bundleOrder and cache it in `visualizationPackageOrder`
*/
- this.getVisualizationPackageOrder = function () {
+ this.getVisualizationPackageOrder = function() {
return $http.get(baseUrlSrv.getRestApiBase() + '/helium/order/visualization')
- .then(function (response, status) {
- const order = response.data.body
- visualizationPackageOrder = order
- return order
- })
- .catch(function (error) {
- console.error('Can not get bundle order', error)
+ .then(function(response, status) {
+ const order = response.data.body;
+ visualizationPackageOrder = order;
+ return order;
})
- }
+ .catch(function(error) {
+ console.error('Can not get bundle order', error);
+ });
+ };
- this.setVisualizationPackageOrder = function (list) {
- return $http.post(baseUrlSrv.getRestApiBase() + '/helium/order/visualization', list)
- }
+ this.setVisualizationPackageOrder = function(list) {
+ return $http.post(baseUrlSrv.getRestApiBase() + '/helium/order/visualization', list);
+ };
- this.enable = function (name, artifact) {
- return $http.post(baseUrlSrv.getRestApiBase() + '/helium/enable/' + name, artifact)
- }
+ this.enable = function(name, artifact) {
+ return $http.post(baseUrlSrv.getRestApiBase() + '/helium/enable/' + name, artifact);
+ };
- this.disable = function (name) {
- return $http.post(baseUrlSrv.getRestApiBase() + '/helium/disable/' + name)
- }
+ this.disable = function(name) {
+ return $http.post(baseUrlSrv.getRestApiBase() + '/helium/disable/' + name);
+ };
- this.saveConfig = function (pkg, defaultPackageConfig, closeConfigPanelCallback) {
+ this.saveConfig = function(pkg, defaultPackageConfig, closeConfigPanelCallback) {
// in case of local package, it will include `/`
- const pkgArtifact = encodeURIComponent(pkg.artifact)
- const pkgName = pkg.name
- const filtered = createPersistableConfig(defaultPackageConfig)
+ const pkgArtifact = encodeURIComponent(pkg.artifact);
+ const pkgName = pkg.name;
+ const filtered = createPersistableConfig(defaultPackageConfig);
if (!pkgName || !pkgArtifact || !filtered) {
console.error(
- `Can't save config for helium package '${pkgArtifact}'`, filtered)
- return
+ `Can't save config for helium package '${pkgArtifact}'`, filtered);
+ return;
}
- const url = `${baseUrlSrv.getRestApiBase()}/helium/config/${pkgName}/${pkgArtifact}`
+ const url = `${baseUrlSrv.getRestApiBase()}/helium/config/${pkgName}/${pkgArtifact}`;
return $http.post(url, filtered)
.then(() => {
- if (closeConfigPanelCallback) { closeConfigPanelCallback() }
+ if (closeConfigPanelCallback) {
+ closeConfigPanelCallback();
+ }
}).catch((error) => {
- console.error(`Failed to save config for ${pkgArtifact}`, error)
- })
- }
+ console.error(`Failed to save config for ${pkgArtifact}`, error);
+ });
+ };
/**
* @returns {Promise<Object>} which including {name, Array<package info for artifact>}
*/
- this.getAllPackageInfo = function () {
+ this.getAllPackageInfo = function() {
return $http.get(`${baseUrlSrv.getRestApiBase()}/helium/package`)
- .then(function (response, status) {
- return response.data.body
- })
- .catch(function (error) {
- console.error('Failed to get all package infos', error)
+ .then(function(response, status) {
+ return response.data.body;
})
- }
+ .catch(function(error) {
+ console.error('Failed to get all package infos', error);
+ });
+ };
- this.getAllEnabledPackages = function () {
+ this.getAllEnabledPackages = function() {
return $http.get(`${baseUrlSrv.getRestApiBase()}/helium/enabledPackage`)
- .then(function (response, status) {
- return response.data.body
+ .then(function(response, status) {
+ return response.data.body;
})
- .catch(function (error) {
- console.error('Failed to get all enabled package infos', error)
- })
- }
+ .catch(function(error) {
+ console.error('Failed to get all enabled package infos', error);
+ });
+ };
- this.getSingleBundle = function (pkgName) {
- let url = `${baseUrlSrv.getRestApiBase()}/helium/bundle/load/${pkgName}`
+ this.getSingleBundle = function(pkgName) {
+ let url = `${baseUrlSrv.getRestApiBase()}/helium/bundle/load/${pkgName}`;
if (process.env.HELIUM_BUNDLE_DEV) {
- url = url + '?refresh=true'
+ url = url + '?refresh=true';
}
return $http.get(url)
- .then(function (response, status) {
- const bundle = response.data
+ .then(function(response, status) {
+ const bundle = response.data;
if (bundle.substring(0, 'ERROR:'.length) === 'ERROR:') {
- console.error(`Failed to get bundle: ${pkgName}`, bundle)
- return '' // empty bundle will be filtered later
+ console.error(`Failed to get bundle: ${pkgName}`, bundle);
+ return ''; // empty bundle will be filtered later
}
- return bundle
- })
- .catch(function (error) {
- console.error(`Failed to get single bundle: ${pkgName}`, error)
+ return bundle;
})
- }
+ .catch(function(error) {
+ console.error(`Failed to get single bundle: ${pkgName}`, error);
+ });
+ };
- this.getDefaultPackages = function () {
+ this.getDefaultPackages = function() {
return this.getAllPackageInfo()
- .then(pkgSearchResults => {
- return createDefaultPackages(pkgSearchResults, $sce)
- })
- }
+ .then((pkgSearchResults) => {
+ return createDefaultPackages(pkgSearchResults, $sce);
+ });
+ };
- this.getAllPackageInfoAndDefaultPackages = function () {
+ this.getAllPackageInfoAndDefaultPackages = function() {
return this.getAllPackageInfo()
- .then(pkgSearchResults => {
+ .then((pkgSearchResults) => {
return {
pkgSearchResults: pkgSearchResults,
defaultPackages: createDefaultPackages(pkgSearchResults, $sce),
- }
- })
- }
+ };
+ });
+ };
/**
* get all package configs.
* @return { Promise<{name, Array<Object>}> }
*/
- this.getAllPackageConfigs = function () {
- const promisedDefaultPackages = this.getDefaultPackages()
+ this.getAllPackageConfigs = function() {
+ const promisedDefaultPackages = this.getDefaultPackages();
const promisedPersistedConfs =
$http.get(`${baseUrlSrv.getRestApiBase()}/helium/config`)
- .then(function (response, status) {
- return response.data.body
- })
+ .then(function(response, status) {
+ return response.data.body;
+ });
return Promise.all([promisedDefaultPackages, promisedPersistedConfs])
- .then(values => {
- const defaultPackages = values[0]
- const persistedConfs = values[1]
+ .then((values) => {
+ const defaultPackages = values[0];
+ const persistedConfs = values[1];
- return createAllPackageConfigs(defaultPackages, persistedConfs)
- })
- .catch(function (error) {
- console.error('Failed to get all package configs', error)
+ return createAllPackageConfigs(defaultPackages, persistedConfs);
})
- }
+ .catch(function(error) {
+ console.error('Failed to get all package configs', error);
+ });
+ };
/**
* get the package config which is persisted in server.
* @return { Promise<Array<Object>> }
*/
- this.getSinglePackageConfigs = function (pkg) {
- const pkgName = pkg.name
+ this.getSinglePackageConfigs = function(pkg) {
+ const pkgName = pkg.name;
// in case of local package, it will include `/`
- const pkgArtifact = encodeURIComponent(pkg.artifact)
+ const pkgArtifact = encodeURIComponent(pkg.artifact);
if (!pkgName || !pkgArtifact) {
- console.error('Failed to fetch config for\n', pkg)
- return Promise.resolve([])
+ console.error('Failed to fetch config for\n', pkg);
+ return Promise.resolve([]);
}
- const confUrl = `${baseUrlSrv.getRestApiBase()}/helium/config/${pkgName}/${pkgArtifact}`
+ const confUrl = `${baseUrlSrv.getRestApiBase()}/helium/config/${pkgName}/${pkgArtifact}`;
const promisedConf = $http.get(confUrl)
- .then(function (response, status) {
- return response.data.body
- })
+ .then(function(response, status) {
+ return response.data.body;
+ });
return promisedConf.then(({confSpec, confPersisted}) => {
- const merged = mergePersistedConfWithSpec(confPersisted, confSpec)
- return merged
- })
- }
+ const merged = mergePersistedConfWithSpec(confPersisted, confSpec);
+ return merged;
+ });
+ };
- this.getSinglePackageConfigUsingMagic = function (magic) {
- const pkgName = pkgNamePerMagic[magic]
+ this.getSinglePackageConfigUsingMagic = function(magic) {
+ const pkgName = pkgNamePerMagic[magic];
- const confUrl = `${baseUrlSrv.getRestApiBase()}/helium/spell/config/${pkgName}`
+ const confUrl = `${baseUrlSrv.getRestApiBase()}/helium/spell/config/${pkgName}`;
const promisedConf = $http.get(confUrl)
- .then(function (response, status) {
- return response.data.body
- })
+ .then(function(response, status) {
+ return response.data.body;
+ });
return promisedConf.then(({confSpec, confPersisted}) => {
- const merged = mergePersistedConfWithSpec(confPersisted, confSpec)
- return merged
- })
- }
+ const merged = mergePersistedConfWithSpec(confPersisted, confSpec);
+ return merged;
+ });
+ };
const p = this.getAllEnabledPackages()
- .then(enabledPackageSearchResults => {
- const promises = enabledPackageSearchResults.map(packageSearchResult => {
- const pkgName = packageSearchResult.pkg.name
- return this.getSingleBundle(pkgName)
- })
+ .then((enabledPackageSearchResults) => {
+ const promises = enabledPackageSearchResults.map((packageSearchResult) => {
+ const pkgName = packageSearchResult.pkg.name;
+ return this.getSingleBundle(pkgName);
+ });
- return Promise.all(promises)
+ return Promise.all(promises);
})
- .then(bundles => {
+ .then((bundles) => {
return bundles.reduce((acc, b) => {
// filter out empty bundle
- if (b === '') { return acc }
- acc.push(b)
- return acc
- }, [])
- })
+ if (b === '') {
+ return acc;
+ }
+ acc.push(b);
+ return acc;
+ }, []);
+ });
// load should be promise
- this.load = p.then(availableBundles => {
+ this.load = p.then((availableBundles) => {
// evaluate bundles
- availableBundles.map(b => {
+ availableBundles.map((b) => {
// eslint-disable-next-line no-eval
- eval(b)
- })
+ eval(b);
+ });
// extract bundles by type
- heliumBundles.map(b => {
+ heliumBundles.map((b) => {
if (b.type === HeliumType.SPELL) {
- const spell = new b.class() // eslint-disable-line new-cap
- const pkgName = b.id
- spellPerMagic[spell.getMagic()] = spell
- pkgNamePerMagic[spell.getMagic()] = pkgName
+ const spell = new b.class(); // eslint-disable-line new-cap
+ const pkgName = b.id;
+ spellPerMagic[spell.getMagic()] = spell;
+ pkgNamePerMagic[spell.getMagic()] = pkgName;
} else if (b.type === HeliumType.VISUALIZATION) {
- visualizationBundles.push(b)
+ visualizationBundles.push(b);
}
- })
- })
+ });
+ });
this.init = function() {
- this.getVisualizationPackageOrder()
- }
+ this.getVisualizationPackageOrder();
+ };
// init
- this.init()
+ this.init();
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/helium/index.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/helium/index.js b/zeppelin-web/src/app/helium/index.js
index 2b27d60..754c949 100644
--- a/zeppelin-web/src/app/helium/index.js
+++ b/zeppelin-web/src/app/helium/index.js
@@ -12,7 +12,7 @@
* limitations under the License.
*/
-import HeliumController from './helium.controller'
+import HeliumController from './helium.controller';
angular.module('zeppelinWebApp')
- .controller('HeliumCtrl', HeliumController)
+ .controller('HeliumCtrl', HeliumController);
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/home/home.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/home/home.controller.js b/zeppelin-web/src/app/home/home.controller.js
index d2823dd..7ae5e44 100644
--- a/zeppelin-web/src/app/home/home.controller.js
+++ b/zeppelin-web/src/app/home/home.controller.js
@@ -12,145 +12,145 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').controller('HomeCtrl', HomeCtrl)
+angular.module('zeppelinWebApp').controller('HomeCtrl', HomeCtrl);
-function HomeCtrl ($scope, noteListFactory, websocketMsgSrv, $rootScope, arrayOrderingSrv,
+function HomeCtrl($scope, noteListFactory, websocketMsgSrv, $rootScope, arrayOrderingSrv,
ngToast, noteActionService, TRASH_FOLDER_ID) {
- 'ngInject'
-
- ngToast.dismiss()
- let vm = this
- vm.notes = noteListFactory
- vm.websocketMsgSrv = websocketMsgSrv
- vm.arrayOrderingSrv = arrayOrderingSrv
- vm.noteActionService = noteActionService
- vm.numberOfNotesDisplayed = window.innerHeight / 20
-
- vm.notebookHome = false
- vm.noteCustomHome = true
+ 'ngInject';
+
+ ngToast.dismiss();
+ let vm = this;
+ vm.notes = noteListFactory;
+ vm.websocketMsgSrv = websocketMsgSrv;
+ vm.arrayOrderingSrv = arrayOrderingSrv;
+ vm.noteActionService = noteActionService;
+ vm.numberOfNotesDisplayed = window.innerHeight / 20;
+
+ vm.notebookHome = false;
+ vm.noteCustomHome = true;
if ($rootScope.ticket !== undefined) {
- vm.staticHome = false
+ vm.staticHome = false;
} else {
- vm.staticHome = true
+ vm.staticHome = true;
}
- $scope.isReloading = false
- $scope.TRASH_FOLDER_ID = TRASH_FOLDER_ID
- $scope.query = {q: ''}
+ $scope.isReloading = false;
+ $scope.TRASH_FOLDER_ID = TRASH_FOLDER_ID;
+ $scope.query = {q: ''};
- $scope.initHome = function () {
- websocketMsgSrv.getHomeNote()
- vm.noteCustomHome = false
- }
+ $scope.initHome = function() {
+ websocketMsgSrv.getHomeNote();
+ vm.noteCustomHome = false;
+ };
- $scope.reloadNoteList = function () {
- websocketMsgSrv.reloadAllNotesFromRepo()
- $scope.isReloadingNotes = true
- }
+ $scope.reloadNoteList = function() {
+ websocketMsgSrv.reloadAllNotesFromRepo();
+ $scope.isReloadingNotes = true;
+ };
- $scope.toggleFolderNode = function (node) {
- node.hidden = !node.hidden
- }
+ $scope.toggleFolderNode = function(node) {
+ node.hidden = !node.hidden;
+ };
- angular.element('#loginModal').on('hidden.bs.modal', function (e) {
- $rootScope.$broadcast('initLoginValues')
- })
+ angular.element('#loginModal').on('hidden.bs.modal', function(e) {
+ $rootScope.$broadcast('initLoginValues');
+ });
/*
** $scope.$on functions below
*/
- $scope.$on('setNoteMenu', function (event, notes) {
- $scope.isReloadingNotes = false
- })
+ $scope.$on('setNoteMenu', function(event, notes) {
+ $scope.isReloadingNotes = false;
+ });
- $scope.$on('setNoteContent', function (event, note) {
+ $scope.$on('setNoteContent', function(event, note) {
if (vm.noteCustomHome) {
- return
+ return;
}
if (note) {
- vm.note = note
+ vm.note = note;
// initialize look And Feel
- $rootScope.$broadcast('setLookAndFeel', 'home')
+ $rootScope.$broadcast('setLookAndFeel', 'home');
// make it read only
- vm.viewOnly = true
+ vm.viewOnly = true;
- vm.notebookHome = true
- vm.staticHome = false
+ vm.notebookHome = true;
+ vm.staticHome = false;
} else {
- vm.staticHome = true
- vm.notebookHome = false
+ vm.staticHome = true;
+ vm.notebookHome = false;
}
- })
+ });
- $scope.loadMoreNotes = function () {
- vm.numberOfNotesDisplayed += 10
- }
+ $scope.loadMoreNotes = function() {
+ vm.numberOfNotesDisplayed += 10;
+ };
- $scope.renameNote = function (nodeId, nodePath) {
- vm.noteActionService.renameNote(nodeId, nodePath)
- }
+ $scope.renameNote = function(nodeId, nodePath) {
+ vm.noteActionService.renameNote(nodeId, nodePath);
+ };
- $scope.moveNoteToTrash = function (noteId) {
- vm.noteActionService.moveNoteToTrash(noteId, false)
- }
+ $scope.moveNoteToTrash = function(noteId) {
+ vm.noteActionService.moveNoteToTrash(noteId, false);
+ };
- $scope.moveFolderToTrash = function (folderId) {
- vm.noteActionService.moveFolderToTrash(folderId)
- }
+ $scope.moveFolderToTrash = function(folderId) {
+ vm.noteActionService.moveFolderToTrash(folderId);
+ };
- $scope.restoreNote = function (noteId) {
- websocketMsgSrv.restoreNote(noteId)
- }
+ $scope.restoreNote = function(noteId) {
+ websocketMsgSrv.restoreNote(noteId);
+ };
- $scope.restoreFolder = function (folderId) {
- websocketMsgSrv.restoreFolder(folderId)
- }
+ $scope.restoreFolder = function(folderId) {
+ websocketMsgSrv.restoreFolder(folderId);
+ };
- $scope.restoreAll = function () {
- vm.noteActionService.restoreAll()
- }
+ $scope.restoreAll = function() {
+ vm.noteActionService.restoreAll();
+ };
- $scope.renameFolder = function (node) {
- vm.noteActionService.renameFolder(node.id)
- }
+ $scope.renameFolder = function(node) {
+ vm.noteActionService.renameFolder(node.id);
+ };
- $scope.removeNote = function (noteId) {
- vm.noteActionService.removeNote(noteId, false)
- }
+ $scope.removeNote = function(noteId) {
+ vm.noteActionService.removeNote(noteId, false);
+ };
- $scope.removeFolder = function (folderId) {
- vm.noteActionService.removeFolder(folderId)
- }
+ $scope.removeFolder = function(folderId) {
+ vm.noteActionService.removeFolder(folderId);
+ };
- $scope.emptyTrash = function () {
- vm.noteActionService.emptyTrash()
- }
+ $scope.emptyTrash = function() {
+ vm.noteActionService.emptyTrash();
+ };
- $scope.clearAllParagraphOutput = function (noteId) {
- vm.noteActionService.clearAllParagraphOutput(noteId)
- }
+ $scope.clearAllParagraphOutput = function(noteId) {
+ vm.noteActionService.clearAllParagraphOutput(noteId);
+ };
- $scope.isFilterNote = function (note) {
+ $scope.isFilterNote = function(note) {
if (!$scope.query.q) {
- return true
+ return true;
}
- let noteName = note.name
+ let noteName = note.name;
if (noteName.toLowerCase().indexOf($scope.query.q.toLowerCase()) > -1) {
- return true
+ return true;
}
- return false
- }
+ return false;
+ };
- $scope.getNoteName = function (note) {
- return arrayOrderingSrv.getNoteName(note)
- }
+ $scope.getNoteName = function(note) {
+ return arrayOrderingSrv.getNoteName(note);
+ };
- $scope.noteComparator = function (note1, note2) {
- return arrayOrderingSrv.noteComparator(note1, note2)
- }
+ $scope.noteComparator = function(note1, note2) {
+ return arrayOrderingSrv.noteComparator(note1, note2);
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/interpreter/interpreter-item.directive.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/interpreter/interpreter-item.directive.js b/zeppelin-web/src/app/interpreter/interpreter-item.directive.js
index 4bde44d..cfb109a 100644
--- a/zeppelin-web/src/app/interpreter/interpreter-item.directive.js
+++ b/zeppelin-web/src/app/interpreter/interpreter-item.directive.js
@@ -12,20 +12,20 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').directive('interpreterItem', InterpreterItemDirective)
+angular.module('zeppelinWebApp').directive('interpreterItem', InterpreterItemDirective);
-function InterpreterItemDirective ($timeout) {
- 'ngInject'
+function InterpreterItemDirective($timeout) {
+ 'ngInject';
return {
restrict: 'A',
- link: function (scope, element, attr) {
+ link: function(scope, element, attr) {
if (scope.$last === true) {
- $timeout(function () {
- let id = 'ngRenderFinished'
- scope.$emit(id)
- })
+ $timeout(function() {
+ let id = 'ngRenderFinished';
+ scope.$emit(id);
+ });
}
- }
- }
+ },
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/interpreter/interpreter.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/interpreter/interpreter.controller.js b/zeppelin-web/src/app/interpreter/interpreter.controller.js
index ef88402..060c6b6 100644
--- a/zeppelin-web/src/app/interpreter/interpreter.controller.js
+++ b/zeppelin-web/src/app/interpreter/interpreter.controller.js
@@ -12,548 +12,552 @@
* limitations under the License.
*/
-import { ParagraphStatus, } from '../notebook/paragraph/paragraph.status'
+import {ParagraphStatus} from '../notebook/paragraph/paragraph.status';
-angular.module('zeppelinWebApp').controller('InterpreterCtrl', InterpreterCtrl)
+angular.module('zeppelinWebApp').controller('InterpreterCtrl', InterpreterCtrl);
function InterpreterCtrl($rootScope, $scope, $http, baseUrlSrv, ngToast, $timeout, $route) {
- 'ngInject'
-
- let interpreterSettingsTmp = []
- $scope.interpreterSettings = []
- $scope.availableInterpreters = {}
- $scope.showAddNewSetting = false
- $scope.showRepositoryInfo = false
- $scope.searchInterpreter = ''
- $scope._ = _
- $scope.interpreterPropertyTypes = []
- ngToast.dismiss()
-
- $scope.openPermissions = function () {
- $scope.showInterpreterAuth = true
- }
-
- $scope.closePermissions = function () {
- $scope.showInterpreterAuth = false
- }
-
- let getSelectJson = function () {
+ 'ngInject';
+
+ let interpreterSettingsTmp = [];
+ $scope.interpreterSettings = [];
+ $scope.availableInterpreters = {};
+ $scope.showAddNewSetting = false;
+ $scope.showRepositoryInfo = false;
+ $scope.searchInterpreter = '';
+ $scope._ = _;
+ $scope.interpreterPropertyTypes = [];
+ ngToast.dismiss();
+
+ $scope.openPermissions = function() {
+ $scope.showInterpreterAuth = true;
+ };
+
+ $scope.closePermissions = function() {
+ $scope.showInterpreterAuth = false;
+ };
+
+ let getSelectJson = function() {
let selectJson = {
tags: true,
minimumInputLength: 3,
multiple: true,
tokenSeparators: [',', ' '],
ajax: {
- url: function (params) {
+ url: function(params) {
if (!params.term) {
- return false
+ return false;
}
- return baseUrlSrv.getRestApiBase() + '/security/userlist/' + params.term
+ return baseUrlSrv.getRestApiBase() + '/security/userlist/' + params.term;
},
delay: 250,
- processResults: function (data, params) {
- let results = []
+ processResults: function(data, params) {
+ let results = [];
if (data.body.users.length !== 0) {
- let users = []
+ let users = [];
for (let len = 0; len < data.body.users.length; len++) {
users.push({
'id': data.body.users[len],
- 'text': data.body.users[len]
- })
+ 'text': data.body.users[len],
+ });
}
results.push({
'text': 'Users :',
- 'children': users
- })
+ 'children': users,
+ });
}
if (data.body.roles.length !== 0) {
- let roles = []
+ let roles = [];
for (let len = 0; len < data.body.roles.length; len++) {
roles.push({
'id': data.body.roles[len],
- 'text': data.body.roles[len]
- })
+ 'text': data.body.roles[len],
+ });
}
results.push({
'text': 'Roles :',
- 'children': roles
- })
+ 'children': roles,
+ });
}
return {
results: results,
pagination: {
- more: false
- }
- }
+ more: false,
+ },
+ };
},
- cache: false
- }
- }
- return selectJson
- }
-
- $scope.togglePermissions = function (intpName) {
- angular.element('#' + intpName + 'Owners').select2(getSelectJson())
+ cache: false,
+ },
+ };
+ return selectJson;
+ };
+
+ $scope.togglePermissions = function(intpName) {
+ angular.element('#' + intpName + 'Owners').select2(getSelectJson());
if ($scope.showInterpreterAuth) {
- $scope.closePermissions()
+ $scope.closePermissions();
} else {
- $scope.openPermissions()
+ $scope.openPermissions();
}
- }
+ };
- $scope.$on('ngRenderFinished', function (event, data) {
+ $scope.$on('ngRenderFinished', function(event, data) {
for (let setting = 0; setting < $scope.interpreterSettings.length; setting++) {
- angular.element('#' + $scope.interpreterSettings[setting].name + 'Owners').select2(getSelectJson())
+ angular.element('#' + $scope.interpreterSettings[setting].name + 'Owners').select2(getSelectJson());
}
- })
+ });
- let getInterpreterSettings = function () {
+ let getInterpreterSettings = function() {
$http.get(baseUrlSrv.getRestApiBase() + '/interpreter/setting')
- .then(function (res) {
- $scope.interpreterSettings = res.data.body
- checkDownloadingDependencies()
- }).catch(function (res) {
+ .then(function(res) {
+ $scope.interpreterSettings = res.data.body;
+ checkDownloadingDependencies();
+ }).catch(function(res) {
if (res.status === 401) {
ngToast.danger({
content: 'You don\'t have permission on this page',
verticalPosition: 'bottom',
- timeout: '3000'
- })
- setTimeout(function () {
- window.location = baseUrlSrv.getBase()
- }, 3000)
+ timeout: '3000',
+ });
+ setTimeout(function() {
+ window.location = baseUrlSrv.getBase();
+ }, 3000);
}
- console.log('Error %o %o', res.status, res.data ? res.data.message : '')
- })
- }
+ console.log('Error %o %o', res.status, res.data ? res.data.message : '');
+ });
+ };
- const checkDownloadingDependencies = function () {
- let isDownloading = false
+ const checkDownloadingDependencies = function() {
+ let isDownloading = false;
for (let index = 0; index < $scope.interpreterSettings.length; index++) {
- let setting = $scope.interpreterSettings[index]
+ let setting = $scope.interpreterSettings[index];
if (setting.status === 'DOWNLOADING_DEPENDENCIES') {
- isDownloading = true
+ isDownloading = true;
}
if (setting.status === ParagraphStatus.ERROR || setting.errorReason) {
ngToast.danger({content: 'Error setting properties for interpreter \'' +
setting.group + '.' + setting.name + '\': ' + setting.errorReason,
verticalPosition: 'top',
- dismissOnTimeout: false
- })
+ dismissOnTimeout: false,
+ });
}
}
if (isDownloading) {
- $timeout(function () {
+ $timeout(function() {
if ($route.current.$$route.originalPath === '/interpreter') {
- getInterpreterSettings()
+ getInterpreterSettings();
}
- }, 2000)
+ }, 2000);
}
- }
+ };
- let getAvailableInterpreters = function () {
- $http.get(baseUrlSrv.getRestApiBase() + '/interpreter').then(function (res) {
- $scope.availableInterpreters = res.data.body
- }).catch(function (res) {
- console.log('Error %o %o', res.status, res.data ? res.data.message : '')
- })
- }
+ let getAvailableInterpreters = function() {
+ $http.get(baseUrlSrv.getRestApiBase() + '/interpreter').then(function(res) {
+ $scope.availableInterpreters = res.data.body;
+ }).catch(function(res) {
+ console.log('Error %o %o', res.status, res.data ? res.data.message : '');
+ });
+ };
- let getAvailableInterpreterPropertyWidgets = function () {
+ let getAvailableInterpreterPropertyWidgets = function() {
$http.get(baseUrlSrv.getRestApiBase() + '/interpreter/property/types')
- .then(function (res) {
- $scope.interpreterPropertyTypes = res.data.body
- }).catch(function (res) {
- console.log('Error %o %o', res.status, res.data ? res.data.message : '')
- })
- }
+ .then(function(res) {
+ $scope.interpreterPropertyTypes = res.data.body;
+ }).catch(function(res) {
+ console.log('Error %o %o', res.status, res.data ? res.data.message : '');
+ });
+ };
let emptyNewProperty = function(object) {
- angular.extend(object, {propertyValue: '', propertyKey: '', propertyType: $scope.interpreterPropertyTypes[0]})
- }
+ angular.extend(object, {propertyValue: '', propertyKey: '', propertyType: $scope.interpreterPropertyTypes[0]});
+ };
- let emptyNewDependency = function (object) {
- angular.extend(object, {depArtifact: '', depExclude: ''})
- }
+ let emptyNewDependency = function(object) {
+ angular.extend(object, {depArtifact: '', depExclude: ''});
+ };
- let removeTMPSettings = function (index) {
- interpreterSettingsTmp.splice(index, 1)
- }
+ let removeTMPSettings = function(index) {
+ interpreterSettingsTmp.splice(index, 1);
+ };
- $scope.copyOriginInterpreterSettingProperties = function (settingId) {
- let index = _.findIndex($scope.interpreterSettings, {'id': settingId})
- interpreterSettingsTmp[index] = angular.copy($scope.interpreterSettings[index])
- }
+ $scope.copyOriginInterpreterSettingProperties = function(settingId) {
+ let index = _.findIndex($scope.interpreterSettings, {'id': settingId});
+ interpreterSettingsTmp[index] = angular.copy($scope.interpreterSettings[index]);
+ };
- $scope.setPerNoteOption = function (settingId, sessionOption) {
- let option
+ $scope.setPerNoteOption = function(settingId, sessionOption) {
+ let option;
if (settingId === undefined) {
- option = $scope.newInterpreterSetting.option
+ option = $scope.newInterpreterSetting.option;
} else {
- let index = _.findIndex($scope.interpreterSettings, {'id': settingId})
- let setting = $scope.interpreterSettings[index]
- option = setting.option
+ let index = _.findIndex($scope.interpreterSettings, {'id': settingId});
+ let setting = $scope.interpreterSettings[index];
+ option = setting.option;
}
if (sessionOption === 'isolated') {
- option.perNote = sessionOption
- option.session = false
- option.process = true
+ option.perNote = sessionOption;
+ option.session = false;
+ option.process = true;
} else if (sessionOption === 'scoped') {
- option.perNote = sessionOption
- option.session = true
- option.process = false
+ option.perNote = sessionOption;
+ option.session = true;
+ option.process = false;
} else {
- option.perNote = 'shared'
- option.session = false
- option.process = false
+ option.perNote = 'shared';
+ option.session = false;
+ option.process = false;
}
- }
+ };
- $scope.defaultValueByType = function (setting) {
+ $scope.defaultValueByType = function(setting) {
if (setting.propertyType === 'checkbox') {
- setting.propertyValue = false
- return
+ setting.propertyValue = false;
+ return;
}
- setting.propertyValue = ''
- }
+ setting.propertyValue = '';
+ };
- $scope.setPerUserOption = function (settingId, sessionOption) {
- let option
+ $scope.setPerUserOption = function(settingId, sessionOption) {
+ let option;
if (settingId === undefined) {
- option = $scope.newInterpreterSetting.option
+ option = $scope.newInterpreterSetting.option;
} else {
- let index = _.findIndex($scope.interpreterSettings, {'id': settingId})
- let setting = $scope.interpreterSettings[index]
- option = setting.option
+ let index = _.findIndex($scope.interpreterSettings, {'id': settingId});
+ let setting = $scope.interpreterSettings[index];
+ option = setting.option;
}
if (sessionOption === 'isolated') {
- option.perUser = sessionOption
- option.session = false
- option.process = true
+ option.perUser = sessionOption;
+ option.session = false;
+ option.process = true;
} else if (sessionOption === 'scoped') {
- option.perUser = sessionOption
- option.session = true
- option.process = false
+ option.perUser = sessionOption;
+ option.session = true;
+ option.process = false;
} else {
- option.perUser = 'shared'
- option.session = false
- option.process = false
+ option.perUser = 'shared';
+ option.session = false;
+ option.process = false;
}
- }
+ };
- $scope.getPerNoteOption = function (settingId) {
- let option
+ $scope.getPerNoteOption = function(settingId) {
+ let option;
if (settingId === undefined) {
- option = $scope.newInterpreterSetting.option
+ option = $scope.newInterpreterSetting.option;
} else {
- let index = _.findIndex($scope.interpreterSettings, {'id': settingId})
- let setting = $scope.interpreterSettings[index]
- option = setting.option
+ let index = _.findIndex($scope.interpreterSettings, {'id': settingId});
+ let setting = $scope.interpreterSettings[index];
+ option = setting.option;
}
if (option.perNote === 'scoped') {
- return 'scoped'
+ return 'scoped';
} else if (option.perNote === 'isolated') {
- return 'isolated'
+ return 'isolated';
} else {
- return 'shared'
+ return 'shared';
}
- }
+ };
- $scope.getPerUserOption = function (settingId) {
- let option
+ $scope.getPerUserOption = function(settingId) {
+ let option;
if (settingId === undefined) {
- option = $scope.newInterpreterSetting.option
+ option = $scope.newInterpreterSetting.option;
} else {
- let index = _.findIndex($scope.interpreterSettings, {'id': settingId})
- let setting = $scope.interpreterSettings[index]
- option = setting.option
+ let index = _.findIndex($scope.interpreterSettings, {'id': settingId});
+ let setting = $scope.interpreterSettings[index];
+ option = setting.option;
}
if (option.perUser === 'scoped') {
- return 'scoped'
+ return 'scoped';
} else if (option.perUser === 'isolated') {
- return 'isolated'
+ return 'isolated';
} else {
- return 'shared'
+ return 'shared';
}
- }
+ };
- $scope.getInterpreterRunningOption = function (settingId) {
- let sharedModeName = 'shared'
+ $scope.getInterpreterRunningOption = function(settingId) {
+ let sharedModeName = 'shared';
- let globallyModeName = 'Globally'
- let perNoteModeName = 'Per Note'
- let perUserModeName = 'Per User'
+ let globallyModeName = 'Globally';
+ let perNoteModeName = 'Per Note';
+ let perUserModeName = 'Per User';
- let option
+ let option;
if (settingId === undefined) {
- option = $scope.newInterpreterSetting.option
+ option = $scope.newInterpreterSetting.option;
} else {
- let index = _.findIndex($scope.interpreterSettings, {'id': settingId})
- let setting = $scope.interpreterSettings[index]
- option = setting.option
+ let index = _.findIndex($scope.interpreterSettings, {'id': settingId});
+ let setting = $scope.interpreterSettings[index];
+ option = setting.option;
}
- let perNote = option.perNote
- let perUser = option.perUser
+ let perNote = option.perNote;
+ let perUser = option.perUser;
// Globally == shared_perNote + shared_perUser
if (perNote === sharedModeName && perUser === sharedModeName) {
- return globallyModeName
+ return globallyModeName;
}
if ($rootScope.ticket.ticket === 'anonymous' && $rootScope.ticket.roles === '[]') {
if (perNote !== undefined && typeof perNote === 'string' && perNote !== '') {
- return perNoteModeName
+ return perNoteModeName;
}
} else if ($rootScope.ticket.ticket !== 'anonymous') {
if (perNote !== undefined && typeof perNote === 'string' && perNote !== '') {
if (perUser !== undefined && typeof perUser === 'string' && perUser !== '') {
- return perUserModeName
+ return perUserModeName;
}
- return perNoteModeName
+ return perNoteModeName;
}
}
- option.perNote = sharedModeName
- option.perUser = sharedModeName
- return globallyModeName
- }
+ option.perNote = sharedModeName;
+ option.perUser = sharedModeName;
+ return globallyModeName;
+ };
- $scope.setInterpreterRunningOption = function (settingId, isPerNoteMode, isPerUserMode) {
- let option
+ $scope.setInterpreterRunningOption = function(settingId, isPerNoteMode, isPerUserMode) {
+ let option;
if (settingId === undefined) {
- option = $scope.newInterpreterSetting.option
+ option = $scope.newInterpreterSetting.option;
} else {
- let index = _.findIndex($scope.interpreterSettings, {'id': settingId})
- let setting = $scope.interpreterSettings[index]
- option = setting.option
+ let index = _.findIndex($scope.interpreterSettings, {'id': settingId});
+ let setting = $scope.interpreterSettings[index];
+ option = setting.option;
}
- option.perNote = isPerNoteMode
- option.perUser = isPerUserMode
- }
+ option.perNote = isPerNoteMode;
+ option.perUser = isPerUserMode;
+ };
- $scope.updateInterpreterSetting = function (form, settingId) {
+ $scope.updateInterpreterSetting = function(form, settingId) {
const thisConfirm = BootstrapDialog.confirm({
closable: false,
closeByBackdrop: false,
closeByKeyboard: false,
title: '',
message: 'Do you want to update this interpreter and restart with new settings?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- let index = _.findIndex($scope.interpreterSettings, {'id': settingId})
- let setting = $scope.interpreterSettings[index]
+ let index = _.findIndex($scope.interpreterSettings, {'id': settingId});
+ let setting = $scope.interpreterSettings[index];
if (setting.propertyKey !== '' || setting.propertyKey) {
- $scope.addNewInterpreterProperty(settingId)
+ $scope.addNewInterpreterProperty(settingId);
}
if (setting.depArtifact !== '' || setting.depArtifact) {
- $scope.addNewInterpreterDependency(settingId)
+ $scope.addNewInterpreterDependency(settingId);
}
// add missing field of option
if (!setting.option) {
- setting.option = {}
+ setting.option = {};
}
if (setting.option.isExistingProcess === undefined) {
- setting.option.isExistingProcess = false
+ setting.option.isExistingProcess = false;
}
if (setting.option.setPermission === undefined) {
- setting.option.setPermission = false
+ setting.option.setPermission = false;
}
if (setting.option.isUserImpersonate === undefined) {
- setting.option.isUserImpersonate = false
+ setting.option.isUserImpersonate = false;
}
if (!($scope.getInterpreterRunningOption(settingId) === 'Per User' &&
$scope.getPerUserOption(settingId) === 'isolated')) {
- setting.option.isUserImpersonate = false
+ setting.option.isUserImpersonate = false;
}
if (setting.option.remote === undefined) {
// remote always true for now
- setting.option.remote = true
+ setting.option.remote = true;
}
- setting.option.owners = angular.element('#' + setting.name + 'Owners').val()
+ setting.option.owners = angular.element('#' + setting.name + 'Owners').val();
let request = {
option: angular.copy(setting.option),
properties: angular.copy(setting.properties),
- dependencies: angular.copy(setting.dependencies)
- }
+ dependencies: angular.copy(setting.dependencies),
+ };
- thisConfirm.$modalFooter.find('button').addClass('disabled')
+ thisConfirm.$modalFooter.find('button').addClass('disabled');
thisConfirm.$modalFooter.find('button:contains("OK")')
- .html('<i class="fa fa-circle-o-notch fa-spin"></i> Saving Setting')
+ .html('<i class="fa fa-circle-o-notch fa-spin"></i> Saving Setting');
$http.put(baseUrlSrv.getRestApiBase() + '/interpreter/setting/' + settingId, request)
- .then(function (res) {
- $scope.interpreterSettings[index] = res.data.body
- removeTMPSettings(index)
- checkDownloadingDependencies()
- thisConfirm.close()
- })
- .catch(function (res) {
- const message = res.data ? res.data.message : 'Could not connect to server.'
- console.log('Error %o %o', res.status, message)
- ngToast.danger({content: message, verticalPosition: 'bottom'})
- form.$show()
- thisConfirm.close()
+ .then(function(res) {
+ $scope.interpreterSettings[index] = res.data.body;
+ removeTMPSettings(index);
+ checkDownloadingDependencies();
+ thisConfirm.close();
})
- return false
+ .catch(function(res) {
+ const message = res.data ? res.data.message : 'Could not connect to server.';
+ console.log('Error %o %o', res.status, message);
+ ngToast.danger({content: message, verticalPosition: 'bottom'});
+ form.$show();
+ thisConfirm.close();
+ });
+ return false;
} else {
- form.$show()
+ form.$show();
}
- }
- })
- }
+ },
+ });
+ };
- $scope.resetInterpreterSetting = function (settingId) {
- let index = _.findIndex($scope.interpreterSettings, {'id': settingId})
+ $scope.resetInterpreterSetting = function(settingId) {
+ let index = _.findIndex($scope.interpreterSettings, {'id': settingId});
// Set the old settings back
- $scope.interpreterSettings[index] = angular.copy(interpreterSettingsTmp[index])
- removeTMPSettings(index)
- }
+ $scope.interpreterSettings[index] = angular.copy(interpreterSettingsTmp[index]);
+ removeTMPSettings(index);
+ };
- $scope.removeInterpreterSetting = function (settingId) {
+ $scope.removeInterpreterSetting = function(settingId) {
BootstrapDialog.confirm({
closable: true,
title: '',
message: 'Do you want to delete this interpreter setting?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
$http.delete(baseUrlSrv.getRestApiBase() + '/interpreter/setting/' + settingId)
- .then(function (res) {
- let index = _.findIndex($scope.interpreterSettings, {'id': settingId})
- $scope.interpreterSettings.splice(index, 1)
- }).catch(function (res) {
- console.log('Error %o %o', res.status, res.data ? res.data.message : '')
- })
+ .then(function(res) {
+ let index = _.findIndex($scope.interpreterSettings, {'id': settingId});
+ $scope.interpreterSettings.splice(index, 1);
+ }).catch(function(res) {
+ console.log('Error %o %o', res.status, res.data ? res.data.message : '');
+ });
}
- }
- })
- }
+ },
+ });
+ };
- $scope.newInterpreterGroupChange = function () {
+ $scope.newInterpreterGroupChange = function() {
let el = _.pluck(_.filter($scope.availableInterpreters, {'name': $scope.newInterpreterSetting.group}),
- 'properties')
- let properties = {}
+ 'properties');
+ let properties = {};
for (let i = 0; i < el.length; i++) {
- let intpInfo = el[i]
+ let intpInfo = el[i];
for (let key in intpInfo) {
- properties[key] = {
- value: intpInfo[key].defaultValue,
- description: intpInfo[key].description,
- type: intpInfo[key].type
+ if (intpInfo.hasOwnProperty(key)) {
+ properties[key] = {
+ value: intpInfo[key].defaultValue,
+ description: intpInfo[key].description,
+ type: intpInfo[key].type,
+ };
}
}
}
- $scope.newInterpreterSetting.properties = properties
- }
+ $scope.newInterpreterSetting.properties = properties;
+ };
- $scope.restartInterpreterSetting = function (settingId) {
+ $scope.restartInterpreterSetting = function(settingId) {
BootstrapDialog.confirm({
closable: true,
title: '',
message: 'Do you want to restart this interpreter?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
$http.put(baseUrlSrv.getRestApiBase() + '/interpreter/setting/restart/' + settingId)
- .then(function (res) {
- let index = _.findIndex($scope.interpreterSettings, {'id': settingId})
- $scope.interpreterSettings[index] = res.data.body
- ngToast.info('Interpreter stopped. Will be lazily started on next run.')
- }).catch(function (res) {
- let errorMsg = (res.data !== null) ? res.data.message : 'Could not connect to server.'
- console.log('Error %o %o', res.status, errorMsg)
- ngToast.danger(errorMsg)
- })
+ .then(function(res) {
+ let index = _.findIndex($scope.interpreterSettings, {'id': settingId});
+ $scope.interpreterSettings[index] = res.data.body;
+ ngToast.info('Interpreter stopped. Will be lazily started on next run.');
+ }).catch(function(res) {
+ let errorMsg = (res.data !== null) ? res.data.message : 'Could not connect to server.';
+ console.log('Error %o %o', res.status, errorMsg);
+ ngToast.danger(errorMsg);
+ });
}
- }
- })
- }
+ },
+ });
+ };
- $scope.addNewInterpreterSetting = function () {
+ $scope.addNewInterpreterSetting = function() {
// user input validation on interpreter creation
if (!$scope.newInterpreterSetting.name ||
!$scope.newInterpreterSetting.name.trim() || !$scope.newInterpreterSetting.group) {
BootstrapDialog.alert({
closable: true,
title: 'Add interpreter',
- message: 'Please fill in interpreter name and choose a group'
- })
- return
+ message: 'Please fill in interpreter name and choose a group',
+ });
+ return;
}
if ($scope.newInterpreterSetting.name.indexOf('.') >= 0) {
BootstrapDialog.alert({
closable: true,
title: 'Add interpreter',
- message: '\'.\' is invalid for interpreter name'
- })
- return
+ message: '\'.\' is invalid for interpreter name',
+ });
+ return;
}
if (_.findIndex($scope.interpreterSettings, {'name': $scope.newInterpreterSetting.name}) >= 0) {
BootstrapDialog.alert({
closable: true,
title: 'Add interpreter',
- message: 'Name ' + $scope.newInterpreterSetting.name + ' already exists'
- })
- return
+ message: 'Name ' + $scope.newInterpreterSetting.name + ' already exists',
+ });
+ return;
}
- let newSetting = $scope.newInterpreterSetting
+ let newSetting = $scope.newInterpreterSetting;
if (newSetting.propertyKey !== '' || newSetting.propertyKey) {
- $scope.addNewInterpreterProperty()
+ $scope.addNewInterpreterProperty();
}
if (newSetting.depArtifact !== '' || newSetting.depArtifact) {
- $scope.addNewInterpreterDependency()
+ $scope.addNewInterpreterDependency();
}
if (newSetting.option.setPermission === undefined) {
- newSetting.option.setPermission = false
+ newSetting.option.setPermission = false;
}
- newSetting.option.owners = angular.element('#newInterpreterOwners').val()
+ newSetting.option.owners = angular.element('#newInterpreterOwners').val();
- let request = angular.copy($scope.newInterpreterSetting)
+ let request = angular.copy($scope.newInterpreterSetting);
// Change properties to proper request format
- let newProperties = {}
+ let newProperties = {};
for (let p in newSetting.properties) {
- newProperties[p] = {
- value: newSetting.properties[p].value,
- type: newSetting.properties[p].type,
- name: p
+ if (newSetting.properties.hasOwnProperty(p)) {
+ newProperties[p] = {
+ value: newSetting.properties[p].value,
+ type: newSetting.properties[p].type,
+ name: p,
+ };
}
}
- request.properties = newProperties
+ request.properties = newProperties;
$http.post(baseUrlSrv.getRestApiBase() + '/interpreter/setting', request)
- .then(function (res) {
- $scope.resetNewInterpreterSetting()
- getInterpreterSettings()
- $scope.showAddNewSetting = false
- checkDownloadingDependencies()
- }).catch(function (res) {
- const errorMsg = res.data ? res.data.message : 'Could not connect to server.'
- console.log('Error %o %o', res.status, errorMsg)
- ngToast.danger({content: errorMsg, verticalPosition: 'bottom'})
- })
- }
-
- $scope.cancelInterpreterSetting = function () {
- $scope.showAddNewSetting = false
- $scope.resetNewInterpreterSetting()
- }
-
- $scope.resetNewInterpreterSetting = function () {
+ .then(function(res) {
+ $scope.resetNewInterpreterSetting();
+ getInterpreterSettings();
+ $scope.showAddNewSetting = false;
+ checkDownloadingDependencies();
+ }).catch(function(res) {
+ const errorMsg = res.data ? res.data.message : 'Could not connect to server.';
+ console.log('Error %o %o', res.status, errorMsg);
+ ngToast.danger({content: errorMsg, verticalPosition: 'bottom'});
+ });
+ };
+
+ $scope.cancelInterpreterSetting = function() {
+ $scope.showAddNewSetting = false;
+ $scope.resetNewInterpreterSetting();
+ };
+
+ $scope.resetNewInterpreterSetting = function() {
$scope.newInterpreterSetting = {
name: undefined,
group: undefined,
@@ -564,94 +568,94 @@ function InterpreterCtrl($rootScope, $scope, $http, baseUrlSrv, ngToast, $timeou
isExistingProcess: false,
setPermission: false,
session: false,
- process: false
+ process: false,
- }
- }
- emptyNewProperty($scope.newInterpreterSetting)
- }
+ },
+ };
+ emptyNewProperty($scope.newInterpreterSetting);
+ };
- $scope.removeInterpreterProperty = function (key, settingId) {
+ $scope.removeInterpreterProperty = function(key, settingId) {
if (settingId === undefined) {
- delete $scope.newInterpreterSetting.properties[key]
+ delete $scope.newInterpreterSetting.properties[key];
} else {
- let index = _.findIndex($scope.interpreterSettings, {'id': settingId})
- delete $scope.interpreterSettings[index].properties[key]
+ let index = _.findIndex($scope.interpreterSettings, {'id': settingId});
+ delete $scope.interpreterSettings[index].properties[key];
}
- }
+ };
- $scope.removeInterpreterDependency = function (artifact, settingId) {
+ $scope.removeInterpreterDependency = function(artifact, settingId) {
if (settingId === undefined) {
$scope.newInterpreterSetting.dependencies = _.reject($scope.newInterpreterSetting.dependencies,
- function (el) {
- return el.groupArtifactVersion === artifact
- })
+ function(el) {
+ return el.groupArtifactVersion === artifact;
+ });
} else {
- let index = _.findIndex($scope.interpreterSettings, {'id': settingId})
+ let index = _.findIndex($scope.interpreterSettings, {'id': settingId});
$scope.interpreterSettings[index].dependencies = _.reject($scope.interpreterSettings[index].dependencies,
- function (el) {
- return el.groupArtifactVersion === artifact
- })
+ function(el) {
+ return el.groupArtifactVersion === artifact;
+ });
}
- }
+ };
- $scope.addNewInterpreterProperty = function (settingId) {
+ $scope.addNewInterpreterProperty = function(settingId) {
if (settingId === undefined) {
// Add new property from create form
if (!$scope.newInterpreterSetting.propertyKey || $scope.newInterpreterSetting.propertyKey === '') {
- return
+ return;
}
$scope.newInterpreterSetting.properties[$scope.newInterpreterSetting.propertyKey] = {
value: $scope.newInterpreterSetting.propertyValue,
- type: $scope.newInterpreterSetting.propertyType
- }
- emptyNewProperty($scope.newInterpreterSetting)
+ type: $scope.newInterpreterSetting.propertyType,
+ };
+ emptyNewProperty($scope.newInterpreterSetting);
} else {
// Add new property from edit form
- let index = _.findIndex($scope.interpreterSettings, {'id': settingId})
- let setting = $scope.interpreterSettings[index]
+ let index = _.findIndex($scope.interpreterSettings, {'id': settingId});
+ let setting = $scope.interpreterSettings[index];
if (!setting.propertyKey || setting.propertyKey === '') {
- return
+ return;
}
setting.properties[setting.propertyKey] =
- {value: setting.propertyValue, type: setting.propertyType}
+ {value: setting.propertyValue, type: setting.propertyType};
- emptyNewProperty(setting)
+ emptyNewProperty(setting);
}
- }
+ };
- $scope.addNewInterpreterDependency = function (settingId) {
+ $scope.addNewInterpreterDependency = function(settingId) {
if (settingId === undefined) {
// Add new dependency from create form
if (!$scope.newInterpreterSetting.depArtifact || $scope.newInterpreterSetting.depArtifact === '') {
- return
+ return;
}
// overwrite if artifact already exists
- let newSetting = $scope.newInterpreterSetting
+ let newSetting = $scope.newInterpreterSetting;
for (let d in newSetting.dependencies) {
if (newSetting.dependencies[d].groupArtifactVersion === newSetting.depArtifact) {
newSetting.dependencies[d] = {
'groupArtifactVersion': newSetting.depArtifact,
- 'exclusions': newSetting.depExclude
- }
- newSetting.dependencies.splice(d, 1)
+ 'exclusions': newSetting.depExclude,
+ };
+ newSetting.dependencies.splice(d, 1);
}
}
newSetting.dependencies.push({
'groupArtifactVersion': newSetting.depArtifact,
- 'exclusions': (newSetting.depExclude === '') ? [] : newSetting.depExclude
- })
- emptyNewDependency(newSetting)
+ 'exclusions': (newSetting.depExclude === '') ? [] : newSetting.depExclude,
+ });
+ emptyNewDependency(newSetting);
} else {
// Add new dependency from edit form
- let index = _.findIndex($scope.interpreterSettings, {'id': settingId})
- let setting = $scope.interpreterSettings[index]
+ let index = _.findIndex($scope.interpreterSettings, {'id': settingId});
+ let setting = $scope.interpreterSettings[index];
if (!setting.depArtifact || setting.depArtifact === '') {
- return
+ return;
}
// overwrite if artifact already exists
@@ -659,21 +663,21 @@ function InterpreterCtrl($rootScope, $scope, $http, baseUrlSrv, ngToast, $timeou
if (setting.dependencies[dep].groupArtifactVersion === setting.depArtifact) {
setting.dependencies[dep] = {
'groupArtifactVersion': setting.depArtifact,
- 'exclusions': setting.depExclude
- }
- setting.dependencies.splice(dep, 1)
+ 'exclusions': setting.depExclude,
+ };
+ setting.dependencies.splice(dep, 1);
}
}
setting.dependencies.push({
'groupArtifactVersion': setting.depArtifact,
- 'exclusions': (setting.depExclude === '') ? [] : setting.depExclude
- })
- emptyNewDependency(setting)
+ 'exclusions': (setting.depExclude === '') ? [] : setting.depExclude,
+ });
+ emptyNewDependency(setting);
}
- }
+ };
- $scope.resetNewRepositorySetting = function () {
+ $scope.resetNewRepositorySetting = function() {
$scope.newRepoSetting = {
id: '',
url: '',
@@ -684,102 +688,102 @@ function InterpreterCtrl($rootScope, $scope, $http, baseUrlSrv, ngToast, $timeou
proxyHost: '',
proxyPort: null,
proxyLogin: '',
- proxyPassword: ''
- }
- }
+ proxyPassword: '',
+ };
+ };
- let getRepositories = function () {
+ let getRepositories = function() {
$http.get(baseUrlSrv.getRestApiBase() + '/interpreter/repository')
- .success(function (data, status, headers, config) {
- $scope.repositories = data.body
- }).error(function (data, status, headers, config) {
- console.log('Error %o %o', status, data.message)
- })
- }
+ .success(function(data, status, headers, config) {
+ $scope.repositories = data.body;
+ }).error(function(data, status, headers, config) {
+ console.log('Error %o %o', status, data.message);
+ });
+ };
- $scope.addNewRepository = function () {
- let request = angular.copy($scope.newRepoSetting)
+ $scope.addNewRepository = function() {
+ let request = angular.copy($scope.newRepoSetting);
$http.post(baseUrlSrv.getRestApiBase() + '/interpreter/repository', request)
- .then(function (res) {
- getRepositories()
- $scope.resetNewRepositorySetting()
- angular.element('#repoModal').modal('hide')
- }).catch(function (res) {
- console.log('Error %o %o', res.headers, res.config)
- })
- }
-
- $scope.removeRepository = function (repoId) {
+ .then(function(res) {
+ getRepositories();
+ $scope.resetNewRepositorySetting();
+ angular.element('#repoModal').modal('hide');
+ }).catch(function(res) {
+ console.log('Error %o %o', res.headers, res.config);
+ });
+ };
+
+ $scope.removeRepository = function(repoId) {
BootstrapDialog.confirm({
closable: true,
title: '',
message: 'Do you want to delete this repository?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
$http.delete(baseUrlSrv.getRestApiBase() + '/interpreter/repository/' + repoId)
- .then(function (res) {
- let index = _.findIndex($scope.repositories, {'id': repoId})
- $scope.repositories.splice(index, 1)
- }).catch(function (res) {
- console.log('Error %o %o', res.status, res.data ? res.data.message : '')
- })
+ .then(function(res) {
+ let index = _.findIndex($scope.repositories, {'id': repoId});
+ $scope.repositories.splice(index, 1);
+ }).catch(function(res) {
+ console.log('Error %o %o', res.status, res.data ? res.data.message : '');
+ });
}
- }
- })
- }
+ },
+ });
+ };
- $scope.isDefaultRepository = function (repoId) {
+ $scope.isDefaultRepository = function(repoId) {
if (repoId === 'central' || repoId === 'local') {
- return true
+ return true;
} else {
- return false
+ return false;
}
- }
+ };
- $scope.showErrorMessage = function (setting) {
+ $scope.showErrorMessage = function(setting) {
BootstrapDialog.show({
title: 'Error downloading dependencies',
- message: setting.errorReason
- })
- }
+ message: setting.errorReason,
+ });
+ };
let init = function() {
- getAvailableInterpreterPropertyWidgets()
+ getAvailableInterpreterPropertyWidgets();
- $scope.resetNewInterpreterSetting()
- $scope.resetNewRepositorySetting()
+ $scope.resetNewInterpreterSetting();
+ $scope.resetNewRepositorySetting();
- getInterpreterSettings()
- getAvailableInterpreters()
- getRepositories()
- }
+ getInterpreterSettings();
+ getAvailableInterpreters();
+ getRepositories();
+ };
- $scope.showSparkUI = function (settingId) {
+ $scope.showSparkUI = function(settingId) {
$http.get(baseUrlSrv.getRestApiBase() + '/interpreter/metadata/' + settingId)
- .then(function (res) {
+ .then(function(res) {
if (res.data.body === undefined) {
BootstrapDialog.alert({
- message: 'No spark application running'
- })
- return
+ message: 'No spark application running',
+ });
+ return;
}
if (res.data.body.url) {
- window.open(res.data.body.url, '_blank')
+ window.open(res.data.body.url, '_blank');
} else {
BootstrapDialog.alert({
- message: res.data.body.message
- })
+ message: res.data.body.message,
+ });
}
- }).catch(function (res) {
- console.log('Error %o %o', res.status, res.data ? res.data.message : '')
- })
- }
+ }).catch(function(res) {
+ console.log('Error %o %o', res.status, res.data ? res.data.message : '');
+ });
+ };
$scope.getInterpreterBindingModeDocsLink = function() {
- const currentVersion = $rootScope.zeppelinVersion
- return `https://zeppelin.apache.org/docs/${currentVersion}/usage/interpreter/interpreter_binding_mode.html`
- }
+ const currentVersion = $rootScope.zeppelinVersion;
+ return `https://zeppelin.apache.org/docs/${currentVersion}/usage/interpreter/interpreter_binding_mode.html`;
+ };
- init()
+ init();
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/interpreter/interpreter.filter.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/interpreter/interpreter.filter.js b/zeppelin-web/src/app/interpreter/interpreter.filter.js
index 3f42572..7b5ace0 100644
--- a/zeppelin-web/src/app/interpreter/interpreter.filter.js
+++ b/zeppelin-web/src/app/interpreter/interpreter.filter.js
@@ -12,11 +12,11 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').filter('sortByKey', sortByKey)
+angular.module('zeppelinWebApp').filter('sortByKey', sortByKey);
-function sortByKey () {
- return function (properties) {
- let sortedKeys = properties ? Object.keys(properties) : []
- return sortedKeys.sort()
- }
+function sortByKey() {
+ return function(properties) {
+ let sortedKeys = properties ? Object.keys(properties) : [];
+ return sortedKeys.sort();
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/interpreter/widget/number-widget.directive.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/interpreter/widget/number-widget.directive.js b/zeppelin-web/src/app/interpreter/widget/number-widget.directive.js
index 2046b94..6ea129a 100644
--- a/zeppelin-web/src/app/interpreter/widget/number-widget.directive.js
+++ b/zeppelin-web/src/app/interpreter/widget/number-widget.directive.js
@@ -12,20 +12,20 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').directive('numberWidget', InterpreterNumberDirective)
+angular.module('zeppelinWebApp').directive('numberWidget', InterpreterNumberDirective);
function InterpreterNumberDirective() {
return {
require: 'ngModel',
- link: function (scope, element, attrs, modelCtrl) {
- modelCtrl.$parsers.push(function (inputValue) {
- let transformedInput = inputValue ? inputValue.replace(/[^\d.-]/g, '') : null
+ link: function(scope, element, attrs, modelCtrl) {
+ modelCtrl.$parsers.push(function(inputValue) {
+ let transformedInput = inputValue ? inputValue.replace(/[^\d.-]/g, '') : null;
if (transformedInput !== inputValue) {
- modelCtrl.$setViewValue(transformedInput)
- modelCtrl.$render()
+ modelCtrl.$setViewValue(transformedInput);
+ modelCtrl.$render();
}
- return transformedInput
- })
- }
- }
+ return transformedInput;
+ });
+ },
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/jobmanager/job-status.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/jobmanager/job-status.js b/zeppelin-web/src/app/jobmanager/job-status.js
index eda41b1..d918299 100644
--- a/zeppelin-web/src/app/jobmanager/job-status.js
+++ b/zeppelin-web/src/app/jobmanager/job-status.js
@@ -19,36 +19,36 @@ export const JobStatus = {
ERROR: 'ERROR',
PENDING: 'PENDING',
RUNNING: 'RUNNING',
-}
+};
export function getJobIconByStatus(jobStatus) {
if (jobStatus === JobStatus.READY) {
- return 'fa fa-circle-o'
+ return 'fa fa-circle-o';
} else if (jobStatus === JobStatus.FINISHED) {
- return 'fa fa-circle'
+ return 'fa fa-circle';
} else if (jobStatus === JobStatus.ABORT) {
- return 'fa fa-circle'
+ return 'fa fa-circle';
} else if (jobStatus === JobStatus.ERROR) {
- return 'fa fa-circle'
+ return 'fa fa-circle';
} else if (jobStatus === JobStatus.PENDING) {
- return 'fa fa-circle'
+ return 'fa fa-circle';
} else if (jobStatus === JobStatus.RUNNING) {
- return 'fa fa-spinner'
+ return 'fa fa-spinner';
}
}
export function getJobColorByStatus(jobStatus) {
if (jobStatus === JobStatus.READY) {
- return 'green'
+ return 'green';
} else if (jobStatus === JobStatus.FINISHED) {
- return 'green'
+ return 'green';
} else if (jobStatus === JobStatus.ABORT) {
- return 'orange'
+ return 'orange';
} else if (jobStatus === JobStatus.ERROR) {
- return 'red'
+ return 'red';
} else if (jobStatus === JobStatus.PENDING) {
- return 'gray'
+ return 'gray';
} else if (jobStatus === JobStatus.RUNNING) {
- return 'blue'
+ return 'blue';
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/jobmanager/job/job.component.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/jobmanager/job/job.component.js b/zeppelin-web/src/app/jobmanager/job/job.component.js
index c4d4f51..e6f102f 100644
--- a/zeppelin-web/src/app/jobmanager/job/job.component.js
+++ b/zeppelin-web/src/app/jobmanager/job/job.component.js
@@ -12,35 +12,35 @@
* limitations under the License.
*/
-import moment from 'moment'
+import moment from 'moment';
-import { ParagraphStatus, } from '../../notebook/paragraph/paragraph.status'
-import { getJobColorByStatus, getJobIconByStatus } from '../job-status'
+import {ParagraphStatus} from '../../notebook/paragraph/paragraph.status';
+import {getJobColorByStatus, getJobIconByStatus} from '../job-status';
-import jobTemplate from './job.html'
-import './job.css'
+import jobTemplate from './job.html';
+import './job.css';
class JobController {
constructor($http, JobManagerService) {
- 'ngInject'
- this.$http = $http
- this.JobManagerService = JobManagerService
+ 'ngInject';
+ this.$http = $http;
+ this.JobManagerService = JobManagerService;
}
isRunning() {
- return this.note.isRunningJob
+ return this.note.isRunningJob;
}
getParagraphs() {
- return this.note.paragraphs
+ return this.note.paragraphs;
}
getNoteId() {
- return this.note.noteId
+ return this.note.noteId;
}
getNoteName() {
- return this.note.noteName
+ return this.note.noteName;
}
runJob() {
@@ -48,19 +48,21 @@ class JobController {
closable: true,
title: 'Job Dialog',
message: 'Run all paragraphs?',
- callback: clickOk => {
- if (!clickOk) { return }
+ callback: (clickOk) => {
+ if (!clickOk) {
+ return;
+ }
- const noteId = this.getNoteId()
+ const noteId = this.getNoteId();
// if the request is handled successfully, the job page will get updated using websocket
this.JobManagerService.sendRunJobRequest(noteId)
- .catch(response => {
+ .catch((response) => {
let message = (response.data && response.data.message)
- ? response.data.message : 'SERVER ERROR'
- this.showErrorDialog('Execution Failure', message)
- })
- }
- })
+ ? response.data.message : 'SERVER ERROR';
+ this.showErrorDialog('Execution Failure', message);
+ });
+ },
+ });
}
stopJob() {
@@ -68,81 +70,85 @@ class JobController {
closable: true,
title: 'Job Dialog',
message: 'Stop all paragraphs?',
- callback: clickOk => {
- if (!clickOk) { return }
+ callback: (clickOk) => {
+ if (!clickOk) {
+ return;
+ }
- const noteId = this.getNoteId()
+ const noteId = this.getNoteId();
// if the request is handled successfully, the job page will get updated using websocket
this.JobManagerService.sendStopJobRequest(noteId)
- .catch(response => {
+ .catch((response) => {
let message = (response.data && response.data.message)
- ? response.data.message : 'SERVER ERROR'
- this.showErrorDialog('Stop Failure', message)
- })
- }
- })
+ ? response.data.message : 'SERVER ERROR';
+ this.showErrorDialog('Stop Failure', message);
+ });
+ },
+ });
}
showErrorDialog(title, errorMessage) {
- if (!errorMessage) { errorMessage = 'SERVER ERROR' }
+ if (!errorMessage) {
+ errorMessage = 'SERVER ERROR';
+ }
BootstrapDialog.alert({
closable: true,
title: title,
- message: errorMessage
- })
+ message: errorMessage,
+ });
}
lastExecuteTime() {
- const timestamp = this.note.unixTimeLastRun
- return moment.unix(timestamp / 1000).fromNow()
+ const timestamp = this.note.unixTimeLastRun;
+ return moment.unix(timestamp / 1000).fromNow();
}
getInterpreterName() {
return typeof this.note.interpreter === 'undefined'
- ? 'interpreter is not set' : this.note.interpreter
+ ? 'interpreter is not set' : this.note.interpreter;
}
getInterpreterNameStyle() {
return typeof this.note.interpreter === 'undefined'
- ? { color: 'gray' } : { color: 'black' }
+ ? {color: 'gray'} : {color: 'black'};
}
getJobTypeIcon() {
- const noteType = this.note.noteType
+ const noteType = this.note.noteType;
if (noteType === 'normal') {
- return 'icon-doc'
+ return 'icon-doc';
} else if (noteType === 'cron') {
- return 'icon-clock'
+ return 'icon-clock';
} else {
- return 'icon-question'
+ return 'icon-question';
}
}
getJobColorByStatus(status) {
- return getJobColorByStatus(status)
+ return getJobColorByStatus(status);
}
getJobIconByStatus(status) {
- return getJobIconByStatus(status)
+ return getJobIconByStatus(status);
}
getProgress() {
- const paragraphs = this.getParagraphs()
- let paragraphStatuses = paragraphs.map(p => p.status)
- let runningOrFinishedParagraphs = paragraphStatuses.filter(status => {
- return status === ParagraphStatus.RUNNING || status === ParagraphStatus.FINISHED
- })
+ const paragraphs = this.getParagraphs();
+ let paragraphStatuses = paragraphs.map((p) => p.status);
+ let runningOrFinishedParagraphs = paragraphStatuses.filter((status) => {
+ return status === ParagraphStatus.RUNNING || status === ParagraphStatus.FINISHED;
+ });
- let totalCount = paragraphStatuses.length
- let runningCount = runningOrFinishedParagraphs.length
- let result = Math.ceil(runningCount / totalCount * 100)
- result = isNaN(result) ? 0 : result
+ let totalCount = paragraphStatuses.length;
+ let runningCount = runningOrFinishedParagraphs.length;
+ let result = Math.ceil(runningCount / totalCount * 100);
+ result = isNaN(result) ? 0 : result;
- return `${result}%`
+ return `${result}%`;
}
showPercentProgressBar() {
- return this.getProgress() > 0 && this.getProgress() < 100
+ return this.getProgress() > 0 && this.getProgress() < 100;
}
}
@@ -152,9 +158,9 @@ export const JobComponent = {
},
template: jobTemplate,
controller: JobController,
-}
+};
export const JobModule = angular
.module('zeppelinWebApp')
.component('job', JobComponent)
- .name
+ .name;
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/jobmanager/job/job.component.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/jobmanager/job/job.component.test.js b/zeppelin-web/src/app/jobmanager/job/job.component.test.js
index 6ca285c..5b6bec1 100644
--- a/zeppelin-web/src/app/jobmanager/job/job.component.test.js
+++ b/zeppelin-web/src/app/jobmanager/job/job.component.test.js
@@ -1,55 +1,55 @@
-import { ParagraphStatus } from '../../notebook/paragraph/paragraph.status'
+import {ParagraphStatus} from '../../notebook/paragraph/paragraph.status';
describe('JobComponent', () => {
- let $componentController
+ let $componentController;
- beforeEach(angular.mock.module('zeppelinWebApp'))
+ beforeEach(angular.mock.module('zeppelinWebApp'));
beforeEach(angular.mock.inject((_$componentController_) => {
- $componentController = _$componentController_
- }))
+ $componentController = _$componentController_;
+ }));
it('should get progress when there is a finished paragraph', () => {
const paragraphs = [
- { status: ParagraphStatus.FINISHED },
- ]
- const mockNote = createMockNote(paragraphs)
- const bindings = { note: mockNote, }
+ {status: ParagraphStatus.FINISHED},
+ ];
+ const mockNote = createMockNote(paragraphs);
+ const bindings = {note: mockNote};
- const ctrl = $componentController('job', null, bindings)
- expect(ctrl).toBeDefined()
+ const ctrl = $componentController('job', null, bindings);
+ expect(ctrl).toBeDefined();
- const progress1 = ctrl.getProgress()
- expect(progress1).toBe('100%')
- })
+ const progress1 = ctrl.getProgress();
+ expect(progress1).toBe('100%');
+ });
it('should get progress when there is pending and finished paragraphs', () => {
const paragraphs = [
- { status: ParagraphStatus.PENDING },
- { status: ParagraphStatus.FINISHED},
- ]
- const mockNote = createMockNote(paragraphs)
- const bindings = { note: mockNote, }
+ {status: ParagraphStatus.PENDING},
+ {status: ParagraphStatus.FINISHED},
+ ];
+ const mockNote = createMockNote(paragraphs);
+ const bindings = {note: mockNote};
- const ctrl = $componentController('job', null, bindings)
+ const ctrl = $componentController('job', null, bindings);
- const progress1 = ctrl.getProgress()
- expect(progress1).toBe('50%')
- })
+ const progress1 = ctrl.getProgress();
+ expect(progress1).toBe('50%');
+ });
it('should get proper job type icons', () => {
- const paragraphs = [ { status: ParagraphStatus.PENDING }, ]
- const mockNote = createMockNote(paragraphs)
- const bindings = { note: mockNote, }
+ const paragraphs = [{status: ParagraphStatus.PENDING}];
+ const mockNote = createMockNote(paragraphs);
+ const bindings = {note: mockNote};
- const ctrl = $componentController('job', null, bindings)
+ const ctrl = $componentController('job', null, bindings);
- let icon = ctrl.getJobTypeIcon()
- expect(icon).toBe('icon-doc')
+ let icon = ctrl.getJobTypeIcon();
+ expect(icon).toBe('icon-doc');
- mockNote.noteType = 'cron'
- icon = ctrl.getJobTypeIcon()
- expect(icon).toBe('icon-clock')
- })
+ mockNote.noteType = 'cron';
+ icon = ctrl.getJobTypeIcon();
+ expect(icon).toBe('icon-clock');
+ });
function createMockNote(paragraphs) {
return {
@@ -58,6 +58,6 @@ describe('JobComponent', () => {
noteId: 'NT01',
noteName: 'TestNote01',
noteType: 'normal',
- }
+ };
}
-})
+});
[08/12] zeppelin git commit: [ZEPPELIN-3245] checkstyle/eslintrc for
zeppelin-web (JavaScript)
Posted by pr...@apache.org.
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js
index 07ebf89..971257c 100644
--- a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js
+++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js
@@ -12,35 +12,35 @@
* limitations under the License.
*/
-import {SpellResult} from '../../spell'
-import {isParagraphRunning, ParagraphStatus} from './paragraph.status'
+import {SpellResult} from '../../spell';
+import {isParagraphRunning, ParagraphStatus} from './paragraph.status';
-import moment from 'moment'
+import moment from 'moment';
-require('moment-duration-format')
+require('moment-duration-format');
const ParagraphExecutor = {
SPELL: 'SPELL',
INTERPRETER: 'INTERPRETER',
NONE: '', /** meaning `DONE` */
-}
+};
-angular.module('zeppelinWebApp').controller('ParagraphCtrl', ParagraphCtrl)
+angular.module('zeppelinWebApp').controller('ParagraphCtrl', ParagraphCtrl);
-function ParagraphCtrl ($scope, $rootScope, $route, $window, $routeParams, $location,
+function ParagraphCtrl($scope, $rootScope, $route, $window, $routeParams, $location,
$timeout, $compile, $http, $q, websocketMsgSrv,
baseUrlSrv, ngToast, noteVarShareService,
heliumService) {
- 'ngInject'
+ 'ngInject';
- let ANGULAR_FUNCTION_OBJECT_NAME_PREFIX = '_Z_ANGULAR_FUNC_'
- $rootScope.keys = Object.keys
- $scope.parentNote = null
- $scope.paragraph = {}
- $scope.paragraph.results = {}
- $scope.paragraph.results.msg = []
- $scope.originalText = ''
- $scope.editor = null
+ let ANGULAR_FUNCTION_OBJECT_NAME_PREFIX = '_Z_ANGULAR_FUNC_';
+ $rootScope.keys = Object.keys;
+ $scope.parentNote = null;
+ $scope.paragraph = {};
+ $scope.paragraph.results = {};
+ $scope.paragraph.results.msg = [];
+ $scope.originalText = '';
+ $scope.editor = null;
// transactional info for spell execution
$scope.spellTransaction = {
@@ -49,161 +49,161 @@ function ParagraphCtrl ($scope, $rootScope, $route, $window, $routeParams, $loca
propagated: false,
resultsMsg: [],
paragraphText: '',
- }
+ };
- let searchRanges = []
+ let searchRanges = [];
const getCurrentRangeDefault = function() {
- return {id: -1, markerId: -1}
- }
- let currentRange = getCurrentRangeDefault()
+ return {id: -1, markerId: -1};
+ };
+ let currentRange = getCurrentRangeDefault();
- let editorSetting = {}
+ let editorSetting = {};
// flag that is used to set editor setting on paste percent sign
- let pastePercentSign = false
+ let pastePercentSign = false;
// flag that is used to set editor setting on save interpreter bindings
- let setInterpreterBindings = false
- let paragraphScope = $rootScope.$new(true, $rootScope)
+ let setInterpreterBindings = false;
+ let paragraphScope = $rootScope.$new(true, $rootScope);
// to keep backward compatibility
- $scope.compiledScope = paragraphScope
+ $scope.compiledScope = paragraphScope;
paragraphScope.z = {
// z.runParagraph('20150213-231621_168813393')
- runParagraph: function (paragraphId) {
+ runParagraph: function(paragraphId) {
if (paragraphId) {
- let filtered = $scope.parentNote.paragraphs.filter(function (x) {
- return x.id === paragraphId
- })
+ let filtered = $scope.parentNote.paragraphs.filter(function(x) {
+ return x.id === paragraphId;
+ });
if (filtered.length === 1) {
- let paragraph = filtered[0]
+ let paragraph = filtered[0];
websocketMsgSrv.runParagraph(paragraph.id, paragraph.title, paragraph.text,
- paragraph.config, paragraph.settings.params)
+ paragraph.config, paragraph.settings.params);
} else {
ngToast.danger({
content: 'Cannot find a paragraph with id \'' + paragraphId + '\'',
verticalPosition: 'top',
- dismissOnTimeout: false
- })
+ dismissOnTimeout: false,
+ });
}
} else {
ngToast.danger({
content: 'Please provide a \'paragraphId\' when calling z.runParagraph(paragraphId)',
verticalPosition: 'top',
- dismissOnTimeout: false
- })
+ dismissOnTimeout: false,
+ });
}
},
// Example: z.angularBind('my_var', 'Test Value', '20150213-231621_168813393')
- angularBind: function (varName, value, paragraphId) {
+ angularBind: function(varName, value, paragraphId) {
// Only push to server if there paragraphId is defined
if (paragraphId) {
- websocketMsgSrv.clientBindAngularObject($routeParams.noteId, varName, value, paragraphId)
+ websocketMsgSrv.clientBindAngularObject($routeParams.noteId, varName, value, paragraphId);
} else {
ngToast.danger({
content: 'Please provide a \'paragraphId\' when calling ' +
'z.angularBind(varName, value, \'PUT_HERE_PARAGRAPH_ID\')',
verticalPosition: 'top',
- dismissOnTimeout: false
- })
+ dismissOnTimeout: false,
+ });
}
},
// Example: z.angularUnBind('my_var', '20150213-231621_168813393')
- angularUnbind: function (varName, paragraphId) {
+ angularUnbind: function(varName, paragraphId) {
// Only push to server if paragraphId is defined
if (paragraphId) {
- websocketMsgSrv.clientUnbindAngularObject($routeParams.noteId, varName, paragraphId)
+ websocketMsgSrv.clientUnbindAngularObject($routeParams.noteId, varName, paragraphId);
} else {
ngToast.danger({
content: 'Please provide a \'paragraphId\' when calling ' +
'z.angularUnbind(varName, \'PUT_HERE_PARAGRAPH_ID\')',
verticalPosition: 'top',
- dismissOnTimeout: false})
+ dismissOnTimeout: false});
}
- }
- }
+ },
+ };
- let angularObjectRegistry = {}
+ let angularObjectRegistry = {};
// Controller init
- $scope.init = function (newParagraph, note) {
- $scope.paragraph = newParagraph
- $scope.parentNote = note
- $scope.originalText = angular.copy(newParagraph.text)
- $scope.chart = {}
- $scope.baseMapOption = ['Streets', 'Satellite', 'Hybrid', 'Topo', 'Gray', 'Oceans', 'Terrain']
- $scope.colWidthOption = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
- $scope.fontSizeOption = [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
- $scope.paragraphFocused = false
+ $scope.init = function(newParagraph, note) {
+ $scope.paragraph = newParagraph;
+ $scope.parentNote = note;
+ $scope.originalText = angular.copy(newParagraph.text);
+ $scope.chart = {};
+ $scope.baseMapOption = ['Streets', 'Satellite', 'Hybrid', 'Topo', 'Gray', 'Oceans', 'Terrain'];
+ $scope.colWidthOption = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
+ $scope.fontSizeOption = [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
+ $scope.paragraphFocused = false;
if (newParagraph.focus) {
- $scope.paragraphFocused = true
+ $scope.paragraphFocused = true;
}
if (!$scope.paragraph.config) {
- $scope.paragraph.config = {}
+ $scope.paragraph.config = {};
}
- noteVarShareService.put($scope.paragraph.id + '_paragraphScope', paragraphScope)
+ noteVarShareService.put($scope.paragraph.id + '_paragraphScope', paragraphScope);
- initializeDefault($scope.paragraph.config)
- }
+ initializeDefault($scope.paragraph.config);
+ };
- const initializeDefault = function (config) {
- let forms = $scope.paragraph.settings.forms
+ const initializeDefault = function(config) {
+ let forms = $scope.paragraph.settings.forms;
if (!config.colWidth) {
- config.colWidth = 12
+ config.colWidth = 12;
}
if (!config.fontSize) {
- config.fontSize = 9
+ config.fontSize = 9;
}
if (config.enabled === undefined) {
- config.enabled = true
+ config.enabled = true;
}
for (let idx in forms) {
if (forms[idx]) {
if (forms[idx].options) {
if (config.runOnSelectionChange === undefined) {
- config.runOnSelectionChange = true
+ config.runOnSelectionChange = true;
}
}
}
}
if (!config.results) {
- config.results = {}
+ config.results = {};
}
if (!config.editorSetting) {
- config.editorSetting = {}
+ config.editorSetting = {};
} else if (config.editorSetting.editOnDblClick) {
- editorSetting.isOutputHidden = config.editorSetting.editOnDblClick
+ editorSetting.isOutputHidden = config.editorSetting.editOnDblClick;
}
- }
+ };
const isTabCompletion = function() {
- const completionKey = $scope.paragraph.config.editorSetting.completionKey
- return completionKey === 'TAB'
- }
+ const completionKey = $scope.paragraph.config.editorSetting.completionKey;
+ return completionKey === 'TAB';
+ };
- $scope.$on('updateParagraphOutput', function (event, data) {
+ $scope.$on('updateParagraphOutput', function(event, data) {
if ($scope.paragraph.id === data.paragraphId) {
if (!$scope.paragraph.results) {
- $scope.paragraph.results = {}
+ $scope.paragraph.results = {};
}
if (!$scope.paragraph.results.msg) {
- $scope.paragraph.results.msg = []
+ $scope.paragraph.results.msg = [];
}
- let update = ($scope.paragraph.results.msg[data.index]) ? true : false
+ let update = ($scope.paragraph.results.msg[data.index]) ? true : false;
$scope.paragraph.results.msg[data.index] = {
data: data.data,
- type: data.type
- }
+ type: data.type,
+ };
if (update) {
$rootScope.$broadcast(
@@ -211,62 +211,62 @@ function ParagraphCtrl ($scope, $rootScope, $route, $window, $routeParams, $loca
$scope.paragraph.results.msg[data.index],
$scope.paragraph.config.results[data.index],
$scope.paragraph,
- data.index)
+ data.index);
}
}
- })
+ });
- $scope.getIframeDimensions = function () {
+ $scope.getIframeDimensions = function() {
if ($scope.asIframe) {
- let paragraphid = '#' + $routeParams.paragraphId + '_container'
- let height = angular.element(paragraphid).height()
- return height
+ let paragraphid = '#' + $routeParams.paragraphId + '_container';
+ let height = angular.element(paragraphid).height();
+ return height;
}
- return 0
- }
+ return 0;
+ };
- $scope.$watch($scope.getIframeDimensions, function (newValue, oldValue) {
+ $scope.$watch($scope.getIframeDimensions, function(newValue, oldValue) {
if ($scope.asIframe && newValue) {
- let message = {}
- message.height = newValue
- message.url = $location.$$absUrl
- $window.parent.postMessage(angular.toJson(message), '*')
+ let message = {};
+ message.height = newValue;
+ message.url = $location.$$absUrl;
+ $window.parent.postMessage(angular.toJson(message), '*');
}
- })
+ });
- $scope.getEditor = function () {
- return $scope.editor
- }
+ $scope.getEditor = function() {
+ return $scope.editor;
+ };
- $scope.$watch($scope.getEditor, function (newValue, oldValue) {
+ $scope.$watch($scope.getEditor, function(newValue, oldValue) {
if (!$scope.editor) {
- return
+ return;
}
if (newValue === null || newValue === undefined) {
- console.log('editor isnt loaded yet, returning')
- return
+ console.log('editor isnt loaded yet, returning');
+ return;
}
if ($scope.revisionView === true) {
- $scope.editor.setReadOnly(true)
+ $scope.editor.setReadOnly(true);
} else {
- $scope.editor.setReadOnly(false)
+ $scope.editor.setReadOnly(false);
}
- })
+ });
- let isEmpty = function (object) {
- return !object
- }
+ let isEmpty = function(object) {
+ return !object;
+ };
- $scope.isRunning = function (paragraph) {
- return isParagraphRunning(paragraph)
- }
+ $scope.isRunning = function(paragraph) {
+ return isParagraphRunning(paragraph);
+ };
- $scope.cancelParagraph = function (paragraph) {
- console.log('Cancel %o', paragraph.id)
- websocketMsgSrv.cancelParagraphRun(paragraph.id)
- }
+ $scope.cancelParagraph = function(paragraph) {
+ console.log('Cancel %o', paragraph.id);
+ websocketMsgSrv.cancelParagraphRun(paragraph.id);
+ };
- $scope.propagateSpellResult = function (paragraphId, paragraphTitle,
+ $scope.propagateSpellResult = function(paragraphId, paragraphTitle,
paragraphText, paragraphResults,
paragraphStatus, paragraphErrorMessage,
paragraphConfig, paragraphSettingsParam,
@@ -277,18 +277,18 @@ function ParagraphCtrl ($scope, $rootScope, $route, $window, $routeParams, $loca
paragraphStatus, paragraphErrorMessage,
paragraphConfig, paragraphSettingsParam,
paragraphDateStarted, paragraphDateFinished
- )
- }
+ );
+ };
- $scope.handleSpellError = function (paragraphText, error,
+ $scope.handleSpellError = function(paragraphText, error,
digestRequired, propagated) {
- const errorMessage = error.stack
- $scope.paragraph.status = ParagraphStatus.ERROR
- $scope.paragraph.errorMessage = errorMessage
- console.error('Failed to execute interpret() in spell\n', error)
+ const errorMessage = error.stack;
+ $scope.paragraph.status = ParagraphStatus.ERROR;
+ $scope.paragraph.errorMessage = errorMessage;
+ console.error('Failed to execute interpret() in spell\n', error);
if (!propagated) {
- $scope.paragraph.dateFinished = $scope.getFormattedParagraphTime()
+ $scope.paragraph.dateFinished = $scope.getFormattedParagraphTime();
}
if (!propagated) {
@@ -296,547 +296,551 @@ function ParagraphCtrl ($scope, $rootScope, $route, $window, $routeParams, $loca
$scope.paragraph.id, $scope.paragraph.title,
paragraphText, [], $scope.paragraph.status, errorMessage,
$scope.paragraph.config, $scope.paragraph.settings.params,
- $scope.paragraph.dateStarted, $scope.paragraph.dateFinished)
+ $scope.paragraph.dateStarted, $scope.paragraph.dateFinished);
}
- }
+ };
- $scope.prepareSpellTransaction = function (resultsMsg, propagated, paragraphText) {
- $scope.spellTransaction.totalResultCount = resultsMsg.length
- $scope.spellTransaction.renderedResultCount = 0
- $scope.spellTransaction.propagated = propagated
- $scope.spellTransaction.resultsMsg = resultsMsg
- $scope.spellTransaction.paragraphText = paragraphText
- }
+ $scope.prepareSpellTransaction = function(resultsMsg, propagated, paragraphText) {
+ $scope.spellTransaction.totalResultCount = resultsMsg.length;
+ $scope.spellTransaction.renderedResultCount = 0;
+ $scope.spellTransaction.propagated = propagated;
+ $scope.spellTransaction.resultsMsg = resultsMsg;
+ $scope.spellTransaction.paragraphText = paragraphText;
+ };
/**
* - update spell transaction count and
* - check transaction is finished based on the result count
* @returns {boolean}
*/
- $scope.increaseSpellTransactionResultCount = function () {
- $scope.spellTransaction.renderedResultCount += 1
+ $scope.increaseSpellTransactionResultCount = function() {
+ $scope.spellTransaction.renderedResultCount += 1;
- const total = $scope.spellTransaction.totalResultCount
- const current = $scope.spellTransaction.renderedResultCount
- return total === current
- }
+ const total = $scope.spellTransaction.totalResultCount;
+ const current = $scope.spellTransaction.renderedResultCount;
+ return total === current;
+ };
- $scope.cleanupSpellTransaction = function () {
- const status = ParagraphStatus.FINISHED
- $scope.paragraph.executor = ParagraphExecutor.NONE
- $scope.paragraph.status = status
- $scope.paragraph.results.code = status
+ $scope.cleanupSpellTransaction = function() {
+ const status = ParagraphStatus.FINISHED;
+ $scope.paragraph.executor = ParagraphExecutor.NONE;
+ $scope.paragraph.status = status;
+ $scope.paragraph.results.code = status;
- const propagated = $scope.spellTransaction.propagated
- const resultsMsg = $scope.spellTransaction.resultsMsg
- const paragraphText = $scope.spellTransaction.paragraphText
+ const propagated = $scope.spellTransaction.propagated;
+ const resultsMsg = $scope.spellTransaction.resultsMsg;
+ const paragraphText = $scope.spellTransaction.paragraphText;
if (!propagated) {
- $scope.paragraph.dateFinished = $scope.getFormattedParagraphTime()
+ $scope.paragraph.dateFinished = $scope.getFormattedParagraphTime();
}
if (!propagated) {
- const propagable = SpellResult.createPropagable(resultsMsg)
+ const propagable = SpellResult.createPropagable(resultsMsg);
$scope.propagateSpellResult(
$scope.paragraph.id, $scope.paragraph.title,
paragraphText, propagable, status, '',
$scope.paragraph.config, $scope.paragraph.settings.params,
- $scope.paragraph.dateStarted, $scope.paragraph.dateFinished)
+ $scope.paragraph.dateStarted, $scope.paragraph.dateFinished);
}
- }
+ };
- $scope.runParagraphUsingSpell = function (paragraphText,
+ $scope.runParagraphUsingSpell = function(paragraphText,
magic, digestRequired, propagated) {
- $scope.paragraph.status = 'RUNNING'
- $scope.paragraph.executor = ParagraphExecutor.SPELL
- $scope.paragraph.results = {}
- $scope.paragraph.errorMessage = ''
- if (digestRequired) { $scope.$digest() }
+ $scope.paragraph.status = 'RUNNING';
+ $scope.paragraph.executor = ParagraphExecutor.SPELL;
+ $scope.paragraph.results = {};
+ $scope.paragraph.errorMessage = '';
+ if (digestRequired) {
+ $scope.$digest();
+ }
try {
// remove magic from paragraphText
- const splited = paragraphText.split(magic)
+ const splited = paragraphText.split(magic);
// remove leading spaces
- const textWithoutMagic = splited[1].replace(/^\s+/g, '')
+ const textWithoutMagic = splited[1].replace(/^\s+/g, '');
if (!propagated) {
- $scope.paragraph.dateStarted = $scope.getFormattedParagraphTime()
+ $scope.paragraph.dateStarted = $scope.getFormattedParagraphTime();
}
// handle actual result message in promise
heliumService.executeSpell(magic, textWithoutMagic)
- .then(resultsMsg => {
- $scope.prepareSpellTransaction(resultsMsg, propagated, paragraphText)
+ .then((resultsMsg) => {
+ $scope.prepareSpellTransaction(resultsMsg, propagated, paragraphText);
- $scope.paragraph.results.msg = resultsMsg
- $scope.paragraph.config.tableHide = false
+ $scope.paragraph.results.msg = resultsMsg;
+ $scope.paragraph.config.tableHide = false;
})
- .catch(error => {
+ .catch((error) => {
$scope.handleSpellError(paragraphText, error,
- digestRequired, propagated)
- })
+ digestRequired, propagated);
+ });
} catch (error) {
$scope.handleSpellError(paragraphText, error,
- digestRequired, propagated)
+ digestRequired, propagated);
}
- }
+ };
- $scope.runParagraphUsingBackendInterpreter = function (paragraphText) {
+ $scope.runParagraphUsingBackendInterpreter = function(paragraphText) {
websocketMsgSrv.runParagraph($scope.paragraph.id, $scope.paragraph.title,
- paragraphText, $scope.paragraph.config, $scope.paragraph.settings.params)
- }
+ paragraphText, $scope.paragraph.config, $scope.paragraph.settings.params);
+ };
- $scope.bindBeforeUnload = function () {
- angular.element(window).off('beforeunload')
+ $scope.bindBeforeUnload = function() {
+ angular.element(window).off('beforeunload');
- let confirmOnPageExit = function (e) {
+ let confirmOnPageExit = function(e) {
// If we haven't been passed the event get the window.event
- e = e || window.event
- let message = 'Do you want to reload this site?'
+ e = e || window.event;
+ let message = 'Do you want to reload this site?';
// For IE6-8 and Firefox prior to version 4
if (e) {
- e.returnValue = message
+ e.returnValue = message;
}
// For Chrome, Safari, IE8+ and Opera 12+
- return message
- }
- angular.element(window).on('beforeunload', confirmOnPageExit)
- }
+ return message;
+ };
+ angular.element(window).on('beforeunload', confirmOnPageExit);
+ };
- $scope.unBindBeforeUnload = function () {
- angular.element(window).off('beforeunload')
- }
+ $scope.unBindBeforeUnload = function() {
+ angular.element(window).off('beforeunload');
+ };
- $scope.saveParagraph = function (paragraph) {
- const dirtyText = paragraph.text
+ $scope.saveParagraph = function(paragraph) {
+ const dirtyText = paragraph.text;
if (dirtyText === undefined || dirtyText === $scope.originalText) {
- return
+ return;
}
- $scope.bindBeforeUnload()
+ $scope.bindBeforeUnload();
- commitParagraph(paragraph).then(function () {
- $scope.originalText = dirtyText
- $scope.dirtyText = undefined
- $scope.unBindBeforeUnload()
- })
- }
+ commitParagraph(paragraph).then(function() {
+ $scope.originalText = dirtyText;
+ $scope.dirtyText = undefined;
+ $scope.unBindBeforeUnload();
+ });
+ };
- $scope.toggleEnableDisable = function (paragraph) {
- paragraph.config.enabled = !paragraph.config.enabled
- commitParagraph(paragraph)
- }
+ $scope.toggleEnableDisable = function(paragraph) {
+ paragraph.config.enabled = !paragraph.config.enabled;
+ commitParagraph(paragraph);
+ };
/**
* @param paragraphText to be parsed
* @param digestRequired true if calling `$digest` is required
* @param propagated true if update request is sent from other client
*/
- $scope.runParagraph = function (paragraphText, digestRequired, propagated) {
+ $scope.runParagraph = function(paragraphText, digestRequired, propagated) {
if (!paragraphText || $scope.isRunning($scope.paragraph)) {
- return
+ return;
}
- const magic = SpellResult.extractMagic(paragraphText)
+ const magic = SpellResult.extractMagic(paragraphText);
if (heliumService.getSpellByMagic(magic)) {
- $scope.runParagraphUsingSpell(paragraphText, magic, digestRequired, propagated)
+ $scope.runParagraphUsingSpell(paragraphText, magic, digestRequired, propagated);
} else {
- $scope.runParagraphUsingBackendInterpreter(paragraphText)
+ $scope.runParagraphUsingBackendInterpreter(paragraphText);
}
- $scope.originalText = angular.copy(paragraphText)
- $scope.dirtyText = undefined
+ $scope.originalText = angular.copy(paragraphText);
+ $scope.dirtyText = undefined;
if ($scope.paragraph.config.editorSetting.editOnDblClick) {
- closeEditorAndOpenTable($scope.paragraph)
+ closeEditorAndOpenTable($scope.paragraph);
} else if (editorSetting.isOutputHidden &&
!$scope.paragraph.config.editorSetting.editOnDblClick) {
// %md/%angular repl make output to be hidden by default after running
// so should open output if repl changed from %md/%angular to another
- openEditorAndOpenTable($scope.paragraph)
+ openEditorAndOpenTable($scope.paragraph);
}
- editorSetting.isOutputHidden = $scope.paragraph.config.editorSetting.editOnDblClick
- }
+ editorSetting.isOutputHidden = $scope.paragraph.config.editorSetting.editOnDblClick;
+ };
- $scope.runParagraphFromShortcut = function (paragraphText) {
+ $scope.runParagraphFromShortcut = function(paragraphText) {
// passing `digestRequired` as true to update view immediately
// without this, results cannot be rendered in view more than once
- $scope.runParagraph(paragraphText, true, false)
- }
+ $scope.runParagraph(paragraphText, true, false);
+ };
- $scope.runParagraphFromButton = function () {
+ $scope.runParagraphFromButton = function() {
// we come here from the view, so we don't need to call `$digest()`
- $scope.runParagraph($scope.getEditorValue(), false, false)
- }
+ $scope.runParagraph($scope.getEditorValue(), false, false);
+ };
$scope.runAllToThis = function(paragraph) {
- $scope.$emit('runAllAbove', paragraph, true)
- }
+ $scope.$emit('runAllAbove', paragraph, true);
+ };
$scope.runAllFromThis = function(paragraph) {
- $scope.$emit('runAllBelowAndCurrent', paragraph, true)
- }
+ $scope.$emit('runAllBelowAndCurrent', paragraph, true);
+ };
- $scope.runAllToOrFromThis = function (paragraph) {
+ $scope.runAllToOrFromThis = function(paragraph) {
BootstrapDialog.show({
message: 'Run paragraphs:',
title: '',
buttons: [{
label: 'Close',
action: function(dialog) {
- dialog.close()
- }
+ dialog.close();
+ },
},
{
label: 'Run all above',
cssClass: 'btn-primary',
action: function(dialog) {
- $scope.$emit('runAllAbove', paragraph, false)
- dialog.close()
- }
+ $scope.$emit('runAllAbove', paragraph, false);
+ dialog.close();
+ },
},
{
label: 'Run current and all below',
cssClass: 'btn-primary',
action: function(dialog) {
- $scope.$emit('runAllBelowAndCurrent', paragraph, false)
- dialog.close()
- }
- }]
- })
- }
+ $scope.$emit('runAllBelowAndCurrent', paragraph, false);
+ dialog.close();
+ },
+ }],
+ });
+ };
- $scope.turnOnAutoRun = function (paragraph) {
- paragraph.config.runOnSelectionChange = !paragraph.config.runOnSelectionChange
- commitParagraph(paragraph)
- }
+ $scope.turnOnAutoRun = function(paragraph) {
+ paragraph.config.runOnSelectionChange = !paragraph.config.runOnSelectionChange;
+ commitParagraph(paragraph);
+ };
- $scope.moveUp = function (paragraph) {
- $scope.$emit('moveParagraphUp', paragraph)
- }
+ $scope.moveUp = function(paragraph) {
+ $scope.$emit('moveParagraphUp', paragraph);
+ };
- $scope.moveDown = function (paragraph) {
- $scope.$emit('moveParagraphDown', paragraph)
- }
+ $scope.moveDown = function(paragraph) {
+ $scope.$emit('moveParagraphDown', paragraph);
+ };
- $scope.insertNew = function (position) {
- $scope.$emit('insertParagraph', $scope.paragraph.id, position)
- }
+ $scope.insertNew = function(position) {
+ $scope.$emit('insertParagraph', $scope.paragraph.id, position);
+ };
- $scope.copyPara = function (position) {
- let editorValue = $scope.getEditorValue()
+ $scope.copyPara = function(position) {
+ let editorValue = $scope.getEditorValue();
if (editorValue) {
- $scope.copyParagraph(editorValue, position)
+ $scope.copyParagraph(editorValue, position);
}
- }
+ };
- $scope.copyParagraph = function (data, position) {
- let newIndex = -1
+ $scope.copyParagraph = function(data, position) {
+ let newIndex = -1;
for (let i = 0; i < $scope.note.paragraphs.length; i++) {
if ($scope.note.paragraphs[i].id === $scope.paragraph.id) {
// determine position of where to add new paragraph; default is below
if (position === 'above') {
- newIndex = i
+ newIndex = i;
} else {
- newIndex = i + 1
+ newIndex = i + 1;
}
- break
+ break;
}
}
if (newIndex < 0 || newIndex > $scope.note.paragraphs.length) {
- return
+ return;
}
- let config = angular.copy($scope.paragraph.config)
- config.editorHide = false
+ let config = angular.copy($scope.paragraph.config);
+ config.editorHide = false;
websocketMsgSrv.copyParagraph(newIndex, $scope.paragraph.title, data,
- config, $scope.paragraph.settings.params)
- }
+ config, $scope.paragraph.settings.params);
+ };
- $scope.removeParagraph = function (paragraph) {
+ $scope.removeParagraph = function(paragraph) {
if ($scope.note.paragraphs.length === 1) {
BootstrapDialog.alert({
closable: true,
- message: 'All the paragraphs can\'t be deleted.'
- })
+ message: 'All the paragraphs can\'t be deleted.',
+ });
} else {
BootstrapDialog.confirm({
closable: true,
title: '',
message: 'Do you want to delete this paragraph?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- console.log('Remove paragraph')
- websocketMsgSrv.removeParagraph(paragraph.id)
- $scope.$emit('moveFocusToNextParagraph', $scope.paragraph.id)
+ console.log('Remove paragraph');
+ websocketMsgSrv.removeParagraph(paragraph.id);
+ $scope.$emit('moveFocusToNextParagraph', $scope.paragraph.id);
}
- }
- })
+ },
+ });
}
- }
+ };
- $scope.clearParagraphOutput = function (paragraph) {
- websocketMsgSrv.clearParagraphOutput(paragraph.id)
- }
+ $scope.clearParagraphOutput = function(paragraph) {
+ websocketMsgSrv.clearParagraphOutput(paragraph.id);
+ };
- $scope.toggleEditor = function (paragraph) {
+ $scope.toggleEditor = function(paragraph) {
if (paragraph.config.editorHide) {
- $scope.openEditor(paragraph)
+ $scope.openEditor(paragraph);
} else {
- $scope.closeEditor(paragraph)
- }
- }
-
- $scope.closeEditor = function (paragraph) {
- console.log('close the note')
- paragraph.config.editorHide = true
- commitParagraph(paragraph)
- }
-
- $scope.openEditor = function (paragraph) {
- console.log('open the note')
- paragraph.config.editorHide = false
- commitParagraph(paragraph)
- }
-
- $scope.closeTable = function (paragraph) {
- console.log('close the output')
- paragraph.config.tableHide = true
- commitParagraph(paragraph)
- }
-
- $scope.openTable = function (paragraph) {
- console.log('open the output')
- paragraph.config.tableHide = false
- commitParagraph(paragraph)
- }
-
- let openEditorAndCloseTable = function (paragraph) {
- manageEditorAndTableState(paragraph, false, true)
- }
-
- const closeEditorAndOpenTable = function (paragraph) {
- manageEditorAndTableState(paragraph, true, false)
- }
-
- const openEditorAndOpenTable = function (paragraph) {
- manageEditorAndTableState(paragraph, false, false)
- }
-
- const manageEditorAndTableState = function (paragraph, hideEditor, hideTable) {
- paragraph.config.editorHide = hideEditor
- paragraph.config.tableHide = hideTable
- commitParagraph(paragraph)
- }
-
- $scope.showTitle = function (paragraph) {
- paragraph.config.title = true
- commitParagraph(paragraph)
- }
-
- $scope.hideTitle = function (paragraph) {
- paragraph.config.title = false
- commitParagraph(paragraph)
- }
-
- $scope.setTitle = function (paragraph) {
- commitParagraph(paragraph)
- }
-
- $scope.showLineNumbers = function (paragraph) {
+ $scope.closeEditor(paragraph);
+ }
+ };
+
+ $scope.closeEditor = function(paragraph) {
+ console.log('close the note');
+ paragraph.config.editorHide = true;
+ commitParagraph(paragraph);
+ };
+
+ $scope.openEditor = function(paragraph) {
+ console.log('open the note');
+ paragraph.config.editorHide = false;
+ commitParagraph(paragraph);
+ };
+
+ $scope.closeTable = function(paragraph) {
+ console.log('close the output');
+ paragraph.config.tableHide = true;
+ commitParagraph(paragraph);
+ };
+
+ $scope.openTable = function(paragraph) {
+ console.log('open the output');
+ paragraph.config.tableHide = false;
+ commitParagraph(paragraph);
+ };
+
+ let openEditorAndCloseTable = function(paragraph) {
+ manageEditorAndTableState(paragraph, false, true);
+ };
+
+ const closeEditorAndOpenTable = function(paragraph) {
+ manageEditorAndTableState(paragraph, true, false);
+ };
+
+ const openEditorAndOpenTable = function(paragraph) {
+ manageEditorAndTableState(paragraph, false, false);
+ };
+
+ const manageEditorAndTableState = function(paragraph, hideEditor, hideTable) {
+ paragraph.config.editorHide = hideEditor;
+ paragraph.config.tableHide = hideTable;
+ commitParagraph(paragraph);
+ };
+
+ $scope.showTitle = function(paragraph) {
+ paragraph.config.title = true;
+ commitParagraph(paragraph);
+ };
+
+ $scope.hideTitle = function(paragraph) {
+ paragraph.config.title = false;
+ commitParagraph(paragraph);
+ };
+
+ $scope.setTitle = function(paragraph) {
+ commitParagraph(paragraph);
+ };
+
+ $scope.showLineNumbers = function(paragraph) {
if ($scope.editor) {
- paragraph.config.lineNumbers = true
- $scope.editor.renderer.setShowGutter(true)
- commitParagraph(paragraph)
+ paragraph.config.lineNumbers = true;
+ $scope.editor.renderer.setShowGutter(true);
+ commitParagraph(paragraph);
}
- }
+ };
- $scope.hideLineNumbers = function (paragraph) {
+ $scope.hideLineNumbers = function(paragraph) {
if ($scope.editor) {
- paragraph.config.lineNumbers = false
- $scope.editor.renderer.setShowGutter(false)
- commitParagraph(paragraph)
+ paragraph.config.lineNumbers = false;
+ $scope.editor.renderer.setShowGutter(false);
+ commitParagraph(paragraph);
}
- }
+ };
- $scope.columnWidthClass = function (n) {
+ $scope.columnWidthClass = function(n) {
if ($scope.asIframe) {
- return 'col-md-12'
+ return 'col-md-12';
} else {
- return 'paragraph-col col-md-' + n
+ return 'paragraph-col col-md-' + n;
}
- }
+ };
- $scope.changeColWidth = function (paragraph, width) {
- angular.element('.navbar-right.open').removeClass('open')
- paragraph.config.colWidth = width
- $scope.$broadcast('paragraphResized', $scope.paragraph.id)
- commitParagraph(paragraph)
- }
+ $scope.changeColWidth = function(paragraph, width) {
+ angular.element('.navbar-right.open').removeClass('open');
+ paragraph.config.colWidth = width;
+ $scope.$broadcast('paragraphResized', $scope.paragraph.id);
+ commitParagraph(paragraph);
+ };
- $scope.changeFontSize = function (paragraph, fontSize) {
- angular.element('.navbar-right.open').removeClass('open')
+ $scope.changeFontSize = function(paragraph, fontSize) {
+ angular.element('.navbar-right.open').removeClass('open');
if ($scope.editor) {
$scope.editor.setOptions({
- fontSize: fontSize + 'pt'
- })
- autoAdjustEditorHeight($scope.editor)
- paragraph.config.fontSize = fontSize
- commitParagraph(paragraph)
- }
- }
-
- $scope.toggleOutput = function (paragraph) {
- paragraph.config.tableHide = !paragraph.config.tableHide
- commitParagraph(paragraph)
- }
-
- $scope.aceChanged = function (_, editor) {
- let session = editor.getSession()
- let dirtyText = session.getValue()
- $scope.dirtyText = dirtyText
+ fontSize: fontSize + 'pt',
+ });
+ autoAdjustEditorHeight($scope.editor);
+ paragraph.config.fontSize = fontSize;
+ commitParagraph(paragraph);
+ }
+ };
+
+ $scope.toggleOutput = function(paragraph) {
+ paragraph.config.tableHide = !paragraph.config.tableHide;
+ commitParagraph(paragraph);
+ };
+
+ $scope.aceChanged = function(_, editor) {
+ let session = editor.getSession();
+ let dirtyText = session.getValue();
+ $scope.dirtyText = dirtyText;
if ($scope.dirtyText !== $scope.originalText) {
- $scope.startSaveTimer()
+ $scope.startSaveTimer();
}
- setParagraphMode(session, dirtyText, editor.getCursorPosition())
- }
+ setParagraphMode(session, dirtyText, editor.getCursorPosition());
+ };
- $scope.aceLoaded = function (_editor) {
- let langTools = ace.require('ace/ext/language_tools')
- let Range = ace.require('ace/range').Range
+ $scope.aceLoaded = function(_editor) {
+ let langTools = ace.require('ace/ext/language_tools');
+ let Range = ace.require('ace/range').Range;
- _editor.$blockScrolling = Infinity
- $scope.editor = _editor
- $scope.editor.on('input', $scope.aceChanged)
+ _editor.$blockScrolling = Infinity;
+ $scope.editor = _editor;
+ $scope.editor.on('input', $scope.aceChanged);
if (_editor.container.id !== '{{paragraph.id}}_editor') {
- $scope.editor.renderer.setShowGutter($scope.paragraph.config.lineNumbers)
- $scope.editor.setShowFoldWidgets(false)
- $scope.editor.setHighlightActiveLine(false)
- $scope.editor.getSession().setUseWrapMode(true)
- $scope.editor.setTheme('ace/theme/chrome')
- $scope.editor.setReadOnly($scope.isRunning($scope.paragraph))
- $scope.editor.setHighlightActiveLine($scope.paragraphFocused)
+ $scope.editor.renderer.setShowGutter($scope.paragraph.config.lineNumbers);
+ $scope.editor.setShowFoldWidgets(false);
+ $scope.editor.setHighlightActiveLine(false);
+ $scope.editor.getSession().setUseWrapMode(true);
+ $scope.editor.setTheme('ace/theme/chrome');
+ $scope.editor.setReadOnly($scope.isRunning($scope.paragraph));
+ $scope.editor.setHighlightActiveLine($scope.paragraphFocused);
if ($scope.paragraphFocused) {
- let prefix = '%' + getInterpreterName($scope.paragraph.text)
- let paragraphText = $scope.paragraph.text ? $scope.paragraph.text.trim() : ''
+ let prefix = '%' + getInterpreterName($scope.paragraph.text);
+ let paragraphText = $scope.paragraph.text ? $scope.paragraph.text.trim() : '';
- $scope.editor.focus()
- $scope.goToEnd($scope.editor)
+ $scope.editor.focus();
+ $scope.goToEnd($scope.editor);
if (prefix === paragraphText) {
- $timeout(function () {
- $scope.editor.gotoLine(2, 0)
- }, 0)
+ $timeout(function() {
+ $scope.editor.gotoLine(2, 0);
+ }, 0);
}
}
- autoAdjustEditorHeight(_editor)
- angular.element(window).resize(function () {
- autoAdjustEditorHeight(_editor)
- })
+ autoAdjustEditorHeight(_editor);
+ angular.element(window).resize(function() {
+ autoAdjustEditorHeight(_editor);
+ });
if (navigator.appVersion.indexOf('Mac') !== -1) {
- $scope.editor.setKeyboardHandler('ace/keyboard/emacs')
- $rootScope.isMac = true
+ $scope.editor.setKeyboardHandler('ace/keyboard/emacs');
+ $rootScope.isMac = true;
} else if (navigator.appVersion.indexOf('Win') !== -1 ||
navigator.appVersion.indexOf('X11') !== -1 ||
navigator.appVersion.indexOf('Linux') !== -1) {
- $rootScope.isMac = false
+ $rootScope.isMac = false;
// not applying emacs key binding while the binding override Ctrl-v. default behavior of paste text on windows.
}
let remoteCompleter = {
getCompletions: function(editor, session, pos, prefix, callback) {
- let langTools = ace.require('ace/ext/language_tools')
- let defaultKeywords = new Set()
+ let langTools = ace.require('ace/ext/language_tools');
+ let defaultKeywords = new Set();
// eslint-disable-next-line handle-callback-err
let getDefaultKeywords = function(err, completions) {
if (completions !== undefined) {
completions.forEach(function(c) {
- defaultKeywords.add(c.value)
- })
+ defaultKeywords.add(c.value);
+ });
}
- }
+ };
if (langTools.keyWordCompleter !== undefined) {
- langTools.keyWordCompleter.getCompletions(editor, session, pos, prefix, getDefaultKeywords)
+ langTools.keyWordCompleter.getCompletions(editor, session, pos, prefix, getDefaultKeywords);
}
if (!editor.isFocused()) {
- return
+ return;
}
- pos = session.getTextRange(new Range(0, 0, pos.row, pos.column)).length
- let buf = session.getValue()
+ pos = session.getTextRange(new Range(0, 0, pos.row, pos.column)).length;
+ let buf = session.getValue();
- websocketMsgSrv.completion($scope.paragraph.id, buf, pos)
+ websocketMsgSrv.completion($scope.paragraph.id, buf, pos);
$scope.$on('completionList', function(event, data) {
let computeCaption = function(value, meta) {
- let metaLength = meta !== undefined ? meta.length : 0
- let length = 42
- let whitespaceLength = 3
- let ellipses = '...'
- let maxLengthCaption = length - metaLength - whitespaceLength - ellipses.length
+ let metaLength = meta !== undefined ? meta.length : 0;
+ let length = 42;
+ let whitespaceLength = 3;
+ let ellipses = '...';
+ let maxLengthCaption = length - metaLength - whitespaceLength - ellipses.length;
if (value !== undefined && value.length > maxLengthCaption) {
- return value.substr(0, maxLengthCaption) + ellipses
+ return value.substr(0, maxLengthCaption) + ellipses;
}
- return value
- }
+ return value;
+ };
if (data.completions) {
- let completions = []
+ let completions = [];
for (let c in data.completions) {
- let v = data.completions[c]
- if (v.meta !== undefined && v.meta === 'keyword' && defaultKeywords.has(v.value.trim())) {
- continue
+ if (data.completions.hasOwnProperty(c)) {
+ let v = data.completions[c];
+ if (v.meta !== undefined && v.meta === 'keyword' && defaultKeywords.has(v.value.trim())) {
+ continue;
+ }
+ completions.push({
+ name: v.name,
+ value: v.value,
+ meta: v.meta,
+ caption: computeCaption(v.value, v.meta),
+ score: 300,
+ });
}
- completions.push({
- name: v.name,
- value: v.value,
- meta: v.meta,
- caption: computeCaption(v.value, v.meta),
- score: 300
- })
}
- callback(null, completions)
+ callback(null, completions);
}
- })
- }
- }
+ });
+ },
+ };
langTools.setCompleters([remoteCompleter, langTools.keyWordCompleter, langTools.snippetCompleter,
- langTools.textCompleter])
+ langTools.textCompleter]);
$scope.editor.setOptions({
fontSize: $scope.paragraph.config.fontSize + 'pt',
enableBasicAutocompletion: true,
enableSnippets: false,
- enableLiveAutocompletion: false
- })
+ enableLiveAutocompletion: false,
+ });
- $scope.editor.on('focus', function () {
- handleFocus(true)
- })
+ $scope.editor.on('focus', function() {
+ handleFocus(true);
+ });
- $scope.editor.on('blur', function () {
- handleFocus(false)
- $scope.saveParagraph($scope.paragraph)
- })
+ $scope.editor.on('blur', function() {
+ handleFocus(false);
+ $scope.saveParagraph($scope.paragraph);
+ });
- $scope.editor.on('paste', function (e) {
+ $scope.editor.on('paste', function(e) {
if (e.text.indexOf('%') === 0) {
- pastePercentSign = true
+ pastePercentSign = true;
}
- })
+ });
- $scope.editor.getSession().on('change', function (e, editSession) {
- autoAdjustEditorHeight(_editor)
- })
+ $scope.editor.getSession().on('change', function(e, editSession) {
+ autoAdjustEditorHeight(_editor);
+ });
- setParagraphMode($scope.editor.getSession(), $scope.editor.getSession().getValue())
+ setParagraphMode($scope.editor.getSession(), $scope.editor.getSession().getValue());
// autocomplete on '.'
/*
@@ -851,29 +855,29 @@ function ParagraphCtrl ($scope, $rootScope, $route, $window, $routeParams, $loca
*/
// remove binding
- $scope.editor.commands.removeCommand('showSettingsMenu')
- $scope.editor.commands.removeCommand('find')
- $scope.editor.commands.removeCommand('replace')
+ $scope.editor.commands.removeCommand('showSettingsMenu');
+ $scope.editor.commands.removeCommand('find');
+ $scope.editor.commands.removeCommand('replace');
- let isOption = $rootScope.isMac ? 'option' : 'alt'
+ let isOption = $rootScope.isMac ? 'option' : 'alt';
- $scope.editor.commands.bindKey('ctrl-' + isOption + '-n.', null)
- $scope.editor.commands.bindKey('ctrl-' + isOption + '-l', null)
- $scope.editor.commands.bindKey('ctrl-' + isOption + '-w', null)
- $scope.editor.commands.bindKey('ctrl-' + isOption + '-a', null)
- $scope.editor.commands.bindKey('ctrl-' + isOption + '-k', null)
- $scope.editor.commands.bindKey('ctrl-' + isOption + '-e', null)
- $scope.editor.commands.bindKey('ctrl-' + isOption + '-t', null)
- $scope.editor.commands.bindKey('ctrl-space', null)
+ $scope.editor.commands.bindKey('ctrl-' + isOption + '-n.', null);
+ $scope.editor.commands.bindKey('ctrl-' + isOption + '-l', null);
+ $scope.editor.commands.bindKey('ctrl-' + isOption + '-w', null);
+ $scope.editor.commands.bindKey('ctrl-' + isOption + '-a', null);
+ $scope.editor.commands.bindKey('ctrl-' + isOption + '-k', null);
+ $scope.editor.commands.bindKey('ctrl-' + isOption + '-e', null);
+ $scope.editor.commands.bindKey('ctrl-' + isOption + '-t', null);
+ $scope.editor.commands.bindKey('ctrl-space', null);
if ($rootScope.isMac) {
- $scope.editor.commands.bindKey('command-l', null)
+ $scope.editor.commands.bindKey('command-l', null);
} else {
- $scope.editor.commands.bindKey('ctrl-l', null)
+ $scope.editor.commands.bindKey('ctrl-l', null);
}
// autocomplete on 'ctrl+.'
- $scope.editor.commands.bindKey('ctrl-.', 'startAutocomplete')
+ $scope.editor.commands.bindKey('ctrl-.', 'startAutocomplete');
// Show autocomplete on tab
$scope.editor.commands.addCommand({
@@ -881,113 +885,123 @@ function ParagraphCtrl ($scope, $rootScope, $route, $window, $routeParams, $loca
bindKey: {
win: 'tab',
mac: 'tab',
- sender: 'editor|cli'
+ sender: 'editor|cli',
},
exec: function(env, args, request) {
- let iCursor = $scope.editor.getCursorPosition()
- let currentLine = $scope.editor.session.getLine(iCursor.row)
+ let iCursor = $scope.editor.getCursorPosition();
+ let currentLine = $scope.editor.session.getLine(iCursor.row);
let isAllTabs = currentLine.substring(0, iCursor.column - 1).split('').every(function(char) {
- return (char === '\t' || char === ' ')
- })
+ return (char === '\t' || char === ' ');
+ });
// If user has pressed tab on first line char or if isTabCompletion() is false, keep existing behavior
// If user has pressed tab anywhere in between and editor mode is not %md, show autocomplete
if (!isAllTabs && iCursor.column && isTabCompletion()) {
- $scope.editor.execCommand('startAutocomplete')
+ $scope.editor.execCommand('startAutocomplete');
} else {
- ace.config.loadModule('ace/ext/language_tools', function () {
- $scope.editor.insertSnippet('\t')
- })
+ ace.config.loadModule('ace/ext/language_tools', function() {
+ $scope.editor.insertSnippet('\t');
+ });
}
- }
- })
+ },
+ });
- let keyBindingEditorFocusAction = function (scrollValue) {
- let numRows = $scope.editor.getSession().getLength()
- let currentRow = $scope.editor.getCursorPosition().row
+ let keyBindingEditorFocusAction = function(scrollValue) {
+ let numRows = $scope.editor.getSession().getLength();
+ let currentRow = $scope.editor.getCursorPosition().row;
if (currentRow === 0 && scrollValue <= 0) {
// move focus to previous paragraph
- $scope.$emit('moveFocusToPreviousParagraph', $scope.paragraph.id)
+ $scope.$emit('moveFocusToPreviousParagraph', $scope.paragraph.id);
} else if (currentRow === numRows - 1 && scrollValue >= 0) {
- $scope.$emit('moveFocusToNextParagraph', $scope.paragraph.id)
+ $scope.$emit('moveFocusToNextParagraph', $scope.paragraph.id);
} else {
- $scope.scrollToCursor($scope.paragraph.id, scrollValue)
+ $scope.scrollToCursor($scope.paragraph.id, scrollValue);
}
- }
+ };
// handle cursor moves
- $scope.editor.keyBinding.origOnCommandKey = $scope.editor.keyBinding.onCommandKey
- $scope.editor.keyBinding.onCommandKey = function (e, hashId, keyCode) {
+ $scope.editor.keyBinding.origOnCommandKey = $scope.editor.keyBinding.onCommandKey;
+ $scope.editor.keyBinding.onCommandKey = function(e, hashId, keyCode) {
if ($scope.editor.completer && $scope.editor.completer.activated) { // if autocompleter is active
} else {
// fix ace editor focus issue in chrome (textarea element goes to top: -1000px after focused by cursor move)
if (parseInt(angular.element('#' + $scope.paragraph.id + '_editor > textarea')
.css('top').replace('px', '')) < 0) {
- let position = $scope.editor.getCursorPosition()
- let cursorPos = $scope.editor.renderer.$cursorLayer.getPixelPosition(position, true)
- angular.element('#' + $scope.paragraph.id + '_editor > textarea').css('top', cursorPos.top)
+ let position = $scope.editor.getCursorPosition();
+ let cursorPos = $scope.editor.renderer.$cursorLayer.getPixelPosition(position, true);
+ angular.element('#' + $scope.paragraph.id + '_editor > textarea').css('top', cursorPos.top);
}
- let ROW_UP = -1
- let ROW_DOWN = 1
+ let ROW_UP = -1;
+ let ROW_DOWN = 1;
switch (keyCode) {
case 38:
- if (!e.shiftKey) { keyBindingEditorFocusAction(ROW_UP) }
- break
+ if (!e.shiftKey) {
+ keyBindingEditorFocusAction(ROW_UP);
+ }
+ break;
case 80:
- if (e.ctrlKey && !e.altKey) { keyBindingEditorFocusAction(ROW_UP) }
- break
+ if (e.ctrlKey && !e.altKey) {
+ keyBindingEditorFocusAction(ROW_UP);
+ }
+ break;
case 40:
- if (!e.shiftKey) { keyBindingEditorFocusAction(ROW_DOWN) }
- break
+ if (!e.shiftKey) {
+ keyBindingEditorFocusAction(ROW_DOWN);
+ }
+ break;
case 78:
- if (e.ctrlKey && !e.altKey) { keyBindingEditorFocusAction(ROW_DOWN) }
- break
+ if (e.ctrlKey && !e.altKey) {
+ keyBindingEditorFocusAction(ROW_DOWN);
+ }
+ break;
}
}
- this.origOnCommandKey(e, hashId, keyCode)
- }
+ this.origOnCommandKey(e, hashId, keyCode);
+ };
}
- }
+ };
- const handleFocus = function (focused, isDigestPass) {
- $scope.paragraphFocused = focused
+ const handleFocus = function(focused, isDigestPass) {
+ $scope.paragraphFocused = focused;
- if ($scope.editor) { $scope.editor.setHighlightActiveLine(focused) }
+ if ($scope.editor) {
+ $scope.editor.setHighlightActiveLine(focused);
+ }
if (isDigestPass === false || isDigestPass === undefined) {
// Protect against error in case digest is already running
- $timeout(function () {
+ $timeout(function() {
// Apply changes since they come from 3rd party library
- $scope.$digest()
- })
+ $scope.$digest();
+ });
}
- }
+ };
- let getEditorSetting = function (paragraph, interpreterName) {
- let deferred = $q.defer()
+ let getEditorSetting = function(paragraph, interpreterName) {
+ let deferred = $q.defer();
if (!$scope.revisionView) {
- websocketMsgSrv.getEditorSetting(paragraph.id, interpreterName)
+ websocketMsgSrv.getEditorSetting(paragraph.id, interpreterName);
$timeout(
- $scope.$on('editorSetting', function (event, data) {
+ $scope.$on('editorSetting', function(event, data) {
if (paragraph.id === data.paragraphId) {
- deferred.resolve(data)
+ deferred.resolve(data);
}
}
- ), 1000)
+ ), 1000);
}
- return deferred.promise
- }
+ return deferred.promise;
+ };
- let setEditorLanguage = function (session, language) {
- let mode = 'ace/mode/'
- mode += language
- $scope.paragraph.config.editorMode = mode
- session.setMode(mode)
- }
+ let setEditorLanguage = function(session, language) {
+ let mode = 'ace/mode/';
+ mode += language;
+ $scope.paragraph.config.editorMode = mode;
+ session.setMode(mode);
+ };
- const setParagraphMode = function (session, paragraphText, pos) {
+ const setParagraphMode = function(session, paragraphText, pos) {
// Evaluate the mode only if the the position is undefined
// or the first 30 characters of the paragraph have been modified
// or cursor position is at beginning of second line.(in case user hit enter after typing %magic)
@@ -996,319 +1010,321 @@ function ParagraphCtrl ($scope, $rootScope, $route, $window, $routeParams, $loca
// If paragraph loading, use config value if exists
if ((typeof pos === 'undefined') && $scope.paragraph.config.editorMode &&
!setInterpreterBindings) {
- session.setMode($scope.paragraph.config.editorMode)
+ session.setMode($scope.paragraph.config.editorMode);
} else {
- let magic = getInterpreterName(paragraphText)
+ let magic = getInterpreterName(paragraphText);
if (editorSetting.magic !== magic) {
- editorSetting.magic = magic
+ editorSetting.magic = magic;
getEditorSetting($scope.paragraph, magic)
- .then(function (setting) {
- setEditorLanguage(session, setting.editor.language)
- _.merge($scope.paragraph.config.editorSetting, setting.editor)
- })
+ .then(function(setting) {
+ setEditorLanguage(session, setting.editor.language);
+ _.merge($scope.paragraph.config.editorSetting, setting.editor);
+ });
}
}
}
- pastePercentSign = false
- setInterpreterBindings = false
- }
+ pastePercentSign = false;
+ setInterpreterBindings = false;
+ };
const getInterpreterName = function(paragraphText) {
- let intpNameRegexp = /^\s*%(.+?)(\s|\()/g
- let match = intpNameRegexp.exec(paragraphText)
+ let intpNameRegexp = /^\s*%(.+?)(\s|\()/g;
+ let match = intpNameRegexp.exec(paragraphText);
if (match) {
- return match[1].trim()
+ return match[1].trim();
// get default interpreter name if paragraph text doesn't start with '%'
// TODO(mina): dig into the cause what makes interpreterBindings to have no element
} else if ($scope.$parent.interpreterBindings && $scope.$parent.interpreterBindings.length !== 0) {
- return $scope.$parent.interpreterBindings[0].name
+ return $scope.$parent.interpreterBindings[0].name;
}
- return ''
- }
+ return '';
+ };
- const autoAdjustEditorHeight = function (editor) {
+ const autoAdjustEditorHeight = function(editor) {
let height =
editor.getSession().getScreenLength() *
- editor.renderer.lineHeight
+ editor.renderer.lineHeight;
- angular.element('#' + editor.container.id).height(height.toString() + 'px')
- editor.resize()
- }
+ angular.element('#' + editor.container.id).height(height.toString() + 'px');
+ editor.resize();
+ };
- $rootScope.$on('scrollToCursor', function (event) {
+ $rootScope.$on('scrollToCursor', function(event) {
// scroll on 'scrollToCursor' event only when cursor is in the last paragraph
- let paragraphs = angular.element('div[id$="_paragraphColumn_main"]')
+ let paragraphs = angular.element('div[id$="_paragraphColumn_main"]');
if (paragraphs[paragraphs.length - 1].id.indexOf($scope.paragraph.id) === 0) {
- $scope.scrollToCursor($scope.paragraph.id, 0)
+ $scope.scrollToCursor($scope.paragraph.id, 0);
}
- })
+ });
/** scrollToCursor if it is necessary
* when cursor touches scrollTriggerEdgeMargin from the top (or bottom) of the screen, it autoscroll to place cursor around 1/3 of screen height from the top (or bottom)
* paragraphId : paragraph that has active cursor
* lastCursorMove : 1(down), 0, -1(up) last cursor move event
**/
- $scope.scrollToCursor = function (paragraphId, lastCursorMove) {
+ $scope.scrollToCursor = function(paragraphId, lastCursorMove) {
if (!$scope.editor || !$scope.editor.isFocused()) {
// only make sense when editor is focused
- return
+ return;
}
- let lineHeight = $scope.editor.renderer.lineHeight
- let headerHeight = 103 // menubar, notebook titlebar
- let scrollTriggerEdgeMargin = 50
+ let lineHeight = $scope.editor.renderer.lineHeight;
+ let headerHeight = 103; // menubar, notebook titlebar
+ let scrollTriggerEdgeMargin = 50;
- let documentHeight = angular.element(document).height()
- let windowHeight = angular.element(window).height() // actual viewport height
+ let documentHeight = angular.element(document).height();
+ let windowHeight = angular.element(window).height(); // actual viewport height
- let scrollPosition = angular.element(document).scrollTop()
- let editorPosition = angular.element('#' + paragraphId + '_editor').offset()
- let position = $scope.editor.getCursorPosition()
- let lastCursorPosition = $scope.editor.renderer.$cursorLayer.getPixelPosition(position, true)
+ let scrollPosition = angular.element(document).scrollTop();
+ let editorPosition = angular.element('#' + paragraphId + '_editor').offset();
+ let position = $scope.editor.getCursorPosition();
+ let lastCursorPosition = $scope.editor.renderer.$cursorLayer.getPixelPosition(position, true);
- let calculatedCursorPosition = editorPosition.top + lastCursorPosition.top + lineHeight * lastCursorMove
+ let calculatedCursorPosition = editorPosition.top + lastCursorPosition.top + lineHeight * lastCursorMove;
- let scrollTargetPos
+ let scrollTargetPos;
if (calculatedCursorPosition < scrollPosition + headerHeight + scrollTriggerEdgeMargin) {
- scrollTargetPos = calculatedCursorPosition - headerHeight - ((windowHeight - headerHeight) / 3)
+ scrollTargetPos = calculatedCursorPosition - headerHeight - ((windowHeight - headerHeight) / 3);
if (scrollTargetPos < 0) {
- scrollTargetPos = 0
+ scrollTargetPos = 0;
}
} else if (calculatedCursorPosition > scrollPosition + scrollTriggerEdgeMargin + windowHeight - headerHeight) {
- scrollTargetPos = calculatedCursorPosition - headerHeight - ((windowHeight - headerHeight) * 2 / 3)
+ scrollTargetPos = calculatedCursorPosition - headerHeight - ((windowHeight - headerHeight) * 2 / 3);
if (scrollTargetPos > documentHeight) {
- scrollTargetPos = documentHeight
+ scrollTargetPos = documentHeight;
}
}
// cancel previous scroll animation
- let bodyEl = angular.element('body')
- bodyEl.stop()
- bodyEl.finish()
+ let bodyEl = angular.element('body');
+ bodyEl.stop();
+ bodyEl.finish();
// scroll to scrollTargetPos
- bodyEl.scrollTo(scrollTargetPos, {axis: 'y', interrupt: true, duration: 100})
- }
+ bodyEl.scrollTo(scrollTargetPos, {axis: 'y', interrupt: true, duration: 100});
+ };
- $scope.getEditorValue = function () {
- return !$scope.editor ? $scope.paragraph.text : $scope.editor.getValue()
- }
+ $scope.getEditorValue = function() {
+ return !$scope.editor ? $scope.paragraph.text : $scope.editor.getValue();
+ };
- $scope.getProgress = function () {
- return $scope.currentProgress || 0
- }
+ $scope.getProgress = function() {
+ return $scope.currentProgress || 0;
+ };
$scope.getFormattedParagraphTime = () => {
- return moment().toISOString()
- }
+ return moment().toISOString();
+ };
- $scope.getExecutionTime = function (pdata) {
- const end = pdata.dateFinished
- const start = pdata.dateStarted
- let timeMs = Date.parse(end) - Date.parse(start)
+ $scope.getExecutionTime = function(pdata) {
+ const end = pdata.dateFinished;
+ const start = pdata.dateStarted;
+ let timeMs = Date.parse(end) - Date.parse(start);
if (isNaN(timeMs) || timeMs < 0) {
if ($scope.isResultOutdated(pdata)) {
- return 'outdated'
+ return 'outdated';
}
- return ''
+ return '';
}
- const durationFormat = moment.duration((timeMs / 1000), 'seconds').format('h [hrs] m [min] s [sec]')
- const endFormat = moment(pdata.dateFinished).format('MMMM DD YYYY, h:mm:ss A')
+ const durationFormat = moment.duration((timeMs / 1000), 'seconds').format('h [hrs] m [min] s [sec]');
+ const endFormat = moment(pdata.dateFinished).format('MMMM DD YYYY, h:mm:ss A');
- let user = (pdata.user === undefined || pdata.user === null) ? 'anonymous' : pdata.user
- let desc = `Took ${durationFormat}. Last updated by ${user} at ${endFormat}.`
+ let user = (pdata.user === undefined || pdata.user === null) ? 'anonymous' : pdata.user;
+ let desc = `Took ${durationFormat}. Last updated by ${user} at ${endFormat}.`;
- if ($scope.isResultOutdated(pdata)) { desc += ' (outdated)' }
+ if ($scope.isResultOutdated(pdata)) {
+ desc += ' (outdated)';
+ }
- return desc
- }
+ return desc;
+ };
- $scope.getElapsedTime = function (paragraph) {
- return 'Started ' + moment(paragraph.dateStarted).fromNow() + '.'
- }
+ $scope.getElapsedTime = function(paragraph) {
+ return 'Started ' + moment(paragraph.dateStarted).fromNow() + '.';
+ };
- $scope.isResultOutdated = function (pdata) {
+ $scope.isResultOutdated = function(pdata) {
if (pdata.dateUpdated !== undefined && Date.parse(pdata.dateUpdated) > Date.parse(pdata.dateStarted)) {
- return true
+ return true;
}
- return false
- }
+ return false;
+ };
- $scope.goToEnd = function (editor) {
- editor.navigateFileEnd()
- }
+ $scope.goToEnd = function(editor) {
+ editor.navigateFileEnd();
+ };
- $scope.parseTableCell = function (cell) {
+ $scope.parseTableCell = function(cell) {
if (!isNaN(cell)) {
if (cell.length === 0 || Number(cell) > Number.MAX_SAFE_INTEGER || Number(cell) < Number.MIN_SAFE_INTEGER) {
- return cell
+ return cell;
} else {
- return Number(cell)
+ return Number(cell);
}
}
- let d = moment(cell)
+ let d = moment(cell);
if (d.isValid()) {
- return d
+ return d;
}
- return cell
- }
+ return cell;
+ };
- const commitParagraph = function (paragraph) {
+ const commitParagraph = function(paragraph) {
const {
id,
title,
text,
config,
settings: {params},
- } = paragraph
+ } = paragraph;
return websocketMsgSrv.commitParagraph(id, title, text, config, params,
- $route.current.pathParams.noteId)
- }
+ $route.current.pathParams.noteId);
+ };
/** Utility function */
- $scope.goToSingleParagraph = function () {
- let noteId = $route.current.pathParams.noteId
+ $scope.goToSingleParagraph = function() {
+ let noteId = $route.current.pathParams.noteId;
let redirectToUrl = location.protocol + '//' + location.host + location.pathname + '#/notebook/' + noteId +
- '/paragraph/' + $scope.paragraph.id + '?asIframe'
- $window.open(redirectToUrl)
- }
+ '/paragraph/' + $scope.paragraph.id + '?asIframe';
+ $window.open(redirectToUrl);
+ };
- $scope.showScrollDownIcon = function (id) {
- let doc = angular.element('#p' + id + '_text')
+ $scope.showScrollDownIcon = function(id) {
+ let doc = angular.element('#p' + id + '_text');
if (doc[0]) {
- return doc[0].scrollHeight > doc.innerHeight()
+ return doc[0].scrollHeight > doc.innerHeight();
}
- return false
- }
+ return false;
+ };
- $scope.scrollParagraphDown = function (id) {
- let doc = angular.element('#p' + id + '_text')
- doc.animate({scrollTop: doc[0].scrollHeight}, 500)
- $scope.keepScrollDown = true
- }
+ $scope.scrollParagraphDown = function(id) {
+ let doc = angular.element('#p' + id + '_text');
+ doc.animate({scrollTop: doc[0].scrollHeight}, 500);
+ $scope.keepScrollDown = true;
+ };
- $scope.showScrollUpIcon = function (id) {
+ $scope.showScrollUpIcon = function(id) {
if (angular.element('#p' + id + '_text')[0]) {
- return angular.element('#p' + id + '_text')[0].scrollTop !== 0
+ return angular.element('#p' + id + '_text')[0].scrollTop !== 0;
}
- return false
- }
+ return false;
+ };
- $scope.scrollParagraphUp = function (id) {
- let doc = angular.element('#p' + id + '_text')
- doc.animate({scrollTop: 0}, 500)
- $scope.keepScrollDown = false
- }
+ $scope.scrollParagraphUp = function(id) {
+ let doc = angular.element('#p' + id + '_text');
+ doc.animate({scrollTop: 0}, 500);
+ $scope.keepScrollDown = false;
+ };
- $scope.$on('angularObjectUpdate', function (event, data) {
- let noteId = $route.current.pathParams.noteId
+ $scope.$on('angularObjectUpdate', function(event, data) {
+ let noteId = $route.current.pathParams.noteId;
if (!data.noteId || data.noteId === noteId) {
- let scope
- let registry
+ let scope;
+ let registry;
if (!data.paragraphId || data.paragraphId === $scope.paragraph.id) {
- scope = paragraphScope
- registry = angularObjectRegistry
+ scope = paragraphScope;
+ registry = angularObjectRegistry;
} else {
- return
+ return;
}
- let varName = data.angularObject.name
+ let varName = data.angularObject.name;
if (angular.equals(data.angularObject.object, scope[varName])) {
// return when update has no change
- return
+ return;
}
if (!registry[varName]) {
registry[varName] = {
interpreterGroupId: data.interpreterGroupId,
noteId: data.noteId,
- paragraphId: data.paragraphId
- }
+ paragraphId: data.paragraphId,
+ };
} else {
- registry[varName].noteId = registry[varName].noteId || data.noteId
- registry[varName].paragraphId = registry[varName].paragraphId || data.paragraphId
+ registry[varName].noteId = registry[varName].noteId || data.noteId;
+ registry[varName].paragraphId = registry[varName].paragraphId || data.paragraphId;
}
- registry[varName].skipEmit = true
+ registry[varName].skipEmit = true;
if (!registry[varName].clearWatcher) {
- registry[varName].clearWatcher = scope.$watch(varName, function (newValue, oldValue) {
- console.log('angular object (paragraph) updated %o %o', varName, registry[varName])
+ registry[varName].clearWatcher = scope.$watch(varName, function(newValue, oldValue) {
+ console.log('angular object (paragraph) updated %o %o', varName, registry[varName]);
if (registry[varName].skipEmit) {
- registry[varName].skipEmit = false
- return
+ registry[varName].skipEmit = false;
+ return;
}
websocketMsgSrv.updateAngularObject(
registry[varName].noteId,
registry[varName].paragraphId,
varName,
newValue,
- registry[varName].interpreterGroupId)
- })
+ registry[varName].interpreterGroupId);
+ });
}
- console.log('angular object (paragraph) created %o', varName)
- scope[varName] = data.angularObject.object
+ console.log('angular object (paragraph) created %o', varName);
+ scope[varName] = data.angularObject.object;
// create proxy for AngularFunction
if (varName.indexOf(ANGULAR_FUNCTION_OBJECT_NAME_PREFIX) === 0) {
- let funcName = varName.substring((ANGULAR_FUNCTION_OBJECT_NAME_PREFIX).length)
- scope[funcName] = function () {
+ let funcName = varName.substring((ANGULAR_FUNCTION_OBJECT_NAME_PREFIX).length);
+ scope[funcName] = function() {
// eslint-disable-next-line prefer-rest-params
- scope[varName] = arguments
+ scope[varName] = arguments;
// eslint-disable-next-line prefer-rest-params
- console.log('angular function (paragraph) invoked %o', arguments)
- }
+ console.log('angular function (paragraph) invoked %o', arguments);
+ };
- console.log('angular function (paragraph) created %o', scope[funcName])
+ console.log('angular function (paragraph) created %o', scope[funcName]);
}
}
- })
+ });
- $scope.$on('updateParaInfos', function (event, data) {
+ $scope.$on('updateParaInfos', function(event, data) {
if (data.id === $scope.paragraph.id) {
- $scope.paragraph.runtimeInfos = data.infos
+ $scope.paragraph.runtimeInfos = data.infos;
}
- })
+ });
- $scope.$on('angularObjectRemove', function (event, data) {
- let noteId = $route.current.pathParams.noteId
+ $scope.$on('angularObjectRemove', function(event, data) {
+ let noteId = $route.current.pathParams.noteId;
if (!data.noteId || data.noteId === noteId) {
- let scope
- let registry
+ let scope;
+ let registry;
if (!data.paragraphId || data.paragraphId === $scope.paragraph.id) {
- scope = paragraphScope
- registry = angularObjectRegistry
+ scope = paragraphScope;
+ registry = angularObjectRegistry;
} else {
- return
+ return;
}
- let varName = data.name
+ let varName = data.name;
// clear watcher
if (registry[varName]) {
- registry[varName].clearWatcher()
- registry[varName] = undefined
+ registry[varName].clearWatcher();
+ registry[varName] = undefined;
}
// remove scope variable
- scope[varName] = undefined
+ scope[varName] = undefined;
// remove proxy for AngularFunction
if (varName.indexOf(ANGULAR_FUNCTION_OBJECT_NAME_PREFIX) === 0) {
- let funcName = varName.substring((ANGULAR_FUNCTION_OBJECT_NAME_PREFIX).length)
- scope[funcName] = undefined
+ let funcName = varName.substring((ANGULAR_FUNCTION_OBJECT_NAME_PREFIX).length);
+ scope[funcName] = undefined;
}
}
- })
+ });
/**
* @returns {boolean} true if updated is needed
*/
- function isUpdateRequired (oldPara, newPara) {
+ function isUpdateRequired(oldPara, newPara) {
return (newPara.id === oldPara.id &&
(newPara.dateCreated !== oldPara.dateCreated ||
newPara.text !== oldPara.text ||
@@ -1322,453 +1338,457 @@ function ParagraphCtrl ($scope, $rootScope, $route, $window, $routeParams, $loca
newPara.errorMessage !== oldPara.errorMessage ||
!angular.equals(newPara.settings, oldPara.settings) ||
!angular.equals(newPara.config, oldPara.config) ||
- !angular.equals(newPara.runtimeInfos, oldPara.runtimeInfos)))
+ !angular.equals(newPara.runtimeInfos, oldPara.runtimeInfos)));
}
- $scope.updateAllScopeTexts = function (oldPara, newPara) {
+ $scope.updateAllScopeTexts = function(oldPara, newPara) {
if (oldPara.text !== newPara.text) {
if ($scope.dirtyText) { // check if editor has local update
if ($scope.dirtyText === newPara.text) { // when local update is the same from remote, clear local update
- $scope.paragraph.text = newPara.text
- $scope.dirtyText = undefined
- $scope.originalText = angular.copy(newPara.text)
+ $scope.paragraph.text = newPara.text;
+ $scope.dirtyText = undefined;
+ $scope.originalText = angular.copy(newPara.text);
} else { // if there're local update, keep it.
- $scope.paragraph.text = newPara.text
+ $scope.paragraph.text = newPara.text;
}
} else {
- $scope.paragraph.text = newPara.text
- $scope.originalText = angular.copy(newPara.text)
+ $scope.paragraph.text = newPara.text;
+ $scope.originalText = angular.copy(newPara.text);
}
}
- }
+ };
- $scope.updateParagraphObjectWhenUpdated = function (newPara) {
+ $scope.updateParagraphObjectWhenUpdated = function(newPara) {
// resize col width
if ($scope.paragraph.config.colWidth !== newPara.config.colWidth) {
- $scope.$broadcast('paragraphResized', $scope.paragraph.id)
+ $scope.$broadcast('paragraphResized', $scope.paragraph.id);
}
if ($scope.paragraph.config.fontSize !== newPara.config.fontSize) {
- $rootScope.$broadcast('fontSizeChanged', newPara.config.fontSize)
+ $rootScope.$broadcast('fontSizeChanged', newPara.config.fontSize);
}
/** push the rest */
- $scope.paragraph.aborted = newPara.aborted
- $scope.paragraph.user = newPara.user
- $scope.paragraph.dateUpdated = newPara.dateUpdated
- $scope.paragraph.dateCreated = newPara.dateCreated
- $scope.paragraph.dateFinished = newPara.dateFinished
- $scope.paragraph.dateStarted = newPara.dateStarted
- $scope.paragraph.errorMessage = newPara.errorMessage
- $scope.paragraph.jobName = newPara.jobName
- $scope.paragraph.title = newPara.title
- $scope.paragraph.lineNumbers = newPara.lineNumbers
- $scope.paragraph.status = newPara.status
- $scope.paragraph.fontSize = newPara.fontSize
+ $scope.paragraph.aborted = newPara.aborted;
+ $scope.paragraph.user = newPara.user;
+ $scope.paragraph.dateUpdated = newPara.dateUpdated;
+ $scope.paragraph.dateCreated = newPara.dateCreated;
+ $scope.paragraph.dateFinished = newPara.dateFinished;
+ $scope.paragraph.dateStarted = newPara.dateStarted;
+ $scope.paragraph.errorMessage = newPara.errorMessage;
+ $scope.paragraph.jobName = newPara.jobName;
+ $scope.paragraph.title = newPara.title;
+ $scope.paragraph.lineNumbers = newPara.lineNumbers;
+ $scope.paragraph.status = newPara.status;
+ $scope.paragraph.fontSize = newPara.fontSize;
if (newPara.status !== ParagraphStatus.RUNNING) {
- $scope.paragraph.results = newPara.results
+ $scope.paragraph.results = newPara.results;
}
- $scope.paragraph.settings = newPara.settings
- $scope.paragraph.runtimeInfos = newPara.runtimeInfos
+ $scope.paragraph.settings = newPara.settings;
+ $scope.paragraph.runtimeInfos = newPara.runtimeInfos;
if ($scope.editor) {
- $scope.editor.setReadOnly($scope.isRunning(newPara))
+ $scope.editor.setReadOnly($scope.isRunning(newPara));
}
if (!$scope.asIframe) {
- $scope.paragraph.config = newPara.config
- initializeDefault(newPara.config)
+ $scope.paragraph.config = newPara.config;
+ initializeDefault(newPara.config);
} else {
- newPara.config.editorHide = true
- newPara.config.tableHide = false
- $scope.paragraph.config = newPara.config
+ newPara.config.editorHide = true;
+ newPara.config.tableHide = false;
+ $scope.paragraph.config = newPara.config;
}
- }
+ };
- $scope.updateParagraph = function (oldPara, newPara, updateCallback) {
+ $scope.updateParagraph = function(oldPara, newPara, updateCallback) {
// 1. can't update on revision view
if ($scope.revisionView === true) {
- return
+ return;
}
// 2. get status, refreshed
- const statusChanged = (newPara.status !== oldPara.status)
+ const statusChanged = (newPara.status !== oldPara.status);
const resultRefreshed = (newPara.dateFinished !== oldPara.dateFinished) ||
isEmpty(newPara.results) !== isEmpty(oldPara.results) ||
newPara.status === ParagraphStatus.ERROR ||
- (newPara.status === ParagraphStatus.FINISHED && statusChanged)
+ (newPara.status === ParagraphStatus.FINISHED && statusChanged);
// 3. update texts managed by $scope
- $scope.updateAllScopeTexts(oldPara, newPara)
+ $scope.updateAllScopeTexts(oldPara, newPara);
// 4. execute callback to update result
- updateCallback()
+ updateCallback();
// 5. update remaining paragraph objects
- $scope.updateParagraphObjectWhenUpdated(newPara)
+ $scope.updateParagraphObjectWhenUpdated(newPara);
// 6. handle scroll down by key properly if new paragraph is added
if (statusChanged || resultRefreshed) {
// when last paragraph runs, zeppelin automatically appends new paragraph.
// this broadcast will focus to the newly inserted paragraph
- const paragraphs = angular.element('div[id$="_paragraphColumn_main"]')
+ const paragraphs = angular.element('div[id$="_paragraphColumn_main"]');
if (paragraphs.length >= 2 && paragraphs[paragraphs.length - 2].id.indexOf($scope.paragraph.id) === 0) {
// rendering output can took some time. So delay scrolling event firing for sometime.
- setTimeout(() => { $rootScope.$broadcast('scrollToCursor') }, 500)
+ setTimeout(() => {
+ $rootScope.$broadcast('scrollToCursor');
+ }, 500);
}
}
- }
+ };
/** $scope.$on */
- $scope.$on('runParagraphUsingSpell', function (event, data) {
- const oldPara = $scope.paragraph
- let newPara = data.paragraph
+ $scope.$on('runParagraphUsingSpell', function(event, data) {
+ const oldPara = $scope.paragraph;
+ let newPara = data.paragraph;
const updateCallback = () => {
- $scope.runParagraph(newPara.text, true, true)
- }
+ $scope.runParagraph(newPara.text, true, true);
+ };
if (!isUpdateRequired(oldPara, newPara)) {
- return
+ return;
}
- $scope.updateParagraph(oldPara, newPara, updateCallback)
- })
+ $scope.updateParagraph(oldPara, newPara, updateCallback);
+ });
- $scope.$on('updateParagraph', function (event, data) {
- const oldPara = $scope.paragraph
- const newPara = data.paragraph
+ $scope.$on('updateParagraph', function(event, data) {
+ const oldPara = $scope.paragraph;
+ const newPara = data.paragraph;
if (!isUpdateRequired(oldPara, newPara)) {
- return
+ return;
}
const updateCallback = () => {
// broadcast `updateResult` message to trigger result update
if (newPara.results && newPara.results.msg) {
for (let i in newPara.results.msg) {
- const newResult = newPara.results.msg ? newPara.results.msg[i] : {}
- const oldResult = (oldPara.results && oldPara.results.msg)
- ? oldPara.results.msg[i] : {}
- const newConfig = newPara.config.results ? newPara.config.results[i] : {}
- const oldConfig = oldPara.config.results ? oldPara.config.results[i] : {}
- if (!angular.equals(newResult, oldResult) ||
- !angular.equals(newConfig, oldConfig)) {
- $rootScope.$broadcast('updateResult', newResult, newConfig, newPara, parseInt(i))
+ if (newPara.results.msg.hasOwnProperty(i)) {
+ const newResult = newPara.results.msg ? newPara.results.msg[i] : {};
+ const oldResult = (oldPara.results && oldPara.results.msg)
+ ? oldPara.results.msg[i] : {};
+ const newConfig = newPara.config.results ? newPara.config.results[i] : {};
+ const oldConfig = oldPara.config.results ? oldPara.config.results[i] : {};
+ if (!angular.equals(newResult, oldResult) ||
+ !angular.equals(newConfig, oldConfig)) {
+ $rootScope.$broadcast('updateResult', newResult, newConfig, newPara, parseInt(i));
+ }
}
}
}
- }
+ };
- $scope.updateParagraph(oldPara, newPara, updateCallback)
- })
+ $scope.updateParagraph(oldPara, newPara, updateCallback);
+ });
- $scope.$on('updateProgress', function (event, data) {
+ $scope.$on('updateProgress', function(event, data) {
if (data.id === $scope.paragraph.id) {
- $scope.currentProgress = data.progress
+ $scope.currentProgress = data.progress;
}
- })
+ });
- $scope.$on('appendParagraphOutput', function (event, data) {
+ $scope.$on('appendParagraphOutput', function(event, data) {
if (data.paragraphId === $scope.paragraph.id) {
if (!$scope.paragraph.results) {
- $scope.paragraph.results = {}
+ $scope.paragraph.results = {};
if (!$scope.paragraph.results.msg) {
- $scope.paragraph.results.msg = []
+ $scope.paragraph.results.msg = [];
}
$scope.paragraph.results.msg[data.index] = {
data: data.data,
- type: data.type
- }
+ type: data.type,
+ };
$rootScope.$broadcast(
'updateResult',
$scope.paragraph.results.msg[data.index],
$scope.paragraph.config.results[data.index],
$scope.paragraph,
- data.index)
+ data.index);
}
}
- })
+ });
- $scope.$on('keyEvent', function (event, keyEvent) {
+ $scope.$on('keyEvent', function(event, keyEvent) {
if ($scope.paragraphFocused) {
- let paragraphId = $scope.paragraph.id
- let keyCode = keyEvent.keyCode
- let noShortcutDefined = false
- let editorHide = $scope.paragraph.config.editorHide
+ let paragraphId = $scope.paragraph.id;
+ let keyCode = keyEvent.keyCode;
+ let noShortcutDefined = false;
+ let editorHide = $scope.paragraph.config.editorHide;
if (editorHide && (keyCode === 38 || (keyCode === 80 && keyEvent.ctrlKey && !keyEvent.altKey))) { // up
// move focus to previous paragraph
- $scope.$emit('moveFocusToPreviousParagraph', paragraphId)
+ $scope.$emit('moveFocusToPreviousParagraph', paragraphId);
} else if (editorHide && (keyCode === 40 || (keyCode === 78 && keyEvent.ctrlKey && !keyEvent.altKey))) { // down
// move focus to next paragraph
// $timeout stops chaining effect of focus propogation
- $timeout(() => $scope.$emit('moveFocusToNextParagraph', paragraphId))
+ $timeout(() => $scope.$emit('moveFocusToNextParagraph', paragraphId));
} else if (!keyEvent.ctrlKey && keyEvent.shiftKey && keyCode === 13) { // Shift + Enter
- $scope.runParagraphFromShortcut($scope.getEditorValue())
+ $scope.runParagraphFromShortcut($scope.getEditorValue());
} else if (keyEvent.ctrlKey && keyEvent.shiftKey && keyCode === 13) { // Ctrl + Shift + Enter
- $scope.runAllToOrFromThis($scope.paragraph)
+ $scope.runAllToOrFromThis($scope.paragraph);
} else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 67) { // Ctrl + Alt + c
- $scope.cancelParagraph($scope.paragraph)
+ $scope.cancelParagraph($scope.paragraph);
} else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 68) { // Ctrl + Alt + d
- $scope.removeParagraph($scope.paragraph)
+ $scope.removeParagraph($scope.paragraph);
} else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 75) { // Ctrl + Alt + k
- $scope.moveUp($scope.paragraph)
+ $scope.moveUp($scope.paragraph);
} else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 74) { // Ctrl + Alt + j
- $scope.moveDown($scope.paragraph)
+ $scope.moveDown($scope.paragraph);
} else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 65) { // Ctrl + Alt + a
- $scope.insertNew('above')
+ $scope.insertNew('above');
} else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 66) { // Ctrl + Alt + b
- $scope.insertNew('below')
+ $scope.insertNew('below');
} else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 79) { // Ctrl + Alt + o
- $scope.toggleOutput($scope.paragraph)
+ $scope.toggleOutput($scope.paragraph);
} else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 82) { // Ctrl + Alt + r
- $scope.toggleEnableDisable($scope.paragraph)
+ $scope.toggleEnableDisable($scope.paragraph);
} else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 69) { // Ctrl + Alt + e
- $scope.toggleEditor($scope.paragraph)
+ $scope.toggleEditor($scope.paragraph);
} else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 77) { // Ctrl + Alt + m
if ($scope.paragraph.config.lineNumbers) {
- $scope.hideLineNumbers($scope.paragraph)
+ $scope.hideLineNumbers($scope.paragraph);
} else {
- $scope.showLineNumbers($scope.paragraph)
+ $scope.showLineNumbers($scope.paragraph);
}
} else if (keyEvent.ctrlKey && keyEvent.shiftKey && keyCode === 189) { // Ctrl + Shift + -
- $scope.changeColWidth($scope.paragraph, Math.max(1, $scope.paragraph.config.colWidth - 1))
+ $scope.changeColWidth($scope.paragraph, Math.max(1, $scope.paragraph.config.colWidth - 1));
} else if (keyEvent.ctrlKey && keyEvent.shiftKey && keyCode === 187) { // Ctrl + Shift + =
- $scope.changeColWidth($scope.paragraph, Math.min(12, $scope.paragraph.config.colWidth + 1))
+ $scope.changeColWidth($scope.paragraph, Math.min(12, $scope.paragraph.config.colWidth + 1));
} else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 84) { // Ctrl + Alt + t
if ($scope.paragraph.config.title) {
- $scope.hideTitle($scope.paragraph)
+ $scope.hideTitle($scope.paragraph);
} else {
- $scope.showTitle($scope.paragraph)
+ $scope.showTitle($scope.paragraph);
}
} else if (keyEvent.ctrlKey && keyEvent.shiftKey && keyCode === 67) { // Ctrl + Alt + c
- $scope.copyPara('below')
+ $scope.copyPara('below');
} else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 76) { // Ctrl + Alt + l
- $scope.clearParagraphOutput($scope.paragraph)
+ $scope.clearParagraphOutput($scope.paragraph);
} else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 87) { // Ctrl + Alt + w
- $scope.goToSingleParagraph()
+ $scope.goToSingleParagraph();
} else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 70) { // Ctrl + f
- $scope.$emit('toggleSearchBox')
+ $scope.$emit('toggleSearchBox');
} else {
- noShortcutDefined = true
+ noShortcutDefined = true;
}
if (!noShortcutDefined) {
- keyEvent.preventDefault()
+ keyEvent.preventDefault();
}
}
- })
+ });
- $scope.$on('focusParagraph', function (event, paragraphId, cursorPosRow, cursorPosCol, mouseEvent) {
+ $scope.$on('focusParagraph', function(event, paragraphId, cursorPosRow, cursorPosCol, mouseEvent) {
if (cursorPosCol === null || cursorPosCol === undefined) {
- cursorPosCol = 0
+ cursorPosCol = 0;
}
if ($scope.paragraph.id === paragraphId) {
// focus editor
if (!$scope.paragraph.config.editorHide) {
if (!mouseEvent) {
- $scope.editor.focus()
+ $scope.editor.focus();
// move cursor to the first row (or the last row)
- let row
+ let row;
if (cursorPosRow >= 0) {
- row = cursorPosRow
- $scope.editor.gotoLine(row, cursorPosCol)
+ row = cursorPosRow;
+ $scope.editor.gotoLine(row, cursorPosCol);
} else {
-
<TRUNCATED>
[02/12] zeppelin git commit: [ZEPPELIN-3245] checkstyle/eslintrc for
zeppelin-web (JavaScript)
Posted by pr...@apache.org.
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/navbar/navbar.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/navbar/navbar.controller.js b/zeppelin-web/src/components/navbar/navbar.controller.js
index 139328e..9fb5db2 100644
--- a/zeppelin-web/src/components/navbar/navbar.controller.js
+++ b/zeppelin-web/src/components/navbar/navbar.controller.js
@@ -12,237 +12,237 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').controller('NavCtrl', NavCtrl)
+angular.module('zeppelinWebApp').controller('NavCtrl', NavCtrl);
-function NavCtrl ($scope, $rootScope, $http, $routeParams, $location,
+function NavCtrl($scope, $rootScope, $http, $routeParams, $location,
noteListFactory, baseUrlSrv, websocketMsgSrv,
arrayOrderingSrv, searchService, TRASH_FOLDER_ID) {
- 'ngInject'
-
- let vm = this
- vm.arrayOrderingSrv = arrayOrderingSrv
- vm.connected = websocketMsgSrv.isConnected()
- vm.isActive = isActive
- vm.logout = logout
- vm.notes = noteListFactory
- vm.search = search
- vm.searchForm = searchService
- vm.showLoginWindow = showLoginWindow
- vm.TRASH_FOLDER_ID = TRASH_FOLDER_ID
- vm.isFilterNote = isFilterNote
- vm.numberOfNotesDisplayed = 10
-
- $scope.query = {q: ''}
-
- initController()
-
- function getZeppelinVersion () {
+ 'ngInject';
+
+ let vm = this;
+ vm.arrayOrderingSrv = arrayOrderingSrv;
+ vm.connected = websocketMsgSrv.isConnected();
+ vm.isActive = isActive;
+ vm.logout = logout;
+ vm.notes = noteListFactory;
+ vm.search = search;
+ vm.searchForm = searchService;
+ vm.showLoginWindow = showLoginWindow;
+ vm.TRASH_FOLDER_ID = TRASH_FOLDER_ID;
+ vm.isFilterNote = isFilterNote;
+ vm.numberOfNotesDisplayed = 10;
+
+ $scope.query = {q: ''};
+
+ initController();
+
+ function getZeppelinVersion() {
$http.get(baseUrlSrv.getRestApiBase() + '/version').success(
- function (data, status, headers, config) {
- $rootScope.zeppelinVersion = data.body.version
+ function(data, status, headers, config) {
+ $rootScope.zeppelinVersion = data.body.version;
}).error(
- function (data, status, headers, config) {
- console.log('Error %o %o', status, data.message)
- })
+ function(data, status, headers, config) {
+ console.log('Error %o %o', status, data.message);
+ });
}
- function initController () {
- $scope.isDrawNavbarNoteList = false
- angular.element('#notebook-list').perfectScrollbar({suppressScrollX: true})
+ function initController() {
+ $scope.isDrawNavbarNoteList = false;
+ angular.element('#notebook-list').perfectScrollbar({suppressScrollX: true});
- angular.element(document).click(function () {
- $scope.query.q = ''
- })
+ angular.element(document).click(function() {
+ $scope.query.q = '';
+ });
- getZeppelinVersion()
- loadNotes()
+ getZeppelinVersion();
+ loadNotes();
}
- function isFilterNote (note) {
+ function isFilterNote(note) {
if (!$scope.query.q) {
- return true
+ return true;
}
- let noteName = note.name
+ let noteName = note.name;
if (noteName.toLowerCase().indexOf($scope.query.q.toLowerCase()) > -1) {
- return true
+ return true;
}
- return false
+ return false;
}
- function isActive (noteId) {
- return ($routeParams.noteId === noteId)
+ function isActive(noteId) {
+ return ($routeParams.noteId === noteId);
}
- function listConfigurations () {
- websocketMsgSrv.listConfigurations()
+ function listConfigurations() {
+ websocketMsgSrv.listConfigurations();
}
- function loadNotes () {
- websocketMsgSrv.getNoteList()
+ function loadNotes() {
+ websocketMsgSrv.getNoteList();
}
- function getHomeNote () {
- websocketMsgSrv.getHomeNote()
+ function getHomeNote() {
+ websocketMsgSrv.getHomeNote();
}
function logout() {
- let logoutURL = baseUrlSrv.getRestApiBase() + '/login/logout'
+ let logoutURL = baseUrlSrv.getRestApiBase() + '/login/logout';
- $http.post(logoutURL).then(function () {}, function (response) {
+ $http.post(logoutURL).then(function() {}, function(response) {
if (response.data) {
- let res = angular.fromJson(response.data).body
+ let res = angular.fromJson(response.data).body;
if (res['redirectURL']) {
if (res['isLogoutAPI'] === 'true') {
- $http.get(res['redirectURL']).then(function () {
- }, function () {
- window.location = baseUrlSrv.getBase()
- })
+ $http.get(res['redirectURL']).then(function() {
+ }, function() {
+ window.location = baseUrlSrv.getBase();
+ });
} else {
- window.location.href = res['redirectURL'] + window.location.href
+ window.location.href = res['redirectURL'] + window.location.href;
}
- return undefined
+ return undefined;
}
}
// force authcBasic (if configured) to logout
if (detectIE()) {
- let outcome
+ let outcome;
try {
- outcome = document.execCommand('ClearAuthenticationCache')
+ outcome = document.execCommand('ClearAuthenticationCache');
} catch (e) {
- console.log(e)
+ console.log(e);
}
if (!outcome) {
// Let's create an xmlhttp object
- outcome = (function (x) {
+ outcome = (function(x) {
if (x) {
// the reason we use "random" value for password is
// that browsers cache requests. changing
// password effectively behaves like cache-busing.
x.open('HEAD', location.href, true, 'logout',
- (new Date()).getTime().toString())
- x.send('')
+ (new Date()).getTime().toString());
+ x.send('');
// x.abort()
- return 1 // this is **speculative** "We are done."
+ return 1; // this is **speculative** "We are done."
} else {
// eslint-disable-next-line no-useless-return
- return
+ return;
}
})(window.XMLHttpRequest ? new window.XMLHttpRequest()
// eslint-disable-next-line no-undef
- : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : u))
+ : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : u));
}
if (!outcome) {
let m = 'Your browser is too old or too weird to support log out functionality. Close all windows and ' +
- 'restart the browser.'
- alert(m)
+ 'restart the browser.';
+ alert(m);
}
} else {
// for firefox and safari
- logoutURL = logoutURL.replace('//', '//false:false@')
+ logoutURL = logoutURL.replace('//', '//false:false@');
}
- $http.post(logoutURL).error(function () {
- $rootScope.userName = ''
- $rootScope.ticket.principal = ''
- $rootScope.ticket.screenUsername = ''
- $rootScope.ticket.ticket = ''
- $rootScope.ticket.roles = ''
+ $http.post(logoutURL).error(function() {
+ $rootScope.userName = '';
+ $rootScope.ticket.principal = '';
+ $rootScope.ticket.screenUsername = '';
+ $rootScope.ticket.ticket = '';
+ $rootScope.ticket.roles = '';
BootstrapDialog.show({
- message: 'Logout Success'
- })
- setTimeout(function () {
- window.location = baseUrlSrv.getBase()
- }, 1000)
- })
- })
+ message: 'Logout Success',
+ });
+ setTimeout(function() {
+ window.location = baseUrlSrv.getBase();
+ }, 1000);
+ });
+ });
}
function detectIE() {
- let ua = window.navigator.userAgent
+ let ua = window.navigator.userAgent;
- let msie = ua.indexOf('MSIE ')
+ let msie = ua.indexOf('MSIE ');
if (msie > 0) {
// IE 10 or older => return version number
- return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10)
+ return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
}
- let trident = ua.indexOf('Trident/')
+ let trident = ua.indexOf('Trident/');
if (trident > 0) {
// IE 11 => return version number
- let rv = ua.indexOf('rv:')
- return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10)
+ let rv = ua.indexOf('rv:');
+ return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
}
- let edge = ua.indexOf('Edge/')
+ let edge = ua.indexOf('Edge/');
if (edge > 0) {
// Edge (IE 12+) => return version number
- return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10)
+ return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
}
// other browser
- return false
+ return false;
}
- function search (searchTerm) {
- $location.path('/search/' + searchTerm)
+ function search(searchTerm) {
+ $location.path('/search/' + searchTerm);
}
- function showLoginWindow () {
- setTimeout(function () {
- angular.element('#userName').focus()
- }, 500)
+ function showLoginWindow() {
+ setTimeout(function() {
+ angular.element('#userName').focus();
+ }, 500);
}
/*
** $scope.$on functions below
*/
- $scope.$on('setNoteMenu', function (event, notes) {
- noteListFactory.setNotes(notes)
- initNotebookListEventListener()
- })
+ $scope.$on('setNoteMenu', function(event, notes) {
+ noteListFactory.setNotes(notes);
+ initNotebookListEventListener();
+ });
- $scope.$on('setConnectedStatus', function (event, param) {
- vm.connected = param
- })
+ $scope.$on('setConnectedStatus', function(event, param) {
+ vm.connected = param;
+ });
- $scope.$on('loginSuccess', function (event, param) {
- $rootScope.ticket.screenUsername = $rootScope.ticket.principal
- listConfigurations()
- loadNotes()
- getHomeNote()
- })
+ $scope.$on('loginSuccess', function(event, param) {
+ $rootScope.ticket.screenUsername = $rootScope.ticket.principal;
+ listConfigurations();
+ loadNotes();
+ getHomeNote();
+ });
/*
** Performance optimization for Browser Render.
*/
- function initNotebookListEventListener () {
- angular.element(document).ready(function () {
- angular.element('.notebook-list-dropdown').on('show.bs.dropdown', function () {
- $scope.isDrawNavbarNoteList = true
- })
-
- angular.element('.notebook-list-dropdown').on('hide.bs.dropdown', function () {
- $scope.isDrawNavbarNoteList = false
- })
- })
+ function initNotebookListEventListener() {
+ angular.element(document).ready(function() {
+ angular.element('.notebook-list-dropdown').on('show.bs.dropdown', function() {
+ $scope.isDrawNavbarNoteList = true;
+ });
+
+ angular.element('.notebook-list-dropdown').on('hide.bs.dropdown', function() {
+ $scope.isDrawNavbarNoteList = false;
+ });
+ });
}
- $scope.loadMoreNotes = function () {
- vm.numberOfNotesDisplayed += 10
- }
+ $scope.loadMoreNotes = function() {
+ vm.numberOfNotesDisplayed += 10;
+ };
- $scope.calculateTooltipPlacement = function (note) {
+ $scope.calculateTooltipPlacement = function(note) {
if (note !== undefined && note.name !== undefined) {
- let length = note.name.length
+ let length = note.name.length;
if (length < 2) {
- return 'top-left'
+ return 'top-left';
} else if (length > 7) {
- return 'top-right'
+ return 'top-right';
}
}
- return 'top'
- }
+ return 'top';
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/navbar/navbar.controller.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/navbar/navbar.controller.test.js b/zeppelin-web/src/components/navbar/navbar.controller.test.js
index bf29b84..f4bb3bf 100644
--- a/zeppelin-web/src/components/navbar/navbar.controller.test.js
+++ b/zeppelin-web/src/components/navbar/navbar.controller.test.js
@@ -1,18 +1,18 @@
-describe('Controller: NavCtrl', function () {
+describe('Controller: NavCtrl', function() {
// load the controller's module
- beforeEach(angular.mock.module('zeppelinWebApp'))
- let NavCtrl
- let scope
+ beforeEach(angular.mock.module('zeppelinWebApp'));
+ let NavCtrl;
+ let scope;
// Initialize the controller and a mock scope
- beforeEach(inject(function ($controller, $rootScope) {
- scope = $rootScope.$new()
+ beforeEach(inject(function($controller, $rootScope) {
+ scope = $rootScope.$new();
NavCtrl = $controller('NavCtrl', {
- $scope: scope
- })
+ $scope: scope,
+ });
- it('NavCtrl to toBeDefined', function () {
- expect(NavCtrl).toBeDefined()
- expect(NavCtrl.loadNotes).toBeDefined()
- })
- }))
-})
+ it('NavCtrl to toBeDefined', function() {
+ expect(NavCtrl).toBeDefined();
+ expect(NavCtrl.loadNotes).toBeDefined();
+ });
+ }));
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/ng-enter/ng-enter.directive.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/ng-enter/ng-enter.directive.js b/zeppelin-web/src/components/ng-enter/ng-enter.directive.js
index 98bc067..a4d9219 100644
--- a/zeppelin-web/src/components/ng-enter/ng-enter.directive.js
+++ b/zeppelin-web/src/components/ng-enter/ng-enter.directive.js
@@ -12,19 +12,19 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').directive('ngEnter', NgEnterDirective)
+angular.module('zeppelinWebApp').directive('ngEnter', NgEnterDirective);
function NgEnterDirective() {
- return function (scope, element, attrs) {
- element.bind('keydown keypress', function (event) {
+ return function(scope, element, attrs) {
+ element.bind('keydown keypress', function(event) {
if (event.which === 13) {
if (!event.shiftKey) {
- scope.$apply(function () {
- scope.$eval(attrs.ngEnter)
- })
+ scope.$apply(function() {
+ scope.$eval(attrs.ngEnter);
+ });
}
- event.preventDefault()
+ event.preventDefault();
}
- })
- }
+ });
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/ng-enter/ng-enter.directive.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/ng-enter/ng-enter.directive.test.js b/zeppelin-web/src/components/ng-enter/ng-enter.directive.test.js
index 49f97cc..6285b59 100644
--- a/zeppelin-web/src/components/ng-enter/ng-enter.directive.test.js
+++ b/zeppelin-web/src/components/ng-enter/ng-enter.directive.test.js
@@ -1,19 +1,19 @@
-describe('Directive: ngEnter', function () {
+describe('Directive: ngEnter', function() {
// load the directive's module
- beforeEach(angular.mock.module('zeppelinWebApp'))
+ beforeEach(angular.mock.module('zeppelinWebApp'));
- let element
- let scope
+ let element;
+ let scope;
- beforeEach(inject(function ($rootScope) {
- scope = $rootScope.$new()
- }))
+ beforeEach(inject(function($rootScope) {
+ scope = $rootScope.$new();
+ }));
- it('should be define', inject(function ($compile) {
- element = angular.element('<ng-enter></ng-enter>')
- element = $compile(element)(scope)
- expect(element.text()).toBeDefined()
- }))
+ it('should be define', inject(function($compile) {
+ element = angular.element('<ng-enter></ng-enter>');
+ element = $compile(element)(scope);
+ expect(element.text()).toBeDefined();
+ }));
// Test the rest of function in ngEnter
/* it('should make hidden element visible', inject(function ($compile) {
@@ -21,4 +21,4 @@ describe('Directive: ngEnter', function () {
element = $compile(element)(scope);
expect(element.text()).toBe('this is the ngEnter directive');
})); */
-})
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/ng-escape/ng-escape.directive.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/ng-escape/ng-escape.directive.js b/zeppelin-web/src/components/ng-escape/ng-escape.directive.js
index a3d35ea..bdb7636 100644
--- a/zeppelin-web/src/components/ng-escape/ng-escape.directive.js
+++ b/zeppelin-web/src/components/ng-escape/ng-escape.directive.js
@@ -12,17 +12,17 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').directive('ngEscape', NgEscapeDirective)
+angular.module('zeppelinWebApp').directive('ngEscape', NgEscapeDirective);
function NgEscapeDirective() {
- return function (scope, element, attrs) {
- element.bind('keydown keyup', function (event) {
+ return function(scope, element, attrs) {
+ element.bind('keydown keyup', function(event) {
if (event.which === 27) {
- scope.$apply(function () {
- scope.$eval(attrs.ngEscape)
- })
- event.preventDefault()
+ scope.$apply(function() {
+ scope.$eval(attrs.ngEscape);
+ });
+ event.preventDefault();
}
- })
- }
+ });
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/note-action/note-action.service.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/note-action/note-action.service.js b/zeppelin-web/src/components/note-action/note-action.service.js
index 8e00c0f..d4bf6f0 100644
--- a/zeppelin-web/src/components/note-action/note-action.service.js
+++ b/zeppelin-web/src/components/note-action/note-action.service.js
@@ -12,172 +12,172 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').service('noteActionService', noteActionService)
+angular.module('zeppelinWebApp').service('noteActionService', noteActionService);
function noteActionService(websocketMsgSrv, $location, noteRenameService, noteListFactory) {
- 'ngInject'
+ 'ngInject';
- this.moveNoteToTrash = function (noteId, redirectToHome) {
+ this.moveNoteToTrash = function(noteId, redirectToHome) {
BootstrapDialog.confirm({
closable: true,
title: 'Move this note to trash?',
message: 'This note will be moved to <strong>trash</strong>.',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- websocketMsgSrv.moveNoteToTrash(noteId)
+ websocketMsgSrv.moveNoteToTrash(noteId);
if (redirectToHome) {
- $location.path('/')
+ $location.path('/');
}
}
- }
- })
- }
+ },
+ });
+ };
- this.moveFolderToTrash = function (folderId) {
+ this.moveFolderToTrash = function(folderId) {
BootstrapDialog.confirm({
closable: true,
title: 'Move this folder to trash?',
message: 'This folder will be moved to <strong>trash</strong>.',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- websocketMsgSrv.moveFolderToTrash(folderId)
+ websocketMsgSrv.moveFolderToTrash(folderId);
}
- }
- })
- }
+ },
+ });
+ };
- this.removeNote = function (noteId, redirectToHome) {
+ this.removeNote = function(noteId, redirectToHome) {
BootstrapDialog.confirm({
type: BootstrapDialog.TYPE_WARNING,
closable: true,
title: 'WARNING! This note will be removed permanently',
message: 'This cannot be undone. Are you sure?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- websocketMsgSrv.deleteNote(noteId)
+ websocketMsgSrv.deleteNote(noteId);
if (redirectToHome) {
- $location.path('/')
+ $location.path('/');
}
}
- }
- })
- }
+ },
+ });
+ };
- this.removeFolder = function (folderId) {
+ this.removeFolder = function(folderId) {
BootstrapDialog.confirm({
type: BootstrapDialog.TYPE_WARNING,
closable: true,
title: 'WARNING! This folder will be removed permanently',
message: 'This cannot be undone. Are you sure?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- websocketMsgSrv.removeFolder(folderId)
+ websocketMsgSrv.removeFolder(folderId);
}
- }
- })
- }
+ },
+ });
+ };
- this.restoreAll = function () {
+ this.restoreAll = function() {
BootstrapDialog.confirm({
closable: true,
title: 'Are you sure want to restore all notes in the trash?',
message: 'Folders and notes in the trash will be ' +
'<strong>merged</strong> into their original position.',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- websocketMsgSrv.restoreAll()
+ websocketMsgSrv.restoreAll();
}
- }
- })
- }
+ },
+ });
+ };
- this.emptyTrash = function () {
+ this.emptyTrash = function() {
BootstrapDialog.confirm({
type: BootstrapDialog.TYPE_WARNING,
closable: true,
title: 'WARNING! Notes under trash will be removed permanently',
message: 'This cannot be undone. Are you sure?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- websocketMsgSrv.emptyTrash()
+ websocketMsgSrv.emptyTrash();
}
- }
- })
- }
+ },
+ });
+ };
- this.clearAllParagraphOutput = function (noteId) {
+ this.clearAllParagraphOutput = function(noteId) {
BootstrapDialog.confirm({
closable: true,
title: '',
message: 'Do you want to clear all output?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- websocketMsgSrv.clearAllParagraphOutput(noteId)
+ websocketMsgSrv.clearAllParagraphOutput(noteId);
}
- }
- })
- }
+ },
+ });
+ };
- this.renameNote = function (noteId, notePath) {
+ this.renameNote = function(noteId, notePath) {
noteRenameService.openRenameModal({
title: 'Rename note',
oldName: notePath,
- callback: function (newName) {
- websocketMsgSrv.renameNote(noteId, newName)
- }
- })
- }
+ callback: function(newName) {
+ websocketMsgSrv.renameNote(noteId, newName);
+ },
+ });
+ };
- this.renameFolder = function (folderId) {
+ this.renameFolder = function(folderId) {
noteRenameService.openRenameModal({
title: 'Rename folder',
oldName: folderId,
- callback: function (newName) {
- let newFolderId = normalizeFolderId(newName)
+ callback: function(newName) {
+ let newFolderId = normalizeFolderId(newName);
if (_.has(noteListFactory.flatFolderMap, newFolderId)) {
BootstrapDialog.confirm({
type: BootstrapDialog.TYPE_WARNING,
closable: true,
title: 'WARNING! The folder will be MERGED',
message: 'The folder will be merged into <strong>' + newFolderId + '</strong>. Are you sure?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- websocketMsgSrv.renameFolder(folderId, newFolderId)
+ websocketMsgSrv.renameFolder(folderId, newFolderId);
}
- }
- })
+ },
+ });
} else {
- websocketMsgSrv.renameFolder(folderId, newFolderId)
+ websocketMsgSrv.renameFolder(folderId, newFolderId);
}
- }
- })
- }
+ },
+ });
+ };
- function normalizeFolderId (folderId) {
- folderId = folderId.trim()
+ function normalizeFolderId(folderId) {
+ folderId = folderId.trim();
while (folderId.indexOf('\\') > -1) {
- folderId = folderId.replace('\\', '/')
+ folderId = folderId.replace('\\', '/');
}
while (folderId.indexOf('///') > -1) {
- folderId = folderId.replace('///', '/')
+ folderId = folderId.replace('///', '/');
}
- folderId = folderId.replace('//', '/')
+ folderId = folderId.replace('//', '/');
if (folderId === '/') {
- return '/'
+ return '/';
}
if (folderId[0] === '/') {
- folderId = folderId.substring(1)
+ folderId = folderId.substring(1);
}
if (folderId.slice(-1) === '/') {
- folderId = folderId.slice(0, -1)
+ folderId = folderId.slice(0, -1);
}
- return folderId
+ return folderId;
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/note-create/note-create.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/note-create/note-create.controller.js b/zeppelin-web/src/components/note-create/note-create.controller.js
index c999c20..a2eb5a6 100644
--- a/zeppelin-web/src/components/note-create/note-create.controller.js
+++ b/zeppelin-web/src/components/note-create/note-create.controller.js
@@ -12,95 +12,95 @@
* limitations under the License.
*/
-import './note-create.css'
+import './note-create.css';
-angular.module('zeppelinWebApp').controller('NoteCreateCtrl', NoteCreateCtrl)
+angular.module('zeppelinWebApp').controller('NoteCreateCtrl', NoteCreateCtrl);
-function NoteCreateCtrl ($scope, noteListFactory, $routeParams, websocketMsgSrv) {
- 'ngInject'
+function NoteCreateCtrl($scope, noteListFactory, $routeParams, websocketMsgSrv) {
+ 'ngInject';
- let vm = this
- vm.clone = false
- vm.notes = noteListFactory
- vm.websocketMsgSrv = websocketMsgSrv
- $scope.note = {}
- $scope.interpreterSettings = {}
- $scope.note.defaultInterpreter = null
+ let vm = this;
+ vm.clone = false;
+ vm.notes = noteListFactory;
+ vm.websocketMsgSrv = websocketMsgSrv;
+ $scope.note = {};
+ $scope.interpreterSettings = {};
+ $scope.note.defaultInterpreter = null;
- vm.createNote = function () {
+ vm.createNote = function() {
if (!vm.clone) {
- let defaultInterpreterId = ''
+ let defaultInterpreterId = '';
if ($scope.note.defaultInterpreter !== null) {
- defaultInterpreterId = $scope.note.defaultInterpreter.id
+ defaultInterpreterId = $scope.note.defaultInterpreter.id;
}
- vm.websocketMsgSrv.createNotebook($scope.note.notename, defaultInterpreterId)
- $scope.note.defaultInterpreter = $scope.interpreterSettings[0]
+ vm.websocketMsgSrv.createNotebook($scope.note.notename, defaultInterpreterId);
+ $scope.note.defaultInterpreter = $scope.interpreterSettings[0];
} else {
- let noteId = $routeParams.noteId
- vm.websocketMsgSrv.cloneNote(noteId, $scope.note.notename)
+ let noteId = $routeParams.noteId;
+ vm.websocketMsgSrv.cloneNote(noteId, $scope.note.notename);
}
- }
+ };
- vm.handleNameEnter = function () {
- angular.element('#noteCreateModal').modal('toggle')
- vm.createNote()
- }
+ vm.handleNameEnter = function() {
+ angular.element('#noteCreateModal').modal('toggle');
+ vm.createNote();
+ };
vm.preVisible = function(clone, sourceNoteName, path) {
- vm.clone = clone
- vm.sourceNoteName = sourceNoteName
- $scope.note.notename = vm.clone ? vm.cloneNoteName() : vm.newNoteName(path)
- $scope.$apply()
- }
+ vm.clone = clone;
+ vm.sourceNoteName = sourceNoteName;
+ $scope.note.notename = vm.clone ? vm.cloneNoteName() : vm.newNoteName(path);
+ $scope.$apply();
+ };
vm.newNoteName = function(path) {
- let newCount = 1
- angular.forEach(vm.notes.flatList, function (noteName) {
- noteName = noteName.name
+ let newCount = 1;
+ angular.forEach(vm.notes.flatList, function(noteName) {
+ noteName = noteName.name;
if (noteName.match(/^Untitled Note [0-9]*$/)) {
- let lastCount = noteName.substr(14) * 1
+ let lastCount = noteName.substr(14) * 1;
if (newCount <= lastCount) {
- newCount = lastCount + 1
+ newCount = lastCount + 1;
}
}
- })
- return (path ? path + '/' : '') + 'Untitled Note ' + newCount
- }
+ });
+ return (path ? path + '/' : '') + 'Untitled Note ' + newCount;
+ };
- vm.cloneNoteName = function () {
- let copyCount = 1
- let newCloneName = ''
- let lastIndex = vm.sourceNoteName.lastIndexOf(' ')
- let endsWithNumber = !!vm.sourceNoteName.match('^.+?\\s\\d$')
- let noteNamePrefix = endsWithNumber ? vm.sourceNoteName.substr(0, lastIndex) : vm.sourceNoteName
- let regexp = new RegExp('^' + noteNamePrefix + ' .+')
+ vm.cloneNoteName = function() {
+ let copyCount = 1;
+ let newCloneName = '';
+ let lastIndex = vm.sourceNoteName.lastIndexOf(' ');
+ let endsWithNumber = !!vm.sourceNoteName.match('^.+?\\s\\d$');
+ let noteNamePrefix = endsWithNumber ? vm.sourceNoteName.substr(0, lastIndex) : vm.sourceNoteName;
+ let regexp = new RegExp('^' + noteNamePrefix + ' .+');
- angular.forEach(vm.notes.flatList, function (noteName) {
- noteName = noteName.name
+ angular.forEach(vm.notes.flatList, function(noteName) {
+ noteName = noteName.name;
if (noteName.match(regexp)) {
- let lastCopyCount = noteName.substr(lastIndex).trim()
- newCloneName = noteNamePrefix
- lastCopyCount = parseInt(lastCopyCount)
+ let lastCopyCount = noteName.substr(lastIndex).trim();
+ newCloneName = noteNamePrefix;
+ lastCopyCount = parseInt(lastCopyCount);
if (copyCount <= lastCopyCount) {
- copyCount = lastCopyCount + 1
+ copyCount = lastCopyCount + 1;
}
}
- })
+ });
if (!newCloneName) {
- newCloneName = vm.sourceNoteName
+ newCloneName = vm.sourceNoteName;
}
- return newCloneName + ' ' + copyCount
- }
+ return newCloneName + ' ' + copyCount;
+ };
- vm.getInterpreterSettings = function () {
- vm.websocketMsgSrv.getInterpreterSettings()
- }
+ vm.getInterpreterSettings = function() {
+ vm.websocketMsgSrv.getInterpreterSettings();
+ };
- $scope.$on('interpreterSettings', function (event, data) {
- $scope.interpreterSettings = data.interpreterSettings
+ $scope.$on('interpreterSettings', function(event, data) {
+ $scope.interpreterSettings = data.interpreterSettings;
// initialize default interpreter with Spark interpreter
- $scope.note.defaultInterpreter = data.interpreterSettings[0]
- })
+ $scope.note.defaultInterpreter = data.interpreterSettings[0];
+ });
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/note-create/note-create.controller.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/note-create/note-create.controller.test.js b/zeppelin-web/src/components/note-create/note-create.controller.test.js
index d409a14..59f01d2 100644
--- a/zeppelin-web/src/components/note-create/note-create.controller.test.js
+++ b/zeppelin-web/src/components/note-create/note-create.controller.test.js
@@ -1,39 +1,39 @@
-describe('Controller: NoteCreateCtrl', function () {
- beforeEach(angular.mock.module('zeppelinWebApp'))
+describe('Controller: NoteCreateCtrl', function() {
+ beforeEach(angular.mock.module('zeppelinWebApp'));
- let scope
- let ctrl
- let noteList
+ let scope;
+ let ctrl;
+ let noteList;
- beforeEach(inject(function ($injector, $rootScope, $controller) {
- noteList = $injector.get('noteListFactory')
- scope = $rootScope.$new()
+ beforeEach(inject(function($injector, $rootScope, $controller) {
+ noteList = $injector.get('noteListFactory');
+ scope = $rootScope.$new();
ctrl = $controller('NoteCreateCtrl', {
$scope: scope,
- noteListFactory: noteList
- })
- }))
+ noteListFactory: noteList,
+ });
+ }));
- it('should create a new name from current name when cloneNoteName is called', function () {
+ it('should create a new name from current name when cloneNoteName is called', function() {
let notesList = [
{name: 'dsds 1', id: '1'},
{name: 'dsds 2', id: '2'},
{name: 'test name', id: '3'},
{name: 'aa bb cc', id: '4'},
- {name: 'Untitled Note 6', id: '4'}
- ]
+ {name: 'Untitled Note 6', id: '4'},
+ ];
- noteList.setNotes(notesList)
+ noteList.setNotes(notesList);
- ctrl.sourceNoteName = 'test name'
- expect(ctrl.cloneNoteName()).toEqual('test name 1')
- ctrl.sourceNoteName = 'aa bb cc'
- expect(ctrl.cloneNoteName()).toEqual('aa bb cc 1')
- ctrl.sourceNoteName = 'Untitled Note 6'
- expect(ctrl.cloneNoteName()).toEqual('Untitled Note 7')
- ctrl.sourceNoteName = 'My_note'
- expect(ctrl.cloneNoteName()).toEqual('My_note 1')
- ctrl.sourceNoteName = 'dsds 2'
- expect(ctrl.cloneNoteName()).toEqual('dsds 3')
- })
-})
+ ctrl.sourceNoteName = 'test name';
+ expect(ctrl.cloneNoteName()).toEqual('test name 1');
+ ctrl.sourceNoteName = 'aa bb cc';
+ expect(ctrl.cloneNoteName()).toEqual('aa bb cc 1');
+ ctrl.sourceNoteName = 'Untitled Note 6';
+ expect(ctrl.cloneNoteName()).toEqual('Untitled Note 7');
+ ctrl.sourceNoteName = 'My_note';
+ expect(ctrl.cloneNoteName()).toEqual('My_note 1');
+ ctrl.sourceNoteName = 'dsds 2';
+ expect(ctrl.cloneNoteName()).toEqual('dsds 3');
+ });
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/note-create/visible.directive.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/note-create/visible.directive.js b/zeppelin-web/src/components/note-create/visible.directive.js
index 48c170f..7ba8db7 100644
--- a/zeppelin-web/src/components/note-create/visible.directive.js
+++ b/zeppelin-web/src/components/note-create/visible.directive.js
@@ -12,34 +12,34 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').directive('modalvisible', modalvisible)
+angular.module('zeppelinWebApp').directive('modalvisible', modalvisible);
-function modalvisible () {
+function modalvisible() {
return {
restrict: 'A',
scope: {
preVisibleCallback: '&previsiblecallback',
postVisibleCallback: '&postvisiblecallback',
- targetinput: '@targetinput'
+ targetinput: '@targetinput',
},
- link: function (scope, element, attrs) {
+ link: function(scope, element, attrs) {
// Add some listeners
- let previsibleMethod = scope.preVisibleCallback
- let postVisibleMethod = scope.postVisibleCallback
- element.on('show.bs.modal', function (e) {
- let relatedTarget = angular.element(e.relatedTarget)
- let clone = relatedTarget.data('clone')
- let sourceNoteName = relatedTarget.data('source-note-name')
- let path = relatedTarget.data('path')
- let cloneNote = clone ? true : false
- previsibleMethod()(cloneNote, sourceNoteName, path)
- })
- element.on('shown.bs.modal', function (e) {
+ let previsibleMethod = scope.preVisibleCallback;
+ let postVisibleMethod = scope.postVisibleCallback;
+ element.on('show.bs.modal', function(e) {
+ let relatedTarget = angular.element(e.relatedTarget);
+ let clone = relatedTarget.data('clone');
+ let sourceNoteName = relatedTarget.data('source-note-name');
+ let path = relatedTarget.data('path');
+ let cloneNote = clone ? true : false;
+ previsibleMethod()(cloneNote, sourceNoteName, path);
+ });
+ element.on('shown.bs.modal', function(e) {
if (scope.targetinput) {
- angular.element(e.target).find('input#' + scope.targetinput).select()
+ angular.element(e.target).find('input#' + scope.targetinput).select();
}
- postVisibleMethod()
- })
- }
- }
+ postVisibleMethod();
+ });
+ },
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/note-import/note-import.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/note-import/note-import.controller.js b/zeppelin-web/src/components/note-import/note-import.controller.js
index 8cec890..fbfc5fa 100644
--- a/zeppelin-web/src/components/note-import/note-import.controller.js
+++ b/zeppelin-web/src/components/note-import/note-import.controller.js
@@ -12,76 +12,76 @@
* limitations under the License.
*/
-import './note-import.css'
-
-angular.module('zeppelinWebApp').controller('NoteImportCtrl', NoteImportCtrl)
-
-function NoteImportCtrl ($scope, $timeout, websocketMsgSrv) {
- 'ngInject'
-
- let vm = this
- $scope.note = {}
- $scope.note.step1 = true
- $scope.note.step2 = false
- $scope.maxLimit = ''
- let limit = 0
-
- websocketMsgSrv.listConfigurations()
- $scope.$on('configurationsInfo', function (scope, event) {
- limit = event.configurations['zeppelin.websocket.max.text.message.size']
- $scope.maxLimit = Math.round(limit / 1048576)
- })
-
- vm.resetFlags = function () {
- $scope.note = {}
- $scope.note.step1 = true
- $scope.note.step2 = false
- angular.element('#noteImportFile').val('')
- }
-
- $scope.uploadFile = function () {
- angular.element('#noteImportFile').click()
- }
-
- $scope.importFile = function (element) {
- $scope.note.errorText = ''
- $scope.note.importFile = element.files[0]
- let file = $scope.note.importFile
- let reader = new FileReader()
+import './note-import.css';
+
+angular.module('zeppelinWebApp').controller('NoteImportCtrl', NoteImportCtrl);
+
+function NoteImportCtrl($scope, $timeout, websocketMsgSrv) {
+ 'ngInject';
+
+ let vm = this;
+ $scope.note = {};
+ $scope.note.step1 = true;
+ $scope.note.step2 = false;
+ $scope.maxLimit = '';
+ let limit = 0;
+
+ websocketMsgSrv.listConfigurations();
+ $scope.$on('configurationsInfo', function(scope, event) {
+ limit = event.configurations['zeppelin.websocket.max.text.message.size'];
+ $scope.maxLimit = Math.round(limit / 1048576);
+ });
+
+ vm.resetFlags = function() {
+ $scope.note = {};
+ $scope.note.step1 = true;
+ $scope.note.step2 = false;
+ angular.element('#noteImportFile').val('');
+ };
+
+ $scope.uploadFile = function() {
+ angular.element('#noteImportFile').click();
+ };
+
+ $scope.importFile = function(element) {
+ $scope.note.errorText = '';
+ $scope.note.importFile = element.files[0];
+ let file = $scope.note.importFile;
+ let reader = new FileReader();
if (file.size > limit) {
- $scope.note.errorText = 'File size limit Exceeded!'
- $scope.$apply()
- return
+ $scope.note.errorText = 'File size limit Exceeded!';
+ $scope.$apply();
+ return;
}
- reader.onloadend = function () {
- vm.processImportJson(reader.result)
- }
+ reader.onloadend = function() {
+ vm.processImportJson(reader.result);
+ };
if (file) {
- reader.readAsText(file)
+ reader.readAsText(file);
}
- }
-
- $scope.uploadURL = function () {
- $scope.note.errorText = ''
- $scope.note.step1 = false
- $timeout(function () {
- $scope.note.step2 = true
- }, 400)
- }
-
- vm.importBack = function () {
- $scope.note.errorText = ''
- $timeout(function () {
- $scope.note.step1 = true
- }, 400)
- $scope.note.step2 = false
- }
-
- vm.importNote = function () {
- $scope.note.errorText = ''
+ };
+
+ $scope.uploadURL = function() {
+ $scope.note.errorText = '';
+ $scope.note.step1 = false;
+ $timeout(function() {
+ $scope.note.step2 = true;
+ }, 400);
+ };
+
+ vm.importBack = function() {
+ $scope.note.errorText = '';
+ $timeout(function() {
+ $scope.note.step1 = true;
+ }, 400);
+ $scope.note.step2 = false;
+ };
+
+ vm.importNote = function() {
+ $scope.note.errorText = '';
if ($scope.note.importUrl) {
jQuery.ajax({
url: $scope.note.importUrl,
@@ -89,50 +89,50 @@ function NoteImportCtrl ($scope, $timeout, websocketMsgSrv) {
dataType: 'json',
jsonp: false,
xhrFields: {
- withCredentials: false
+ withCredentials: false,
},
- error: function (xhr, ajaxOptions, thrownError) {
- $scope.note.errorText = 'Unable to Fetch URL'
- $scope.$apply()
- }}).done(function (data) {
- vm.processImportJson(data)
- })
+ error: function(xhr, ajaxOptions, thrownError) {
+ $scope.note.errorText = 'Unable to Fetch URL';
+ $scope.$apply();
+ }}).done(function(data) {
+ vm.processImportJson(data);
+ });
} else {
- $scope.note.errorText = 'Enter URL'
- $scope.$apply()
+ $scope.note.errorText = 'Enter URL';
+ $scope.$apply();
}
- }
+ };
- vm.processImportJson = function (result) {
+ vm.processImportJson = function(result) {
if (typeof result !== 'object') {
try {
- result = JSON.parse(result)
+ result = JSON.parse(result);
} catch (e) {
- $scope.note.errorText = 'JSON parse exception'
- $scope.$apply()
- return
+ $scope.note.errorText = 'JSON parse exception';
+ $scope.$apply();
+ return;
}
}
if (result.paragraphs && result.paragraphs.length > 0) {
if (!$scope.note.noteImportName) {
- $scope.note.noteImportName = result.name
+ $scope.note.noteImportName = result.name;
} else {
- result.name = $scope.note.noteImportName
+ result.name = $scope.note.noteImportName;
}
- websocketMsgSrv.importNote(result)
+ websocketMsgSrv.importNote(result);
// angular.element('#noteImportModal').modal('hide');
} else {
- $scope.note.errorText = 'Invalid JSON'
+ $scope.note.errorText = 'Invalid JSON';
}
- $scope.$apply()
- }
+ $scope.$apply();
+ };
/*
** $scope.$on functions below
*/
- $scope.$on('setNoteMenu', function (event, notes) {
- vm.resetFlags()
- angular.element('#noteImportModal').modal('hide')
- })
+ $scope.$on('setNoteMenu', function(event, notes) {
+ vm.resetFlags();
+ angular.element('#noteImportModal').modal('hide');
+ });
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/note-list/note-list.factory.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/note-list/note-list.factory.js b/zeppelin-web/src/components/note-list/note-list.factory.js
index 5e2c513..59662fa 100644
--- a/zeppelin-web/src/components/note-list/note-list.factory.js
+++ b/zeppelin-web/src/components/note-list/note-list.factory.js
@@ -12,71 +12,73 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').factory('noteListFactory', NoteListFactory)
+angular.module('zeppelinWebApp').factory('noteListFactory', NoteListFactory);
function NoteListFactory(arrayOrderingSrv, TRASH_FOLDER_ID) {
- 'ngInject'
+ 'ngInject';
const notes = {
root: {children: []},
flatList: [],
flatFolderMap: {},
- setNotes: function (notesList) {
+ setNotes: function(notesList) {
// a flat list to boost searching
notes.flatList = _.map(notesList, (note) => {
note.isTrash = note.name
- ? note.name.split('/')[0] === TRASH_FOLDER_ID : false
- return note
- })
+ ? note.name.split('/')[0] === TRASH_FOLDER_ID : false;
+ return note;
+ });
// construct the folder-based tree
- notes.root = {children: []}
- notes.flatFolderMap = {}
- _.reduce(notesList, function (root, note) {
- let noteName = note.name || note.id
- let nodes = noteName.match(/([^\/][^\/]*)/g)
+ notes.root = {children: []};
+ notes.flatFolderMap = {};
+ _.reduce(notesList, function(root, note) {
+ let noteName = note.name || note.id;
+ let nodes = noteName.match(/([^\/][^\/]*)/g);
// recursively add nodes
- addNode(root, nodes, note.id)
+ addNode(root, nodes, note.id);
- return root
- }, notes.root)
- notes.root.children.sort(arrayOrderingSrv.noteComparator)
- }
- }
+ return root;
+ }, notes.root);
+ notes.root.children.sort(arrayOrderingSrv.noteComparator);
+ },
+ };
- const addNode = function (curDir, nodes, noteId) {
+ const addNode = function(curDir, nodes, noteId) {
if (nodes.length === 1) { // the leaf
curDir.children.push({
name: nodes[0],
id: noteId,
path: curDir.id ? curDir.id + '/' + nodes[0] : nodes[0],
- isTrash: curDir.id ? curDir.id.split('/')[0] === TRASH_FOLDER_ID : false
- })
+ isTrash: curDir.id ? curDir.id.split('/')[0] === TRASH_FOLDER_ID : false,
+ });
} else { // a folder node
- let node = nodes.shift()
+ let node = nodes.shift();
let dir = _.find(curDir.children,
- function (c) { return c.name === node && c.children !== undefined })
+ function(c) {
+ return c.name === node && c.children !== undefined;
+ });
if (dir !== undefined) { // found an existing dir
- addNode(dir, nodes, noteId)
+ addNode(dir, nodes, noteId);
} else {
let newDir = {
id: curDir.id ? curDir.id + '/' + node : node,
name: node,
hidden: true,
children: [],
- isTrash: curDir.id ? curDir.id.split('/')[0] === TRASH_FOLDER_ID : false
- }
+ isTrash: curDir.id ? curDir.id.split('/')[0] === TRASH_FOLDER_ID : false,
+ };
// add the folder to flat folder map
- notes.flatFolderMap[newDir.id] = newDir
+ notes.flatFolderMap[newDir.id] = newDir;
- curDir.children.push(newDir)
- addNode(newDir, nodes, noteId)
+ curDir.children.push(newDir);
+ addNode(newDir, nodes, noteId);
}
}
- }
+ };
- return notes
+ return notes;
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/note-list/note-list.factory.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/note-list/note-list.factory.test.js b/zeppelin-web/src/components/note-list/note-list.factory.test.js
index c16504c..2a962d8 100644
--- a/zeppelin-web/src/components/note-list/note-list.factory.test.js
+++ b/zeppelin-web/src/components/note-list/note-list.factory.test.js
@@ -1,15 +1,15 @@
-describe('Factory: NoteList', function () {
- let noteList
+describe('Factory: NoteList', function() {
+ let noteList;
- beforeEach(function () {
- angular.mock.module('zeppelinWebApp')
+ beforeEach(function() {
+ angular.mock.module('zeppelinWebApp');
- inject(function ($injector) {
- noteList = $injector.get('noteListFactory')
- })
- })
+ inject(function($injector) {
+ noteList = $injector.get('noteListFactory');
+ });
+ });
- it('should generate both flat list and folder-based list properly', function () {
+ it('should generate both flat list and folder-based list properly', function() {
let notesList = [
{name: 'A', id: '000001'},
{name: 'B', id: '000002'},
@@ -19,57 +19,57 @@ describe('Factory: NoteList', function () {
{name: '/C/CB/CBA', id: '000006'}, // same name with a dir
{name: '/C/CB/CBA', id: '000007'}, // same name with another note
{name: 'C///CB//CBB', id: '000008'},
- {name: 'D/D[A/DA]B', id: '000009'} // check if '[' and ']' considered as folder seperator
- ]
- noteList.setNotes(notesList)
+ {name: 'D/D[A/DA]B', id: '000009'}, // check if '[' and ']' considered as folder seperator
+ ];
+ noteList.setNotes(notesList);
- let flatList = noteList.flatList
- expect(flatList.length).toBe(9)
- expect(flatList[0].name).toBe('A')
- expect(flatList[0].id).toBe('000001')
- expect(flatList[1].name).toBe('B')
- expect(flatList[2].name).toBeUndefined()
- expect(flatList[3].name).toBe('/C/CA')
- expect(flatList[4].name).toBe('/C/CB')
- expect(flatList[5].name).toBe('/C/CB/CBA')
- expect(flatList[6].name).toBe('/C/CB/CBA')
- expect(flatList[7].name).toBe('C///CB//CBB')
- expect(flatList[8].name).toBe('D/D[A/DA]B')
+ let flatList = noteList.flatList;
+ expect(flatList.length).toBe(9);
+ expect(flatList[0].name).toBe('A');
+ expect(flatList[0].id).toBe('000001');
+ expect(flatList[1].name).toBe('B');
+ expect(flatList[2].name).toBeUndefined();
+ expect(flatList[3].name).toBe('/C/CA');
+ expect(flatList[4].name).toBe('/C/CB');
+ expect(flatList[5].name).toBe('/C/CB/CBA');
+ expect(flatList[6].name).toBe('/C/CB/CBA');
+ expect(flatList[7].name).toBe('C///CB//CBB');
+ expect(flatList[8].name).toBe('D/D[A/DA]B');
- let folderList = noteList.root.children
- expect(folderList.length).toBe(5)
- expect(folderList[3].name).toBe('A')
- expect(folderList[3].id).toBe('000001')
- expect(folderList[4].name).toBe('B')
- expect(folderList[2].name).toBe('000003')
- expect(folderList[0].name).toBe('C')
- expect(folderList[0].id).toBe('C')
- expect(folderList[0].children.length).toBe(3)
- expect(folderList[0].children[0].name).toBe('CA')
- expect(folderList[0].children[0].id).toBe('000004')
- expect(folderList[0].children[0].children).toBeUndefined()
- expect(folderList[0].children[1].name).toBe('CB')
- expect(folderList[0].children[1].id).toBe('000005')
- expect(folderList[0].children[1].children).toBeUndefined()
- expect(folderList[0].children[2].name).toBe('CB')
- expect(folderList[0].children[2].id).toBe('C/CB')
- expect(folderList[0].children[2].children.length).toBe(3)
- expect(folderList[0].children[2].children[0].name).toBe('CBA')
- expect(folderList[0].children[2].children[0].id).toBe('000006')
- expect(folderList[0].children[2].children[0].children).toBeUndefined()
- expect(folderList[0].children[2].children[1].name).toBe('CBA')
- expect(folderList[0].children[2].children[1].id).toBe('000007')
- expect(folderList[0].children[2].children[1].children).toBeUndefined()
- expect(folderList[0].children[2].children[2].name).toBe('CBB')
- expect(folderList[0].children[2].children[2].id).toBe('000008')
- expect(folderList[0].children[2].children[2].children).toBeUndefined()
- expect(folderList[1].name).toBe('D')
- expect(folderList[1].id).toBe('D')
- expect(folderList[1].children.length).toBe(1)
- expect(folderList[1].children[0].name).toBe('D[A')
- expect(folderList[1].children[0].id).toBe('D/D[A')
- expect(folderList[1].children[0].children[0].name).toBe('DA]B')
- expect(folderList[1].children[0].children[0].id).toBe('000009')
- expect(folderList[1].children[0].children[0].children).toBeUndefined()
- })
-})
+ let folderList = noteList.root.children;
+ expect(folderList.length).toBe(5);
+ expect(folderList[3].name).toBe('A');
+ expect(folderList[3].id).toBe('000001');
+ expect(folderList[4].name).toBe('B');
+ expect(folderList[2].name).toBe('000003');
+ expect(folderList[0].name).toBe('C');
+ expect(folderList[0].id).toBe('C');
+ expect(folderList[0].children.length).toBe(3);
+ expect(folderList[0].children[0].name).toBe('CA');
+ expect(folderList[0].children[0].id).toBe('000004');
+ expect(folderList[0].children[0].children).toBeUndefined();
+ expect(folderList[0].children[1].name).toBe('CB');
+ expect(folderList[0].children[1].id).toBe('000005');
+ expect(folderList[0].children[1].children).toBeUndefined();
+ expect(folderList[0].children[2].name).toBe('CB');
+ expect(folderList[0].children[2].id).toBe('C/CB');
+ expect(folderList[0].children[2].children.length).toBe(3);
+ expect(folderList[0].children[2].children[0].name).toBe('CBA');
+ expect(folderList[0].children[2].children[0].id).toBe('000006');
+ expect(folderList[0].children[2].children[0].children).toBeUndefined();
+ expect(folderList[0].children[2].children[1].name).toBe('CBA');
+ expect(folderList[0].children[2].children[1].id).toBe('000007');
+ expect(folderList[0].children[2].children[1].children).toBeUndefined();
+ expect(folderList[0].children[2].children[2].name).toBe('CBB');
+ expect(folderList[0].children[2].children[2].id).toBe('000008');
+ expect(folderList[0].children[2].children[2].children).toBeUndefined();
+ expect(folderList[1].name).toBe('D');
+ expect(folderList[1].id).toBe('D');
+ expect(folderList[1].children.length).toBe(1);
+ expect(folderList[1].children[0].name).toBe('D[A');
+ expect(folderList[1].children[0].id).toBe('D/D[A');
+ expect(folderList[1].children[0].children[0].name).toBe('DA]B');
+ expect(folderList[1].children[0].children[0].id).toBe('000009');
+ expect(folderList[1].children[0].children[0].children).toBeUndefined();
+ });
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/note-rename/note-rename.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/note-rename/note-rename.controller.js b/zeppelin-web/src/components/note-rename/note-rename.controller.js
index b950d2b..0fa31c4 100644
--- a/zeppelin-web/src/components/note-rename/note-rename.controller.js
+++ b/zeppelin-web/src/components/note-rename/note-rename.controller.js
@@ -12,37 +12,37 @@
* limitations under the License.
*/
-import './note-rename.css'
+import './note-rename.css';
-angular.module('zeppelinWebApp').controller('NoteRenameCtrl', NoteRenameController)
+angular.module('zeppelinWebApp').controller('NoteRenameCtrl', NoteRenameController);
function NoteRenameController($scope) {
- 'ngInject'
+ 'ngInject';
- let self = this
+ let self = this;
- $scope.params = {newName: ''}
- $scope.isValid = true
+ $scope.params = {newName: ''};
+ $scope.isValid = true;
- $scope.rename = function () {
- angular.element('#noteRenameModal').modal('hide')
- self.callback($scope.params.newName)
- }
+ $scope.rename = function() {
+ angular.element('#noteRenameModal').modal('hide');
+ self.callback($scope.params.newName);
+ };
- $scope.$on('openRenameModal', function (event, options) {
- self.validator = options.validator || defaultValidator
- self.callback = options.callback || function () {}
+ $scope.$on('openRenameModal', function(event, options) {
+ self.validator = options.validator || defaultValidator;
+ self.callback = options.callback || function() {};
- $scope.title = options.title || 'Rename'
- $scope.params.newName = options.oldName || ''
- $scope.validate = function () {
- $scope.isValid = self.validator($scope.params.newName)
- }
+ $scope.title = options.title || 'Rename';
+ $scope.params.newName = options.oldName || '';
+ $scope.validate = function() {
+ $scope.isValid = self.validator($scope.params.newName);
+ };
- angular.element('#noteRenameModal').modal('show')
- })
+ angular.element('#noteRenameModal').modal('show');
+ });
- function defaultValidator (str) {
- return !!str.trim()
+ function defaultValidator(str) {
+ return !!str.trim();
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/note-rename/note-rename.service.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/note-rename/note-rename.service.js b/zeppelin-web/src/components/note-rename/note-rename.service.js
index 64df82f..fd0f3e5 100644
--- a/zeppelin-web/src/components/note-rename/note-rename.service.js
+++ b/zeppelin-web/src/components/note-rename/note-rename.service.js
@@ -12,12 +12,12 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').service('noteRenameService', NoteRenameService)
+angular.module('zeppelinWebApp').service('noteRenameService', NoteRenameService);
function NoteRenameService($rootScope) {
- 'ngInject'
+ 'ngInject';
- let self = this
+ let self = this;
/**
* <options schema>
@@ -26,7 +26,7 @@ function NoteRenameService($rootScope) {
* callback: (newName: string)=>void - callback onButtonClick
* validator: (str: string)=>boolean - input validator
*/
- self.openRenameModal = function (options) {
- $rootScope.$broadcast('openRenameModal', options)
- }
+ self.openRenameModal = function(options) {
+ $rootScope.$broadcast('openRenameModal', options);
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/websocket/websocket-event.factory.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/websocket/websocket-event.factory.js b/zeppelin-web/src/components/websocket/websocket-event.factory.js
index 70d61ec..18c704d 100644
--- a/zeppelin-web/src/components/websocket/websocket-event.factory.js
+++ b/zeppelin-web/src/components/websocket/websocket-event.factory.js
@@ -12,92 +12,92 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').factory('websocketEvents', WebsocketEventFactory)
+angular.module('zeppelinWebApp').factory('websocketEvents', WebsocketEventFactory);
-function WebsocketEventFactory ($rootScope, $websocket, $location, baseUrlSrv) {
- 'ngInject'
+function WebsocketEventFactory($rootScope, $websocket, $location, baseUrlSrv) {
+ 'ngInject';
- let websocketCalls = {}
- let pingIntervalId
+ let websocketCalls = {};
+ let pingIntervalId;
- websocketCalls.ws = $websocket(baseUrlSrv.getWebsocketUrl())
- websocketCalls.ws.reconnectIfNotNormalClose = true
+ websocketCalls.ws = $websocket(baseUrlSrv.getWebsocketUrl());
+ websocketCalls.ws.reconnectIfNotNormalClose = true;
- websocketCalls.ws.onOpen(function () {
- console.log('Websocket created')
- $rootScope.$broadcast('setConnectedStatus', true)
- pingIntervalId = setInterval(function () {
- websocketCalls.sendNewEvent({op: 'PING'})
- }, 10000)
- })
+ websocketCalls.ws.onOpen(function() {
+ console.log('Websocket created');
+ $rootScope.$broadcast('setConnectedStatus', true);
+ pingIntervalId = setInterval(function() {
+ websocketCalls.sendNewEvent({op: 'PING'});
+ }, 10000);
+ });
- websocketCalls.sendNewEvent = function (data) {
+ websocketCalls.sendNewEvent = function(data) {
if ($rootScope.ticket !== undefined) {
- data.principal = $rootScope.ticket.principal
- data.ticket = $rootScope.ticket.ticket
- data.roles = $rootScope.ticket.roles
+ data.principal = $rootScope.ticket.principal;
+ data.ticket = $rootScope.ticket.ticket;
+ data.roles = $rootScope.ticket.roles;
} else {
- data.principal = ''
- data.ticket = ''
- data.roles = ''
+ data.principal = '';
+ data.ticket = '';
+ data.roles = '';
}
- console.log('Send >> %o, %o, %o, %o, %o', data.op, data.principal, data.ticket, data.roles, data)
- return websocketCalls.ws.send(JSON.stringify(data))
- }
+ console.log('Send >> %o, %o, %o, %o, %o', data.op, data.principal, data.ticket, data.roles, data);
+ return websocketCalls.ws.send(JSON.stringify(data));
+ };
- websocketCalls.isConnected = function () {
- return (websocketCalls.ws.socket.readyState === 1)
- }
+ websocketCalls.isConnected = function() {
+ return (websocketCalls.ws.socket.readyState === 1);
+ };
- websocketCalls.ws.onMessage(function (event) {
- let payload
+ websocketCalls.ws.onMessage(function(event) {
+ let payload;
if (event.data) {
- payload = angular.fromJson(event.data)
+ payload = angular.fromJson(event.data);
}
- console.log('Receive << %o, %o', payload.op, payload)
+ console.log('Receive << %o, %o', payload.op, payload);
- let op = payload.op
- let data = payload.data
+ let op = payload.op;
+ let data = payload.data;
if (op === 'NOTE') {
- $rootScope.$broadcast('setNoteContent', data.note)
+ $rootScope.$broadcast('setNoteContent', data.note);
} else if (op === 'NEW_NOTE') {
- $location.path('/notebook/' + data.note.id)
+ $location.path('/notebook/' + data.note.id);
} else if (op === 'NOTES_INFO') {
- $rootScope.$broadcast('setNoteMenu', data.notes)
+ $rootScope.$broadcast('setNoteMenu', data.notes);
} else if (op === 'LIST_NOTE_JOBS') {
- $rootScope.$emit('jobmanager:set-jobs', data.noteJobs)
+ $rootScope.$emit('jobmanager:set-jobs', data.noteJobs);
} else if (op === 'LIST_UPDATE_NOTE_JOBS') {
- $rootScope.$emit('jobmanager:update-jobs', data.noteRunningJobs)
+ $rootScope.$emit('jobmanager:update-jobs', data.noteRunningJobs);
} else if (op === 'AUTH_INFO') {
- let btn = []
+ let btn = [];
if ($rootScope.ticket.roles === '[]') {
btn = [{
label: 'Close',
- action: function (dialog) {
- dialog.close()
- }
- }]
+ action: function(dialog) {
+ dialog.close();
+ },
+ }];
} else {
btn = [{
label: 'Login',
- action: function (dialog) {
- dialog.close()
+ action: function(dialog) {
+ dialog.close();
angular.element('#loginModal').modal({
- show: 'true'
- })
- }
+ show: 'true',
+ });
+ },
}, {
label: 'Cancel',
- action: function (dialog) {
- dialog.close()
+ action: function(dialog) {
+ dialog.close();
// using $rootScope.apply to trigger angular digest cycle
// changing $location.path inside bootstrap modal wont trigger digest
- $rootScope.$apply(function () {
- $location.path('/')
- })
- }
- }]
+ $rootScope.$apply(function() {
+ $location.path('/');
+ });
+ },
+ }];
}
BootstrapDialog.show({
@@ -106,44 +106,44 @@ function WebsocketEventFactory ($rootScope, $websocket, $location, baseUrlSrv) {
closeByKeyboard: false,
title: 'Insufficient privileges',
message: data.info.toString(),
- buttons: btn
- })
+ buttons: btn,
+ });
} else if (op === 'PARAGRAPH') {
- $rootScope.$broadcast('updateParagraph', data)
+ $rootScope.$broadcast('updateParagraph', data);
} else if (op === 'RUN_PARAGRAPH_USING_SPELL') {
- $rootScope.$broadcast('runParagraphUsingSpell', data)
+ $rootScope.$broadcast('runParagraphUsingSpell', data);
} else if (op === 'PARAGRAPH_APPEND_OUTPUT') {
- $rootScope.$broadcast('appendParagraphOutput', data)
+ $rootScope.$broadcast('appendParagraphOutput', data);
} else if (op === 'PARAGRAPH_UPDATE_OUTPUT') {
- $rootScope.$broadcast('updateParagraphOutput', data)
+ $rootScope.$broadcast('updateParagraphOutput', data);
} else if (op === 'PROGRESS') {
- $rootScope.$broadcast('updateProgress', data)
+ $rootScope.$broadcast('updateProgress', data);
} else if (op === 'COMPLETION_LIST') {
- $rootScope.$broadcast('completionList', data)
+ $rootScope.$broadcast('completionList', data);
} else if (op === 'EDITOR_SETTING') {
- $rootScope.$broadcast('editorSetting', data)
+ $rootScope.$broadcast('editorSetting', data);
} else if (op === 'ANGULAR_OBJECT_UPDATE') {
- $rootScope.$broadcast('angularObjectUpdate', data)
+ $rootScope.$broadcast('angularObjectUpdate', data);
} else if (op === 'ANGULAR_OBJECT_REMOVE') {
- $rootScope.$broadcast('angularObjectRemove', data)
+ $rootScope.$broadcast('angularObjectRemove', data);
} else if (op === 'APP_APPEND_OUTPUT') {
- $rootScope.$broadcast('appendAppOutput', data)
+ $rootScope.$broadcast('appendAppOutput', data);
} else if (op === 'APP_UPDATE_OUTPUT') {
- $rootScope.$broadcast('updateAppOutput', data)
+ $rootScope.$broadcast('updateAppOutput', data);
} else if (op === 'APP_LOAD') {
- $rootScope.$broadcast('appLoad', data)
+ $rootScope.$broadcast('appLoad', data);
} else if (op === 'APP_STATUS_CHANGE') {
- $rootScope.$broadcast('appStatusChange', data)
+ $rootScope.$broadcast('appStatusChange', data);
} else if (op === 'LIST_REVISION_HISTORY') {
- $rootScope.$broadcast('listRevisionHistory', data)
+ $rootScope.$broadcast('listRevisionHistory', data);
} else if (op === 'NOTE_REVISION') {
- $rootScope.$broadcast('noteRevision', data)
+ $rootScope.$broadcast('noteRevision', data);
} else if (op === 'NOTE_REVISION_FOR_COMPARE') {
- $rootScope.$broadcast('noteRevisionForCompare', data)
+ $rootScope.$broadcast('noteRevisionForCompare', data);
} else if (op === 'INTERPRETER_BINDINGS') {
- $rootScope.$broadcast('interpreterBindings', data)
+ $rootScope.$broadcast('interpreterBindings', data);
} else if (op === 'SAVE_NOTE_FORMS') {
- $rootScope.$broadcast('saveNoteForms', data)
+ $rootScope.$broadcast('saveNoteForms', data);
} else if (op === 'ERROR_INFO') {
BootstrapDialog.show({
closable: false,
@@ -154,47 +154,47 @@ function WebsocketEventFactory ($rootScope, $websocket, $location, baseUrlSrv) {
buttons: [{
// close all the dialogs when there are error on running all paragraphs
label: 'Close',
- action: function () {
- BootstrapDialog.closeAll()
- }
- }]
- })
+ action: function() {
+ BootstrapDialog.closeAll();
+ },
+ }],
+ });
} else if (op === 'SESSION_LOGOUT') {
- $rootScope.$broadcast('session_logout', data)
+ $rootScope.$broadcast('session_logout', data);
} else if (op === 'CONFIGURATIONS_INFO') {
- $rootScope.$broadcast('configurationsInfo', data)
+ $rootScope.$broadcast('configurationsInfo', data);
} else if (op === 'INTERPRETER_SETTINGS') {
- $rootScope.$broadcast('interpreterSettings', data)
+ $rootScope.$broadcast('interpreterSettings', data);
} else if (op === 'PARAGRAPH_ADDED') {
- $rootScope.$broadcast('addParagraph', data.paragraph, data.index)
+ $rootScope.$broadcast('addParagraph', data.paragraph, data.index);
} else if (op === 'PARAGRAPH_REMOVED') {
- $rootScope.$broadcast('removeParagraph', data.id)
+ $rootScope.$broadcast('removeParagraph', data.id);
} else if (op === 'PARAGRAPH_MOVED') {
- $rootScope.$broadcast('moveParagraph', data.id, data.index)
+ $rootScope.$broadcast('moveParagraph', data.id, data.index);
} else if (op === 'NOTE_UPDATED') {
- $rootScope.$broadcast('updateNote', data.name, data.config, data.info)
+ $rootScope.$broadcast('updateNote', data.name, data.config, data.info);
} else if (op === 'SET_NOTE_REVISION') {
- $rootScope.$broadcast('setNoteRevisionResult', data)
+ $rootScope.$broadcast('setNoteRevisionResult', data);
} else if (op === 'PARAS_INFO') {
- $rootScope.$broadcast('updateParaInfos', data)
+ $rootScope.$broadcast('updateParaInfos', data);
} else {
- console.error(`unknown websocket op: ${op}`)
+ console.error(`unknown websocket op: ${op}`);
}
- })
+ });
- websocketCalls.ws.onError(function (event) {
- console.log('error message: ', event)
- $rootScope.$broadcast('setConnectedStatus', false)
- })
+ websocketCalls.ws.onError(function(event) {
+ console.log('error message: ', event);
+ $rootScope.$broadcast('setConnectedStatus', false);
+ });
- websocketCalls.ws.onClose(function (event) {
- console.log('close message: ', event)
+ websocketCalls.ws.onClose(function(event) {
+ console.log('close message: ', event);
if (pingIntervalId !== undefined) {
- clearInterval(pingIntervalId)
- pingIntervalId = undefined
+ clearInterval(pingIntervalId);
+ pingIntervalId = undefined;
}
- $rootScope.$broadcast('setConnectedStatus', false)
- })
+ $rootScope.$broadcast('setConnectedStatus', false);
+ });
- return websocketCalls
+ return websocketCalls;
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/websocket/websocket-message.service.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/websocket/websocket-message.service.js b/zeppelin-web/src/components/websocket/websocket-message.service.js
index cd65e1d..f0cf92b 100644
--- a/zeppelin-web/src/components/websocket/websocket-message.service.js
+++ b/zeppelin-web/src/components/websocket/websocket-message.service.js
@@ -12,100 +12,100 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').service('websocketMsgSrv', WebsocketMessageService)
+angular.module('zeppelinWebApp').service('websocketMsgSrv', WebsocketMessageService);
-function WebsocketMessageService ($rootScope, websocketEvents) {
- 'ngInject'
+function WebsocketMessageService($rootScope, websocketEvents) {
+ 'ngInject';
return {
- getHomeNote: function () {
- websocketEvents.sendNewEvent({op: 'GET_HOME_NOTE'})
+ getHomeNote: function() {
+ websocketEvents.sendNewEvent({op: 'GET_HOME_NOTE'});
},
- createNotebook: function (noteName, defaultInterpreterId) {
+ createNotebook: function(noteName, defaultInterpreterId) {
websocketEvents.sendNewEvent({
op: 'NEW_NOTE',
data: {
name: noteName,
- defaultInterpreterId: defaultInterpreterId
- }
- })
+ defaultInterpreterId: defaultInterpreterId,
+ },
+ });
},
- moveNoteToTrash: function (noteId) {
- websocketEvents.sendNewEvent({op: 'MOVE_NOTE_TO_TRASH', data: {id: noteId}})
+ moveNoteToTrash: function(noteId) {
+ websocketEvents.sendNewEvent({op: 'MOVE_NOTE_TO_TRASH', data: {id: noteId}});
},
- moveFolderToTrash: function (folderId) {
- websocketEvents.sendNewEvent({op: 'MOVE_FOLDER_TO_TRASH', data: {id: folderId}})
+ moveFolderToTrash: function(folderId) {
+ websocketEvents.sendNewEvent({op: 'MOVE_FOLDER_TO_TRASH', data: {id: folderId}});
},
- restoreNote: function (noteId) {
- websocketEvents.sendNewEvent({op: 'RESTORE_NOTE', data: {id: noteId}})
+ restoreNote: function(noteId) {
+ websocketEvents.sendNewEvent({op: 'RESTORE_NOTE', data: {id: noteId}});
},
- restoreFolder: function (folderId) {
- websocketEvents.sendNewEvent({op: 'RESTORE_FOLDER', data: {id: folderId}})
+ restoreFolder: function(folderId) {
+ websocketEvents.sendNewEvent({op: 'RESTORE_FOLDER', data: {id: folderId}});
},
- restoreAll: function () {
- websocketEvents.sendNewEvent({op: 'RESTORE_ALL'})
+ restoreAll: function() {
+ websocketEvents.sendNewEvent({op: 'RESTORE_ALL'});
},
- deleteNote: function (noteId) {
- websocketEvents.sendNewEvent({op: 'DEL_NOTE', data: {id: noteId}})
+ deleteNote: function(noteId) {
+ websocketEvents.sendNewEvent({op: 'DEL_NOTE', data: {id: noteId}});
},
- removeFolder: function (folderId) {
- websocketEvents.sendNewEvent({op: 'REMOVE_FOLDER', data: {id: folderId}})
+ removeFolder: function(folderId) {
+ websocketEvents.sendNewEvent({op: 'REMOVE_FOLDER', data: {id: folderId}});
},
- emptyTrash: function () {
- websocketEvents.sendNewEvent({op: 'EMPTY_TRASH'})
+ emptyTrash: function() {
+ websocketEvents.sendNewEvent({op: 'EMPTY_TRASH'});
},
- cloneNote: function (noteIdToClone, newNoteName) {
- websocketEvents.sendNewEvent({op: 'CLONE_NOTE', data: {id: noteIdToClone, name: newNoteName}})
+ cloneNote: function(noteIdToClone, newNoteName) {
+ websocketEvents.sendNewEvent({op: 'CLONE_NOTE', data: {id: noteIdToClone, name: newNoteName}});
},
- getNoteList: function () {
- websocketEvents.sendNewEvent({op: 'LIST_NOTES'})
+ getNoteList: function() {
+ websocketEvents.sendNewEvent({op: 'LIST_NOTES'});
},
- reloadAllNotesFromRepo: function () {
- websocketEvents.sendNewEvent({op: 'RELOAD_NOTES_FROM_REPO'})
+ reloadAllNotesFromRepo: function() {
+ websocketEvents.sendNewEvent({op: 'RELOAD_NOTES_FROM_REPO'});
},
- getNote: function (noteId) {
- websocketEvents.sendNewEvent({op: 'GET_NOTE', data: {id: noteId}})
+ getNote: function(noteId) {
+ websocketEvents.sendNewEvent({op: 'GET_NOTE', data: {id: noteId}});
},
- updateNote: function (noteId, noteName, noteConfig) {
- websocketEvents.sendNewEvent({op: 'NOTE_UPDATE', data: {id: noteId, name: noteName, config: noteConfig}})
+ updateNote: function(noteId, noteName, noteConfig) {
+ websocketEvents.sendNewEvent({op: 'NOTE_UPDATE', data: {id: noteId, name: noteName, config: noteConfig}});
},
- updatePersonalizedMode: function (noteId, modeValue) {
- websocketEvents.sendNewEvent({op: 'UPDATE_PERSONALIZED_MODE', data: {id: noteId, personalized: modeValue}})
+ updatePersonalizedMode: function(noteId, modeValue) {
+ websocketEvents.sendNewEvent({op: 'UPDATE_PERSONALIZED_MODE', data: {id: noteId, personalized: modeValue}});
},
- renameNote: function (noteId, noteName) {
- websocketEvents.sendNewEvent({op: 'NOTE_RENAME', data: {id: noteId, name: noteName}})
+ renameNote: function(noteId, noteName) {
+ websocketEvents.sendNewEvent({op: 'NOTE_RENAME', data: {id: noteId, name: noteName}});
},
- renameFolder: function (folderId, folderName) {
- websocketEvents.sendNewEvent({op: 'FOLDER_RENAME', data: {id: folderId, name: folderName}})
+ renameFolder: function(folderId, folderName) {
+ websocketEvents.sendNewEvent({op: 'FOLDER_RENAME', data: {id: folderId, name: folderName}});
},
- moveParagraph: function (paragraphId, newIndex) {
- websocketEvents.sendNewEvent({op: 'MOVE_PARAGRAPH', data: {id: paragraphId, index: newIndex}})
+ moveParagraph: function(paragraphId, newIndex) {
+ websocketEvents.sendNewEvent({op: 'MOVE_PARAGRAPH', data: {id: paragraphId, index: newIndex}});
},
- insertParagraph: function (newIndex) {
- websocketEvents.sendNewEvent({op: 'INSERT_PARAGRAPH', data: {index: newIndex}})
+ insertParagraph: function(newIndex) {
+ websocketEvents.sendNewEvent({op: 'INSERT_PARAGRAPH', data: {index: newIndex}});
},
- copyParagraph: function (newIndex, paragraphTitle, paragraphData,
+ copyParagraph: function(newIndex, paragraphTitle, paragraphData,
paragraphConfig, paragraphParams) {
websocketEvents.sendNewEvent({
op: 'COPY_PARAGRAPH',
@@ -114,12 +114,12 @@ function WebsocketMessageService ($rootScope, websocketEvents) {
title: paragraphTitle,
paragraph: paragraphData,
config: paragraphConfig,
- params: paragraphParams
- }
- })
+ params: paragraphParams,
+ },
+ });
},
- updateAngularObject: function (noteId, paragraphId, name, value, interpreterGroupId) {
+ updateAngularObject: function(noteId, paragraphId, name, value, interpreterGroupId) {
websocketEvents.sendNewEvent({
op: 'ANGULAR_OBJECT_UPDATED',
data: {
@@ -127,39 +127,39 @@ function WebsocketMessageService ($rootScope, websocketEvents) {
paragraphId: paragraphId,
name: name,
value: value,
- interpreterGroupId: interpreterGroupId
- }
- })
+ interpreterGroupId: interpreterGroupId,
+ },
+ });
},
- clientBindAngularObject: function (noteId, name, value, paragraphId) {
+ clientBindAngularObject: function(noteId, name, value, paragraphId) {
websocketEvents.sendNewEvent({
op: 'ANGULAR_OBJECT_CLIENT_BIND',
data: {
noteId: noteId,
name: name,
value: value,
- paragraphId: paragraphId
- }
- })
+ paragraphId: paragraphId,
+ },
+ });
},
- clientUnbindAngularObject: function (noteId, name, paragraphId) {
+ clientUnbindAngularObject: function(noteId, name, paragraphId) {
websocketEvents.sendNewEvent({
op: 'ANGULAR_OBJECT_CLIENT_UNBIND',
data: {
noteId: noteId,
name: name,
- paragraphId: paragraphId
- }
- })
+ paragraphId: paragraphId,
+ },
+ });
},
- cancelParagraphRun: function (paragraphId) {
- websocketEvents.sendNewEvent({op: 'CANCEL_PARAGRAPH', data: {id: paragraphId}})
+ cancelParagraphRun: function(paragraphId) {
+ websocketEvents.sendNewEvent({op: 'CANCEL_PARAGRAPH', data: {id: paragraphId}});
},
- paragraphExecutedBySpell: function (paragraphId, paragraphTitle,
+ paragraphExecutedBySpell: function(paragraphId, paragraphTitle,
paragraphText, paragraphResultsMsg,
paragraphStatus, paragraphErrorMessage,
paragraphConfig, paragraphParams,
@@ -172,10 +172,10 @@ function WebsocketMessageService ($rootScope, websocketEvents) {
paragraph: paragraphText,
results: {
code: paragraphStatus,
- msg: paragraphResultsMsg.map(dataWithType => {
- let serializedData = dataWithType.data
- return { type: dataWithType.type, data: serializedData, }
- })
+ msg: paragraphResultsMsg.map((dataWithType) => {
+ let serializedData = dataWithType.data;
+ return {type: dataWithType.type, data: serializedData};
+ }),
},
status: paragraphStatus,
errorMessage: paragraphErrorMessage,
@@ -183,11 +183,11 @@ function WebsocketMessageService ($rootScope, websocketEvents) {
params: paragraphParams,
dateStarted: paragraphDateStarted,
dateFinished: paragraphDateFinished,
- }
- })
+ },
+ });
},
- runParagraph: function (paragraphId, paragraphTitle, paragraphData, paragraphConfig, paragraphParams) {
+ runParagraph: function(paragraphId, paragraphTitle, paragraphData, paragraphConfig, paragraphParams) {
websocketEvents.sendNewEvent({
op: 'RUN_PARAGRAPH',
data: {
@@ -195,45 +195,45 @@ function WebsocketMessageService ($rootScope, websocketEvents) {
title: paragraphTitle,
paragraph: paragraphData,
config: paragraphConfig,
- params: paragraphParams
- }
- })
+ params: paragraphParams,
+ },
+ });
},
- runAllParagraphs: function (noteId, paragraphs) {
+ runAllParagraphs: function(noteId, paragraphs) {
websocketEvents.sendNewEvent({
op: 'RUN_ALL_PARAGRAPHS',
data: {
noteId: noteId,
- paragraphs: JSON.stringify(paragraphs)
- }
- })
+ paragraphs: JSON.stringify(paragraphs),
+ },
+ });
},
- removeParagraph: function (paragraphId) {
- websocketEvents.sendNewEvent({op: 'PARAGRAPH_REMOVE', data: {id: paragraphId}})
+ removeParagraph: function(paragraphId) {
+ websocketEvents.sendNewEvent({op: 'PARAGRAPH_REMOVE', data: {id: paragraphId}});
},
- clearParagraphOutput: function (paragraphId) {
- websocketEvents.sendNewEvent({op: 'PARAGRAPH_CLEAR_OUTPUT', data: {id: paragraphId}})
+ clearParagraphOutput: function(paragraphId) {
+ websocketEvents.sendNewEvent({op: 'PARAGRAPH_CLEAR_OUTPUT', data: {id: paragraphId}});
},
- clearAllParagraphOutput: function (noteId) {
- websocketEvents.sendNewEvent({op: 'PARAGRAPH_CLEAR_ALL_OUTPUT', data: {id: noteId}})
+ clearAllParagraphOutput: function(noteId) {
+ websocketEvents.sendNewEvent({op: 'PARAGRAPH_CLEAR_ALL_OUTPUT', data: {id: noteId}});
},
- completion: function (paragraphId, buf, cursor) {
+ completion: function(paragraphId, buf, cursor) {
websocketEvents.sendNewEvent({
op: 'COMPLETION',
data: {
id: paragraphId,
buf: buf,
- cursor: cursor
- }
- })
+ cursor: cursor,
+ },
+ });
},
- commitParagraph: function (paragraphId, paragraphTitle, paragraphData, paragraphConfig, paragraphParams, noteId) {
+ commitParagraph: function(paragraphId, paragraphTitle, paragraphData, paragraphConfig, paragraphParams, noteId) {
return websocketEvents.sendNewEvent({
op: 'COMMIT_PARAGRAPH',
data: {
@@ -242,132 +242,132 @@ function WebsocketMessageService ($rootScope, websocketEvents) {
title: paragraphTitle,
paragraph: paragraphData,
config: paragraphConfig,
- params: paragraphParams
- }
- })
+ params: paragraphParams,
+ },
+ });
},
- importNote: function (note) {
+ importNote: function(note) {
websocketEvents.sendNewEvent({
op: 'IMPORT_NOTE',
data: {
- note: note
- }
- })
+ note: note,
+ },
+ });
},
- checkpointNote: function (noteId, commitMessage) {
+ checkpointNote: function(noteId, commitMessage) {
websocketEvents.sendNewEvent({
op: 'CHECKPOINT_NOTE',
data: {
noteId: noteId,
- commitMessage: commitMessage
- }
- })
+ commitMessage: commitMessage,
+ },
+ });
},
- setNoteRevision: function (noteId, revisionId) {
+ setNoteRevision: function(noteId, revisionId) {
websocketEvents.sendNewEvent({
op: 'SET_NOTE_REVISION',
data: {
noteId: noteId,
- revisionId: revisionId
- }
- })
+ revisionId: revisionId,
+ },
+ });
},
- listRevisionHistory: function (noteId) {
+ listRevisionHistory: function(noteId) {
websocketEvents.sendNewEvent({
op: 'LIST_REVISION_HISTORY',
data: {
- noteId: noteId
- }
- })
+ noteId: noteId,
+ },
+ });
},
- getNoteByRevision: function (noteId, revisionId) {
+ getNoteByRevision: function(noteId, revisionId) {
websocketEvents.sendNewEvent({
op: 'NOTE_REVISION',
data: {
noteId: noteId,
- revisionId: revisionId
- }
- })
+ revisionId: revisionId,
+ },
+ });
},
- getNoteByRevisionForCompare: function (noteId, revisionId, position) {
+ getNoteByRevisionForCompare: function(noteId, revisionId, position) {
websocketEvents.sendNewEvent({
op: 'NOTE_REVISION_FOR_COMPARE',
data: {
noteId: noteId,
revisionId: revisionId,
- position: position
- }
- })
+ position: position,
+ },
+ });
},
- getEditorSetting: function (paragraphId, replName) {
+ getEditorSetting: function(paragraphId, replName) {
websocketEvents.sendNewEvent({
op: 'EDITOR_SETTING',
data: {
paragraphId: paragraphId,
- magic: replName
- }
- })
+ magic: replName,
+ },
+ });
},
- isConnected: function () {
- return websocketEvents.isConnected()
+ isConnected: function() {
+ return websocketEvents.isConnected();
},
- getJobs: function () {
- websocketEvents.sendNewEvent({op: 'LIST_NOTE_JOBS'})
+ getJobs: function() {
+ websocketEvents.sendNewEvent({op: 'LIST_NOTE_JOBS'});
},
- disconnectJobEvent: function () {
- websocketEvents.sendNewEvent({op: 'UNSUBSCRIBE_UPDATE_NOTE_JOBS'})
+ disconnectJobEvent: function() {
+ websocketEvents.sendNewEvent({op: 'UNSUBSCRIBE_UPDATE_NOTE_JOBS'});
},
- getUpdateNoteJobsList: function (lastUpdateServerUnixTime) {
+ getUpdateNoteJobsList: function(lastUpdateServerUnixTime) {
websocketEvents.sendNewEvent(
{op: 'LIST_UPDATE_NOTE_JOBS', data: {lastUpdateUnixTime: lastUpdateServerUnixTime * 1}}
- )
+ );
},
- getInterpreterBindings: function (noteId) {
- websocketEvents.sendNewEvent({op: 'GET_INTERPRETER_BINDINGS', data: {noteId: noteId}})
+ getInterpreterBindings: function(noteId) {
+ websocketEvents.sendNewEvent({op: 'GET_INTERPRETER_BINDINGS', data: {noteId: noteId}});
},
- saveInterpreterBindings: function (noteId, selectedSettingIds) {
+ saveInterpreterBindings: function(noteId, selectedSettingIds) {
websocketEvents.sendNewEvent({op: 'SAVE_INTERPRETER_BINDINGS',
- data: {noteId: noteId, selectedSettingIds: selectedSettingIds}})
+ data: {noteId: noteId, selectedSettingIds: selectedSettingIds}});
},
- listConfigurations: function () {
- websocketEvents.sendNewEvent({op: 'LIST_CONFIGURATIONS'})
+ listConfigurations: function() {
+ websocketEvents.sendNewEvent({op: 'LIST_CONFIGURATIONS'});
},
- getInterpreterSettings: function () {
- websocketEvents.sendNewEvent({op: 'GET_INTERPRETER_SETTINGS'})
+ getInterpreterSettings: function() {
+ websocketEvents.sendNewEvent({op: 'GET_INTERPRETER_SETTINGS'});
},
- saveNoteForms: function (note) {
+ saveNoteForms: function(note) {
websocketEvents.sendNewEvent({op: 'SAVE_NOTE_FORMS',
data: {
noteId: note.id,
- noteParams: note.noteParams
- }
- })
+ noteParams: note.noteParams,
+ },
+ });
},
- removeNoteForms: function (note, formName) {
+ removeNoteForms: function(note, formName) {
websocketEvents.sendNewEvent({op: 'REMOVE_NOTE_FORMS',
data: {
noteId: note.id,
- formName: formName
- }
- })
- }
+ formName: formName,
+ },
+ });
+ },
- }
+ };
}
[07/12] zeppelin git commit: [ZEPPELIN-3245] checkstyle/eslintrc for
zeppelin-web (JavaScript)
Posted by pr...@apache.org.
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.test.js b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.test.js
index 94230de..38d5480 100644
--- a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.test.js
+++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.test.js
@@ -1,53 +1,53 @@
-describe('Controller: ParagraphCtrl', function () {
- beforeEach(angular.mock.module('zeppelinWebApp'))
+describe('Controller: ParagraphCtrl', function() {
+ beforeEach(angular.mock.module('zeppelinWebApp'));
- let scope
- let websocketMsgSrvMock = {}
+ let scope;
+ let websocketMsgSrvMock = {};
let paragraphMock = {
config: {},
settings: {
- forms: {}
- }
- }
+ forms: {},
+ },
+ };
let route = {
current: {
pathParams: {
- noteId: 'noteId'
- }
- }
- }
+ noteId: 'noteId',
+ },
+ },
+ };
- beforeEach(inject(function ($controller, $rootScope) {
- scope = $rootScope.$new()
- $rootScope.notebookScope = $rootScope.$new(true, $rootScope)
+ beforeEach(inject(function($controller, $rootScope) {
+ scope = $rootScope.$new();
+ $rootScope.notebookScope = $rootScope.$new(true, $rootScope);
$controller('ParagraphCtrl', {
$scope: scope,
websocketMsgSrv: websocketMsgSrvMock,
$element: {},
- $route: route
- })
+ $route: route,
+ });
- scope.init(paragraphMock)
- }))
+ scope.init(paragraphMock);
+ }));
let functions = ['isRunning', 'getIframeDimensions', 'cancelParagraph', 'runParagraph', 'saveParagraph',
'moveUp', 'moveDown', 'insertNew', 'removeParagraph', 'toggleEditor', 'closeEditor', 'openEditor',
'closeTable', 'openTable', 'showTitle', 'hideTitle', 'setTitle', 'showLineNumbers', 'hideLineNumbers',
'changeColWidth', 'columnWidthClass', 'toggleOutput',
- 'aceChanged', 'aceLoaded', 'getEditorValue', 'getProgress', 'getExecutionTime', 'isResultOutdated']
-
- functions.forEach(function (fn) {
- it('check for scope functions to be defined : ' + fn, function () {
- expect(scope[fn]).toBeDefined()
- })
- })
-
- it('should have this array of values for "colWidthOption"', function () {
- expect(scope.colWidthOption).toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
- })
-
- it('should set default value of "paragraphFocused" as false', function () {
- expect(scope.paragraphFocused).toEqual(false)
- })
-})
+ 'aceChanged', 'aceLoaded', 'getEditorValue', 'getProgress', 'getExecutionTime', 'isResultOutdated'];
+
+ functions.forEach(function(fn) {
+ it('check for scope functions to be defined : ' + fn, function() {
+ expect(scope[fn]).toBeDefined();
+ });
+ });
+
+ it('should have this array of values for "colWidthOption"', function() {
+ expect(scope.colWidthOption).toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]);
+ });
+
+ it('should set default value of "paragraphFocused" as false', function() {
+ expect(scope.paragraphFocused).toEqual(false);
+ });
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/paragraph/paragraph.status.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.status.js b/zeppelin-web/src/app/notebook/paragraph/paragraph.status.js
index f839eee..bd70de3 100644
--- a/zeppelin-web/src/app/notebook/paragraph/paragraph.status.js
+++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.status.js
@@ -19,12 +19,16 @@ export const ParagraphStatus = {
FINISHED: 'FINISHED',
ABORT: 'ABORT',
ERROR: 'ERROR',
-}
+};
-export function isParagraphRunning (paragraph) {
- if (!paragraph) { return false }
- const status = paragraph.status
- if (!status) { return false }
+export function isParagraphRunning(paragraph) {
+ if (!paragraph) {
+ return false;
+ }
+ const status = paragraph.status;
+ if (!status) {
+ return false;
+ }
- return status === ParagraphStatus.PENDING || status === ParagraphStatus.RUNNING
+ return status === ParagraphStatus.PENDING || status === ParagraphStatus.RUNNING;
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/paragraph/resizable.directive.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/paragraph/resizable.directive.js b/zeppelin-web/src/app/notebook/paragraph/resizable.directive.js
index 2893cd5..874f9d8 100644
--- a/zeppelin-web/src/app/notebook/paragraph/resizable.directive.js
+++ b/zeppelin-web/src/app/notebook/paragraph/resizable.directive.js
@@ -12,58 +12,58 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').directive('resizable', ResizableDirective)
+angular.module('zeppelinWebApp').directive('resizable', ResizableDirective);
-function ResizableDirective () {
+function ResizableDirective() {
let resizableConfig = {
autoHide: true,
handles: 'se',
helper: 'resizable-helper',
- stop: function () {
- angular.element(this).css({'width': '100%', 'height': '100%'})
- }
- }
+ stop: function() {
+ angular.element(this).css({'width': '100%', 'height': '100%'});
+ },
+ };
return {
restrict: 'A',
scope: {
- callback: '&onResize'
+ callback: '&onResize',
},
- link: function postLink (scope, elem, attrs) {
- attrs.$observe('resize', function (resize) {
- let resetResize = function (elem, resize) {
- let colStep = window.innerWidth / 12
- elem.off('resizestop')
- let conf = angular.copy(resizableConfig)
+ link: function postLink(scope, elem, attrs) {
+ attrs.$observe('resize', function(resize) {
+ let resetResize = function(elem, resize) {
+ let colStep = window.innerWidth / 12;
+ elem.off('resizestop');
+ let conf = angular.copy(resizableConfig);
if (resize.graphType === 'TABLE' || resize.graphType === 'NETWORK' || resize.graphType === 'TEXT') {
- conf.grid = [colStep, 10]
- conf.minHeight = 100
+ conf.grid = [colStep, 10];
+ conf.minHeight = 100;
} else {
- conf.grid = [colStep, 10000]
- conf.minHeight = 0
+ conf.grid = [colStep, 10000];
+ conf.minHeight = 0;
}
- conf.maxWidth = window.innerWidth
+ conf.maxWidth = window.innerWidth;
- elem.resizable(conf)
- elem.on('resizestop', function () {
+ elem.resizable(conf);
+ elem.on('resizestop', function() {
if (scope.callback) {
- let height = elem.height()
+ let height = elem.height();
if (height < 50) {
- height = 300
+ height = 300;
}
- scope.callback({width: Math.ceil(elem.width() / colStep), height: height})
+ scope.callback({width: Math.ceil(elem.width() / colStep), height: height});
}
- })
- }
+ });
+ };
- resize = JSON.parse(resize)
+ resize = JSON.parse(resize);
if (resize.allowresize === 'true') {
- resetResize(elem, resize)
- angular.element(window).resize(function () {
- resetResize(elem, resize)
- })
+ resetResize(elem, resize);
+ angular.element(window).resize(function() {
+ resetResize(elem, resize);
+ });
}
- })
- }
- }
+ });
+ },
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/paragraph/result/result.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/paragraph/result/result.controller.js b/zeppelin-web/src/app/notebook/paragraph/result/result.controller.js
index 5dfe314..5bf77dc 100644
--- a/zeppelin-web/src/app/notebook/paragraph/result/result.controller.js
+++ b/zeppelin-web/src/app/notebook/paragraph/result/result.controller.js
@@ -12,30 +12,30 @@
* limitations under the License.
*/
-import moment from 'moment'
-
-import DatasetFactory from '../../../tabledata/datasetfactory'
-import TableVisualization from '../../../visualization/builtins/visualization-table'
-import BarchartVisualization from '../../../visualization/builtins/visualization-barchart'
-import PiechartVisualization from '../../../visualization/builtins/visualization-piechart'
-import AreachartVisualization from '../../../visualization/builtins/visualization-areachart'
-import LinechartVisualization from '../../../visualization/builtins/visualization-linechart'
-import ScatterchartVisualization from '../../../visualization/builtins/visualization-scatterchart'
-import NetworkVisualization from '../../../visualization/builtins/visualization-d3network'
-import {DefaultDisplayType, SpellResult} from '../../../spell'
-import {ParagraphStatus} from '../paragraph.status'
-
-const AnsiUp = require('ansi_up')
-const AnsiUpConverter = new AnsiUp.default // eslint-disable-line new-parens,new-cap
-const TableGridFilterTemplate = require('../../../visualization/builtins/visualization-table-grid-filter.html')
-
-angular.module('zeppelinWebApp').controller('ResultCtrl', ResultCtrl)
-
-function ResultCtrl ($scope, $rootScope, $route, $window, $routeParams, $location,
+import moment from 'moment';
+
+import DatasetFactory from '../../../tabledata/datasetfactory';
+import TableVisualization from '../../../visualization/builtins/visualization-table';
+import BarchartVisualization from '../../../visualization/builtins/visualization-barchart';
+import PiechartVisualization from '../../../visualization/builtins/visualization-piechart';
+import AreachartVisualization from '../../../visualization/builtins/visualization-areachart';
+import LinechartVisualization from '../../../visualization/builtins/visualization-linechart';
+import ScatterchartVisualization from '../../../visualization/builtins/visualization-scatterchart';
+import NetworkVisualization from '../../../visualization/builtins/visualization-d3network';
+import {DefaultDisplayType, SpellResult} from '../../../spell';
+import {ParagraphStatus} from '../paragraph.status';
+
+const AnsiUp = require('ansi_up');
+const AnsiUpConverter = new AnsiUp.default; // eslint-disable-line new-parens,new-cap
+const TableGridFilterTemplate = require('../../../visualization/builtins/visualization-table-grid-filter.html');
+
+angular.module('zeppelinWebApp').controller('ResultCtrl', ResultCtrl);
+
+function ResultCtrl($scope, $rootScope, $route, $window, $routeParams, $location,
$timeout, $compile, $http, $q, $templateCache, $templateRequest, $sce, websocketMsgSrv,
baseUrlSrv, ngToast, saveAsService, noteVarShareService, heliumService,
uiGridConstants) {
- 'ngInject'
+ 'ngInject';
/**
* Built-in visualizations
@@ -45,49 +45,49 @@ function ResultCtrl ($scope, $rootScope, $route, $window, $routeParams, $locatio
id: 'table', // paragraph.config.graph.mode
name: 'Table', // human readable name. tooltip
icon: '<i class="fa fa-table"></i>',
- supports: [DefaultDisplayType.TABLE, DefaultDisplayType.NETWORK]
+ supports: [DefaultDisplayType.TABLE, DefaultDisplayType.NETWORK],
},
{
id: 'multiBarChart',
name: 'Bar Chart',
icon: '<i class="fa fa-bar-chart"></i>',
transformation: 'pivot',
- supports: [DefaultDisplayType.TABLE, DefaultDisplayType.NETWORK]
+ supports: [DefaultDisplayType.TABLE, DefaultDisplayType.NETWORK],
},
{
id: 'pieChart',
name: 'Pie Chart',
icon: '<i class="fa fa-pie-chart"></i>',
transformation: 'pivot',
- supports: [DefaultDisplayType.TABLE, DefaultDisplayType.NETWORK]
+ supports: [DefaultDisplayType.TABLE, DefaultDisplayType.NETWORK],
},
{
id: 'stackedAreaChart',
name: 'Area Chart',
icon: '<i class="fa fa-area-chart"></i>',
transformation: 'pivot',
- supports: [DefaultDisplayType.TABLE, DefaultDisplayType.NETWORK]
+ supports: [DefaultDisplayType.TABLE, DefaultDisplayType.NETWORK],
},
{
id: 'lineChart',
name: 'Line Chart',
icon: '<i class="fa fa-line-chart"></i>',
transformation: 'pivot',
- supports: [DefaultDisplayType.TABLE, DefaultDisplayType.NETWORK]
+ supports: [DefaultDisplayType.TABLE, DefaultDisplayType.NETWORK],
},
{
id: 'scatterChart',
name: 'Scatter Chart',
icon: '<i class="cf cf-scatter-chart"></i>',
- supports: [DefaultDisplayType.TABLE, DefaultDisplayType.NETWORK]
+ supports: [DefaultDisplayType.TABLE, DefaultDisplayType.NETWORK],
},
{
id: 'network',
name: 'Network',
icon: '<i class="fa fa-share-alt"></i>',
- supports: [DefaultDisplayType.NETWORK]
- }
- ]
+ supports: [DefaultDisplayType.NETWORK],
+ },
+ ];
/**
* Holds class and actual runtime instance and related infos of built-in visualizations
@@ -95,137 +95,143 @@ function ResultCtrl ($scope, $rootScope, $route, $window, $routeParams, $locatio
let builtInVisualizations = {
'table': {
class: TableVisualization,
- instance: undefined // created from setGraphMode()
+ instance: undefined, // created from setGraphMode()
},
'multiBarChart': {
class: BarchartVisualization,
- instance: undefined
+ instance: undefined,
},
'pieChart': {
class: PiechartVisualization,
- instance: undefined
+ instance: undefined,
},
'stackedAreaChart': {
class: AreachartVisualization,
- instance: undefined
+ instance: undefined,
},
'lineChart': {
class: LinechartVisualization,
- instance: undefined
+ instance: undefined,
},
'scatterChart': {
class: ScatterchartVisualization,
- instance: undefined
+ instance: undefined,
},
'network': {
class: NetworkVisualization,
- instance: undefined
- }
- }
+ instance: undefined,
+ },
+ };
// type
- $scope.type = null
+ $scope.type = null;
// Data of the result
- let data
+ let data;
// config
- $scope.config = null
+ $scope.config = null;
// resultId = paragraph.id + index
- $scope.id = null
+ $scope.id = null;
// referece to paragraph
- let paragraph
+ let paragraph;
// index of the result
- let resultIndex
+ let resultIndex;
// TableData instance
- let tableData
+ let tableData;
// available columns in tabledata
- $scope.tableDataColumns = []
+ $scope.tableDataColumns = [];
// enable helium
- let enableHelium = false
+ let enableHelium = false;
// graphMode
- $scope.graphMode = null
+ $scope.graphMode = null;
// image data
- $scope.imageData = null
+ $scope.imageData = null;
// queue for append output
- const textResultQueueForAppend = []
+ const textResultQueueForAppend = [];
// prevent body area scrollbar from blocking due to scroll in paragraph results
- $scope.mouseOver = false
- $scope.onMouseOver = function() { $scope.mouseOver = true }
- $scope.onMouseOut = function() { $scope.mouseOver = false }
+ $scope.mouseOver = false;
+ $scope.onMouseOver = function() {
+ $scope.mouseOver = true;
+ };
+ $scope.onMouseOut = function() {
+ $scope.mouseOver = false;
+ };
$scope.getPointerEvent = function() {
- return ($scope.mouseOver) ? {'pointer-events': 'auto' }
- : {'pointer-events': 'none' }
- }
+ return ($scope.mouseOver) ? {'pointer-events': 'auto'}
+ : {'pointer-events': 'none'};
+ };
- $scope.init = function (result, config, paragraph, index) {
+ $scope.init = function(result, config, paragraph, index) {
// register helium plugin vis packages
- let visPackages = heliumService.getVisualizationCachedPackages()
- const visPackageOrder = heliumService.getVisualizationCachedPackageOrder()
+ let visPackages = heliumService.getVisualizationCachedPackages();
+ const visPackageOrder = heliumService.getVisualizationCachedPackageOrder();
// push the helium vis packages following the order
- visPackageOrder.map(visName => {
- visPackages.map(vis => {
- if (vis.name !== visName) { return }
+ visPackageOrder.map((visName) => {
+ visPackages.map((vis) => {
+ if (vis.name !== visName) {
+ return;
+ }
$scope.builtInTableDataVisualizationList.push({
id: vis.id,
name: vis.name,
icon: $sce.trustAsHtml(vis.icon),
- supports: [DefaultDisplayType.TABLE, DefaultDisplayType.NETWORK]
- })
+ supports: [DefaultDisplayType.TABLE, DefaultDisplayType.NETWORK],
+ });
builtInVisualizations[vis.id] = {
- class: vis.class
- }
- })
- })
-
- updateData(result, config, paragraph, index)
- renderResult($scope.type)
- }
-
- function isDOMLoaded (targetElemId) {
- const elem = angular.element(`#${targetElemId}`)
- return elem.length
+ class: vis.class,
+ };
+ });
+ });
+
+ updateData(result, config, paragraph, index);
+ renderResult($scope.type);
+ };
+
+ function isDOMLoaded(targetElemId) {
+ const elem = angular.element(`#${targetElemId}`);
+ return elem.length;
}
- function retryUntilElemIsLoaded (targetElemId, callback) {
- function retry () {
+ function retryUntilElemIsLoaded(targetElemId, callback) {
+ function retry() {
if (!isDOMLoaded(targetElemId)) {
- $timeout(retry, 10)
- return
+ $timeout(retry, 10);
+ return;
}
- const elem = angular.element(`#${targetElemId}`)
- callback(elem)
+ const elem = angular.element(`#${targetElemId}`);
+ callback(elem);
}
- $timeout(retry)
+ $timeout(retry);
}
- $scope.$on('updateResult', function (event, result, newConfig, paragraphRef, index) {
+ $scope.$on('updateResult', function(event, result, newConfig, paragraphRef, index) {
if (paragraph.id !== paragraphRef.id || index !== resultIndex) {
- return
+ return;
}
let refresh = !angular.equals(newConfig, $scope.config) ||
!angular.equals(result.type, $scope.type) ||
- !angular.equals(result.data, data)
+ !angular.equals(result.data, data);
- updateData(result, newConfig, paragraph, resultIndex)
- renderResult($scope.type, refresh)
- })
+ updateData(result, newConfig, paragraph, resultIndex);
+ renderResult($scope.type, refresh);
+ });
- $scope.$on('appendParagraphOutput', function (event, data) {
+ $scope.$on('appendParagraphOutput', function(event, data) {
/* It has been observed that append events
* can be errorneously called even if paragraph
* execution has ended, and in that case, no append
@@ -238,162 +244,162 @@ function ResultCtrl ($scope, $rootScope, $route, $window, $routeParams, $locatio
resultIndex === data.index &&
(paragraph.status === ParagraphStatus.PENDING || paragraph.status === ParagraphStatus.RUNNING)) {
if (DefaultDisplayType.TEXT !== $scope.type) {
- $scope.type = DefaultDisplayType.TEXT
+ $scope.type = DefaultDisplayType.TEXT;
}
- appendTextOutput(data.data)
+ appendTextOutput(data.data);
}
- })
+ });
- const updateData = function (result, config, paragraphRef, index) {
- data = result.data
- paragraph = paragraphRef
- resultIndex = parseInt(index)
+ const updateData = function(result, config, paragraphRef, index) {
+ data = result.data;
+ paragraph = paragraphRef;
+ resultIndex = parseInt(index);
- $scope.id = paragraph.id + '_' + index
- $scope.type = result.type
- config = config ? config : {}
+ $scope.id = paragraph.id + '_' + index;
+ $scope.type = result.type;
+ config = config ? config : {};
// initialize default config values
if (!config.graph) {
- config.graph = {}
+ config.graph = {};
}
if (!config.graph.mode) {
- config.graph.mode = 'table'
+ config.graph.mode = 'table';
}
if (!config.graph.height) {
- config.graph.height = 300
+ config.graph.height = 300;
}
if (!config.graph.optionOpen) {
- config.graph.optionOpen = false
+ config.graph.optionOpen = false;
}
- $scope.graphMode = config.graph.mode
- $scope.config = angular.copy(config)
+ $scope.graphMode = config.graph.mode;
+ $scope.config = angular.copy(config);
// enable only when it is last result
- enableHelium = (index === paragraphRef.results.msg.length - 1)
+ enableHelium = (index === paragraphRef.results.msg.length - 1);
if ($scope.type === 'TABLE' || $scope.type === 'NETWORK') {
- tableData = new DatasetFactory().createDataset($scope.type)
- tableData.loadParagraphResult({type: $scope.type, msg: data})
- $scope.tableDataColumns = tableData.columns
- $scope.tableDataComment = tableData.comment
+ tableData = new DatasetFactory().createDataset($scope.type);
+ tableData.loadParagraphResult({type: $scope.type, msg: data});
+ $scope.tableDataColumns = tableData.columns;
+ $scope.tableDataComment = tableData.comment;
if ($scope.type === 'NETWORK') {
- $scope.networkNodes = tableData.networkNodes
- $scope.networkRelationships = tableData.networkRelationships
- $scope.networkProperties = tableData.networkProperties
+ $scope.networkNodes = tableData.networkNodes;
+ $scope.networkRelationships = tableData.networkRelationships;
+ $scope.networkProperties = tableData.networkProperties;
}
} else if ($scope.type === 'IMG') {
- $scope.imageData = data
+ $scope.imageData = data;
}
- }
+ };
- $scope.createDisplayDOMId = function (baseDOMId, type) {
+ $scope.createDisplayDOMId = function(baseDOMId, type) {
if (type === DefaultDisplayType.TABLE || type === DefaultDisplayType.NETWORK) {
- return `${baseDOMId}_graph`
+ return `${baseDOMId}_graph`;
} else if (type === DefaultDisplayType.HTML) {
- return `${baseDOMId}_html`
+ return `${baseDOMId}_html`;
} else if (type === DefaultDisplayType.ANGULAR) {
- return `${baseDOMId}_angular`
+ return `${baseDOMId}_angular`;
} else if (type === DefaultDisplayType.TEXT) {
- return `${baseDOMId}_text`
+ return `${baseDOMId}_text`;
} else if (type === DefaultDisplayType.ELEMENT) {
- return `${baseDOMId}_elem`
+ return `${baseDOMId}_elem`;
} else {
- console.error(`Cannot create display DOM Id due to unknown display type: ${type}`)
+ console.error(`Cannot create display DOM Id due to unknown display type: ${type}`);
}
- }
+ };
- $scope.renderDefaultDisplay = function (targetElemId, type, data, refresh) {
+ $scope.renderDefaultDisplay = function(targetElemId, type, data, refresh) {
const afterLoaded = () => {
if (type === DefaultDisplayType.TABLE || type === DefaultDisplayType.NETWORK) {
- renderGraph(targetElemId, $scope.graphMode, refresh)
+ renderGraph(targetElemId, $scope.graphMode, refresh);
} else if (type === DefaultDisplayType.HTML) {
- renderHtml(targetElemId, data)
+ renderHtml(targetElemId, data);
} else if (type === DefaultDisplayType.ANGULAR) {
- renderAngular(targetElemId, data)
+ renderAngular(targetElemId, data);
} else if (type === DefaultDisplayType.TEXT) {
- renderText(targetElemId, data, refresh)
+ renderText(targetElemId, data, refresh);
} else if (type === DefaultDisplayType.ELEMENT) {
- renderElem(targetElemId, data)
+ renderElem(targetElemId, data);
} else {
- console.error(`Unknown Display Type: ${type}`)
+ console.error(`Unknown Display Type: ${type}`);
}
- }
+ };
- retryUntilElemIsLoaded(targetElemId, afterLoaded)
+ retryUntilElemIsLoaded(targetElemId, afterLoaded);
// send message to parent that this result is rendered
- const paragraphId = $scope.$parent.paragraph.id
- $scope.$emit('resultRendered', paragraphId)
- }
+ const paragraphId = $scope.$parent.paragraph.id;
+ $scope.$emit('resultRendered', paragraphId);
+ };
- const renderResult = function (type, refresh) {
- let activeApp
+ const renderResult = function(type, refresh) {
+ let activeApp;
if (enableHelium) {
- getSuggestions()
- getApplicationStates()
- activeApp = _.get($scope.config, 'helium.activeApp')
+ getSuggestions();
+ getApplicationStates();
+ activeApp = _.get($scope.config, 'helium.activeApp');
}
if (activeApp) {
- const appState = _.find($scope.apps, {id: activeApp})
- renderApp(`p${appState.id}`, appState)
+ const appState = _.find($scope.apps, {id: activeApp});
+ renderApp(`p${appState.id}`, appState);
} else {
if (!DefaultDisplayType[type]) {
- $scope.renderCustomDisplay(type, data)
+ $scope.renderCustomDisplay(type, data);
} else {
- const targetElemId = $scope.createDisplayDOMId(`p${$scope.id}`, type)
- $scope.renderDefaultDisplay(targetElemId, type, data, refresh)
+ const targetElemId = $scope.createDisplayDOMId(`p${$scope.id}`, type);
+ $scope.renderDefaultDisplay(targetElemId, type, data, refresh);
}
}
- }
+ };
- $scope.isDefaultDisplay = function () {
- return DefaultDisplayType[$scope.type]
- }
+ $scope.isDefaultDisplay = function() {
+ return DefaultDisplayType[$scope.type];
+ };
/**
* Render multiple sub results for custom display
*/
- $scope.renderCustomDisplay = function (type, data) {
+ $scope.renderCustomDisplay = function(type, data) {
// get result from intp
if (!heliumService.getSpellByMagic(type)) {
- console.error(`Can't execute spell due to unknown display type: ${type}`)
- return
+ console.error(`Can't execute spell due to unknown display type: ${type}`);
+ return;
}
// custom display result can include multiple subset results
heliumService.executeSpellAsDisplaySystem(type, data)
- .then(dataWithTypes => {
- const containerDOMId = `p${$scope.id}_custom`
+ .then((dataWithTypes) => {
+ const containerDOMId = `p${$scope.id}_custom`;
const afterLoaded = () => {
- const containerDOM = angular.element(`#${containerDOMId}`)
+ const containerDOM = angular.element(`#${containerDOMId}`);
// Spell.interpret() can create multiple outputs
for (let i = 0; i < dataWithTypes.length; i++) {
- const dt = dataWithTypes[i]
- const data = dt.data
- const type = dt.type
+ const dt = dataWithTypes[i];
+ const data = dt.data;
+ const type = dt.type;
// prepare each DOM to be filled
- const subResultDOMId = $scope.createDisplayDOMId(`p${$scope.id}_custom_${i}`, type)
- const subResultDOM = document.createElement('div')
- containerDOM.append(subResultDOM)
- subResultDOM.setAttribute('id', subResultDOMId)
+ const subResultDOMId = $scope.createDisplayDOMId(`p${$scope.id}_custom_${i}`, type);
+ const subResultDOM = document.createElement('div');
+ containerDOM.append(subResultDOM);
+ subResultDOM.setAttribute('id', subResultDOMId);
- $scope.renderDefaultDisplay(subResultDOMId, type, data, true)
+ $scope.renderDefaultDisplay(subResultDOMId, type, data, true);
}
- }
+ };
- retryUntilElemIsLoaded(containerDOMId, afterLoaded)
- })
- .catch(error => {
- console.error(`Failed to render custom display: ${$scope.type}\n` + error)
+ retryUntilElemIsLoaded(containerDOMId, afterLoaded);
})
- }
+ .catch((error) => {
+ console.error(`Failed to render custom display: ${$scope.type}\n` + error);
+ });
+ };
/**
* generates actually object which will be consumed from `data` property
@@ -405,688 +411,710 @@ function ResultCtrl ($scope, $rootScope, $route, $window, $routeParams, $locatio
* @param successCallback
* @param failureCallback
*/
- const handleData = function (data, type, successCallback, failureCallback) {
+ const handleData = function(data, type, successCallback, failureCallback) {
if (SpellResult.isFunction(data)) {
try {
- successCallback(data())
+ successCallback(data());
} catch (error) {
- failureCallback(error)
- console.error(`Failed to handle ${type} type, function data\n`, error)
+ failureCallback(error);
+ console.error(`Failed to handle ${type} type, function data\n`, error);
}
} else if (SpellResult.isObject(data)) {
try {
- successCallback(data)
+ successCallback(data);
} catch (error) {
- console.error(`Failed to handle ${type} type, object data\n`, error)
+ console.error(`Failed to handle ${type} type, object data\n`, error);
}
}
- }
+ };
- const renderElem = function (targetElemId, data) {
- const elem = angular.element(`#${targetElemId}`)
- handleData(() => { data(targetElemId) }, DefaultDisplayType.ELEMENT,
+ const renderElem = function(targetElemId, data) {
+ const elem = angular.element(`#${targetElemId}`);
+ handleData(() => {
+ data(targetElemId);
+ }, DefaultDisplayType.ELEMENT,
() => {}, /** HTML element will be filled with data. thus pass empty success callback */
- (error) => { elem.html(`${error.stack}`) }
- )
- }
+ (error) => {
+ elem.html(`${error.stack}`);
+ }
+ );
+ };
- const renderHtml = function (targetElemId, data) {
- const elem = angular.element(`#${targetElemId}`)
+ const renderHtml = function(targetElemId, data) {
+ const elem = angular.element(`#${targetElemId}`);
handleData(data, DefaultDisplayType.HTML,
(generated) => {
- elem.html(generated)
- elem.find('pre code').each(function (i, e) {
- hljs.highlightBlock(e)
- })
+ elem.html(generated);
+ elem.find('pre code').each(function(i, e) {
+ hljs.highlightBlock(e);
+ });
/* eslint new-cap: [2, {"capIsNewExceptions": ["MathJax.Hub.Queue"]}] */
- MathJax.Hub.Queue(['Typeset', MathJax.Hub, elem[0]])
+ MathJax.Hub.Queue(['Typeset', MathJax.Hub, elem[0]]);
},
- (error) => { elem.html(`${error.stack}`) }
- )
- }
+ (error) => {
+ elem.html(`${error.stack}`);
+ }
+ );
+ };
- const renderAngular = function (targetElemId, data) {
- const elem = angular.element(`#${targetElemId}`)
- const paragraphScope = noteVarShareService.get(`${paragraph.id}_paragraphScope`)
+ const renderAngular = function(targetElemId, data) {
+ const elem = angular.element(`#${targetElemId}`);
+ const paragraphScope = noteVarShareService.get(`${paragraph.id}_paragraphScope`);
handleData(data, DefaultDisplayType.ANGULAR,
(generated) => {
- elem.html(generated)
- $compile(elem.contents())(paragraphScope)
+ elem.html(generated);
+ $compile(elem.contents())(paragraphScope);
},
- (error) => { elem.html(`${error.stack}`) }
- )
- }
+ (error) => {
+ elem.html(`${error.stack}`);
+ }
+ );
+ };
- const getTextResultElemId = function (resultId) {
- return `p${resultId}_text`
- }
+ const getTextResultElemId = function(resultId) {
+ return `p${resultId}_text`;
+ };
- const checkAndReplaceCarriageReturn = function (str) {
+ const checkAndReplaceCarriageReturn = function(str) {
if (/\r/.test(str)) {
- let newGenerated = ''
- let strArr = str.split('\n')
+ let newGenerated = '';
+ let strArr = str.split('\n');
for (let str of strArr) {
if (/\r/.test(str)) {
- let splitCR = str.split('\r')
- newGenerated += splitCR[splitCR.length - 1] + '\n'
+ let splitCR = str.split('\r');
+ newGenerated += splitCR[splitCR.length - 1] + '\n';
} else {
- newGenerated += str + '\n'
+ newGenerated += str + '\n';
}
}
// remove last "\n" character
- return newGenerated.slice(0, -1)
+ return newGenerated.slice(0, -1);
} else {
- return str
+ return str;
}
- }
+ };
- const renderText = function (targetElemId, data, refresh) {
- const elem = angular.element(`#${targetElemId}`)
+ const renderText = function(targetElemId, data, refresh) {
+ const elem = angular.element(`#${targetElemId}`);
handleData(data, DefaultDisplayType.TEXT,
(generated) => {
// clear all lines before render
- removeChildrenDOM(targetElemId)
+ removeChildrenDOM(targetElemId);
if (generated) {
- generated = checkAndReplaceCarriageReturn(generated)
- const escaped = AnsiUpConverter.ansi_to_html(generated)
- const divDOM = angular.element('<div></div>').innerHTML = escaped
+ generated = checkAndReplaceCarriageReturn(generated);
+ const escaped = AnsiUpConverter.ansi_to_html(generated);
+ const divDOM = angular.element('<div></div>').innerHTML = escaped;
if (refresh) {
- elem.html(divDOM)
+ elem.html(divDOM);
} else {
- elem.append(divDOM)
+ elem.append(divDOM);
}
} else if (refresh) {
- elem.html('')
+ elem.html('');
}
- elem.bind('mousewheel', (e) => { $scope.keepScrollDown = false })
+ elem.bind('mousewheel', (e) => {
+ $scope.keepScrollDown = false;
+ });
},
- (error) => { elem.html(`${error.stack}`) }
- )
- }
+ (error) => {
+ elem.html(`${error.stack}`);
+ }
+ );
+ };
- const removeChildrenDOM = function (targetElemId) {
- const elem = angular.element(`#${targetElemId}`)
+ const removeChildrenDOM = function(targetElemId) {
+ const elem = angular.element(`#${targetElemId}`);
if (elem.length) {
- elem.children().remove()
+ elem.children().remove();
}
- }
+ };
- function appendTextOutput (data) {
- const elemId = getTextResultElemId($scope.id)
- textResultQueueForAppend.push(data)
+ function appendTextOutput(data) {
+ const elemId = getTextResultElemId($scope.id);
+ textResultQueueForAppend.push(data);
// if DOM is not loaded, just push data and return
if (!isDOMLoaded(elemId)) {
- return
+ return;
}
- const elem = angular.element(`#${elemId}`)
+ const elem = angular.element(`#${elemId}`);
// pop all stacked data and append to the DOM
while (textResultQueueForAppend.length > 0) {
- const line = elem.html() + AnsiUpConverter.ansi_to_html(textResultQueueForAppend.pop())
- elem.html(checkAndReplaceCarriageReturn(line))
+ const line = elem.html() + AnsiUpConverter.ansi_to_html(textResultQueueForAppend.pop());
+ elem.html(checkAndReplaceCarriageReturn(line));
if ($scope.keepScrollDown) {
- const doc = angular.element(`#${elemId}`)
- doc[0].scrollTop = doc[0].scrollHeight
+ const doc = angular.element(`#${elemId}`);
+ doc[0].scrollTop = doc[0].scrollHeight;
}
}
}
- const getTrSettingElem = function (scopeId, graphMode) {
- return angular.element('#trsetting' + scopeId + '_' + graphMode)
- }
+ const getTrSettingElem = function(scopeId, graphMode) {
+ return angular.element('#trsetting' + scopeId + '_' + graphMode);
+ };
- const getVizSettingElem = function (scopeId, graphMode) {
- return angular.element('#vizsetting' + scopeId + '_' + graphMode)
- }
+ const getVizSettingElem = function(scopeId, graphMode) {
+ return angular.element('#vizsetting' + scopeId + '_' + graphMode);
+ };
- const renderGraph = function (graphElemId, graphMode, refresh) {
+ const renderGraph = function(graphElemId, graphMode, refresh) {
// set graph height
- const height = $scope.config.graph.height
- const graphElem = angular.element(`#${graphElemId}`)
- graphElem.height(height)
+ const height = $scope.config.graph.height;
+ const graphElem = angular.element(`#${graphElemId}`);
+ graphElem.height(height);
- if (!graphMode) { graphMode = 'table' }
+ if (!graphMode) {
+ graphMode = 'table';
+ }
- let builtInViz = builtInVisualizations[graphMode]
+ let builtInViz = builtInVisualizations[graphMode];
if (!builtInViz) {
/** helium package is not available, fallback to table vis */
- graphMode = 'table'
- $scope.graphMode = graphMode /** html depends on this scope value */
- builtInViz = builtInVisualizations[graphMode]
+ graphMode = 'table';
+ $scope.graphMode = graphMode; /** html depends on this scope value */
+ builtInViz = builtInVisualizations[graphMode];
}
// deactive previsouly active visualization
for (let t in builtInVisualizations) {
- const v = builtInVisualizations[t].instance
+ if (builtInVisualizations.hasOwnProperty(t)) {
+ const v = builtInVisualizations[t].instance;
- if (t !== graphMode && v && v.isActive()) {
- v.deactivate()
- break
+ if (t !== graphMode && v && v.isActive()) {
+ v.deactivate();
+ break;
+ }
}
}
- let afterLoaded = function () { /** will be overwritten */ }
+ let afterLoaded = function() { /** will be overwritten */ };
if (!builtInViz.instance) { // not instantiated yet
// render when targetEl is available
- afterLoaded = function (loadedElem) {
+ afterLoaded = function(loadedElem) {
try {
- const transformationSettingTargetEl = getTrSettingElem($scope.id, graphMode)
- const visualizationSettingTargetEl = getVizSettingElem($scope.id, graphMode)
+ const transformationSettingTargetEl = getTrSettingElem($scope.id, graphMode);
+ const visualizationSettingTargetEl = getVizSettingElem($scope.id, graphMode);
// set height
- loadedElem.height(height)
+ loadedElem.height(height);
// instantiate visualization
- const config = getVizConfig(graphMode)
- const Visualization = builtInViz.class
- builtInViz.instance = new Visualization(loadedElem, config)
+ const config = getVizConfig(graphMode);
+ const Visualization = builtInViz.class;
+ builtInViz.instance = new Visualization(loadedElem, config);
// inject emitter, $templateRequest
- const emitter = function (graphSetting) {
- commitVizConfigChange(graphSetting, graphMode)
- }
- builtInViz.instance._emitter = emitter
- builtInViz.instance._compile = $compile
+ const emitter = function(graphSetting) {
+ commitVizConfigChange(graphSetting, graphMode);
+ };
+ builtInViz.instance._emitter = emitter;
+ builtInViz.instance._compile = $compile;
// ui-grid related
- $templateCache.put('ui-grid/ui-grid-filter', TableGridFilterTemplate)
- builtInViz.instance._uiGridConstants = uiGridConstants
- builtInViz.instance._timeout = $timeout
-
- builtInViz.instance._createNewScope = createNewScope
- builtInViz.instance._templateRequest = $templateRequest
- const transformation = builtInViz.instance.getTransformation()
- transformation._emitter = emitter
- transformation._templateRequest = $templateRequest
- transformation._compile = $compile
- transformation._createNewScope = createNewScope
+ $templateCache.put('ui-grid/ui-grid-filter', TableGridFilterTemplate);
+ builtInViz.instance._uiGridConstants = uiGridConstants;
+ builtInViz.instance._timeout = $timeout;
+
+ builtInViz.instance._createNewScope = createNewScope;
+ builtInViz.instance._templateRequest = $templateRequest;
+ const transformation = builtInViz.instance.getTransformation();
+ transformation._emitter = emitter;
+ transformation._templateRequest = $templateRequest;
+ transformation._compile = $compile;
+ transformation._createNewScope = createNewScope;
// render
- const transformed = transformation.transform(tableData)
- transformation.renderSetting(transformationSettingTargetEl)
- builtInViz.instance.render(transformed)
- builtInViz.instance.renderSetting(visualizationSettingTargetEl)
- builtInViz.instance.activate()
+ const transformed = transformation.transform(tableData);
+ transformation.renderSetting(transformationSettingTargetEl);
+ builtInViz.instance.render(transformed);
+ builtInViz.instance.renderSetting(visualizationSettingTargetEl);
+ builtInViz.instance.activate();
angular.element(window).resize(() => {
- builtInViz.instance.resize()
- })
+ builtInViz.instance.resize();
+ });
} catch (err) {
- console.error('Graph drawing error %o', err)
+ console.error('Graph drawing error %o', err);
}
- }
+ };
} else if (refresh) {
// when graph options or data are changed
- console.log('Refresh data %o', tableData)
-
- afterLoaded = function (loadedElem) {
- const transformationSettingTargetEl = getTrSettingElem($scope.id, graphMode)
- const visualizationSettingTargetEl = getVizSettingElem($scope.id, graphMode)
- const config = getVizConfig(graphMode)
- loadedElem.height(height)
- const transformation = builtInViz.instance.getTransformation()
- transformation.setConfig(config)
- const transformed = transformation.transform(tableData)
- transformation.renderSetting(transformationSettingTargetEl)
- builtInViz.instance.setConfig(config)
- builtInViz.instance.render(transformed)
- builtInViz.instance.renderSetting(visualizationSettingTargetEl)
- builtInViz.instance.activate()
- }
+ console.log('Refresh data %o', tableData);
+
+ afterLoaded = function(loadedElem) {
+ const transformationSettingTargetEl = getTrSettingElem($scope.id, graphMode);
+ const visualizationSettingTargetEl = getVizSettingElem($scope.id, graphMode);
+ const config = getVizConfig(graphMode);
+ loadedElem.height(height);
+ const transformation = builtInViz.instance.getTransformation();
+ transformation.setConfig(config);
+ const transformed = transformation.transform(tableData);
+ transformation.renderSetting(transformationSettingTargetEl);
+ builtInViz.instance.setConfig(config);
+ builtInViz.instance.render(transformed);
+ builtInViz.instance.renderSetting(visualizationSettingTargetEl);
+ builtInViz.instance.activate();
+ };
} else {
- afterLoaded = function (loadedElem) {
- loadedElem.height(height)
- builtInViz.instance.activate()
- }
+ afterLoaded = function(loadedElem) {
+ loadedElem.height(height);
+ builtInViz.instance.activate();
+ };
}
- const tableElemId = `p${$scope.id}_${graphMode}`
- retryUntilElemIsLoaded(tableElemId, afterLoaded)
- }
+ const tableElemId = `p${$scope.id}_${graphMode}`;
+ retryUntilElemIsLoaded(tableElemId, afterLoaded);
+ };
- $scope.switchViz = function (newMode) {
- let newConfig = angular.copy($scope.config)
- let newParams = angular.copy(paragraph.settings.params)
+ $scope.switchViz = function(newMode) {
+ let newConfig = angular.copy($scope.config);
+ let newParams = angular.copy(paragraph.settings.params);
// graph options
- newConfig.graph.mode = newMode
+ newConfig.graph.mode = newMode;
// see switchApp()
- _.set(newConfig, 'helium.activeApp', undefined)
+ _.set(newConfig, 'helium.activeApp', undefined);
- commitParagraphResult(paragraph.title, paragraph.text, newConfig, newParams)
- }
+ commitParagraphResult(paragraph.title, paragraph.text, newConfig, newParams);
+ };
- const createNewScope = function () {
- return $rootScope.$new(true)
- }
+ const createNewScope = function() {
+ return $rootScope.$new(true);
+ };
- const commitParagraphResult = function (title, text, config, params) {
- let newParagraphConfig = angular.copy(paragraph.config)
- newParagraphConfig.results = newParagraphConfig.results || []
- newParagraphConfig.results[resultIndex] = config
+ const commitParagraphResult = function(title, text, config, params) {
+ let newParagraphConfig = angular.copy(paragraph.config);
+ newParagraphConfig.results = newParagraphConfig.results || [];
+ newParagraphConfig.results[resultIndex] = config;
if ($scope.revisionView === true) {
// local update without commit
updateData({
type: $scope.type,
- data: data
- }, newParagraphConfig.results[resultIndex], paragraph, resultIndex)
- renderResult($scope.type, true)
+ data: data,
+ }, newParagraphConfig.results[resultIndex], paragraph, resultIndex);
+ renderResult($scope.type, true);
} else {
- return websocketMsgSrv.commitParagraph(paragraph.id, title, text, newParagraphConfig, params)
+ return websocketMsgSrv.commitParagraph(paragraph.id, title, text, newParagraphConfig, params);
}
- }
+ };
- $scope.toggleGraphSetting = function () {
- let newConfig = angular.copy($scope.config)
+ $scope.toggleGraphSetting = function() {
+ let newConfig = angular.copy($scope.config);
if (newConfig.graph.optionOpen) {
- newConfig.graph.optionOpen = false
+ newConfig.graph.optionOpen = false;
} else {
- newConfig.graph.optionOpen = true
+ newConfig.graph.optionOpen = true;
}
- let newParams = angular.copy(paragraph.settings.params)
- commitParagraphResult(paragraph.title, paragraph.text, newConfig, newParams)
- }
+ let newParams = angular.copy(paragraph.settings.params);
+ commitParagraphResult(paragraph.title, paragraph.text, newConfig, newParams);
+ };
- const getVizConfig = function (vizId) {
- let config
- let graph = $scope.config.graph
+ const getVizConfig = function(vizId) {
+ let config;
+ let graph = $scope.config.graph;
if (graph) {
// copy setting for vizId
if (graph.setting) {
- config = angular.copy(graph.setting[vizId])
+ config = angular.copy(graph.setting[vizId]);
}
if (!config) {
- config = {}
+ config = {};
}
// copy common setting
- config.common = angular.copy(graph.commonSetting) || {}
+ config.common = angular.copy(graph.commonSetting) || {};
// copy pivot setting
if (graph.keys) {
config.common.pivot = {
keys: angular.copy(graph.keys),
groups: angular.copy(graph.groups),
- values: angular.copy(graph.values)
- }
+ values: angular.copy(graph.values),
+ };
}
}
- console.debug('getVizConfig', config)
- return config
- }
+ console.debug('getVizConfig', config);
+ return config;
+ };
- const commitVizConfigChange = function (config, vizId) {
- let newConfig = angular.copy($scope.config)
+ const commitVizConfigChange = function(config, vizId) {
+ let newConfig = angular.copy($scope.config);
if (!newConfig.graph) {
- newConfig.graph = {}
+ newConfig.graph = {};
}
// copy setting for vizId
if (!newConfig.graph.setting) {
- newConfig.graph.setting = {}
+ newConfig.graph.setting = {};
}
- newConfig.graph.setting[vizId] = angular.copy(config)
+ newConfig.graph.setting[vizId] = angular.copy(config);
// copy common setting
if (newConfig.graph.setting[vizId]) {
- newConfig.graph.commonSetting = newConfig.graph.setting[vizId].common
- delete newConfig.graph.setting[vizId].common
+ newConfig.graph.commonSetting = newConfig.graph.setting[vizId].common;
+ delete newConfig.graph.setting[vizId].common;
}
// copy pivot setting
if (newConfig.graph.commonSetting && newConfig.graph.commonSetting.pivot) {
- newConfig.graph.keys = newConfig.graph.commonSetting.pivot.keys
- newConfig.graph.groups = newConfig.graph.commonSetting.pivot.groups
- newConfig.graph.values = newConfig.graph.commonSetting.pivot.values
- delete newConfig.graph.commonSetting.pivot
+ newConfig.graph.keys = newConfig.graph.commonSetting.pivot.keys;
+ newConfig.graph.groups = newConfig.graph.commonSetting.pivot.groups;
+ newConfig.graph.values = newConfig.graph.commonSetting.pivot.values;
+ delete newConfig.graph.commonSetting.pivot;
}
- console.debug('committVizConfig', newConfig)
- let newParams = angular.copy(paragraph.settings.params)
- commitParagraphResult(paragraph.title, paragraph.text, newConfig, newParams)
- }
+ console.debug('committVizConfig', newConfig);
+ let newParams = angular.copy(paragraph.settings.params);
+ commitParagraphResult(paragraph.title, paragraph.text, newConfig, newParams);
+ };
- $scope.$on('paragraphResized', function (event, paragraphId) {
+ $scope.$on('paragraphResized', function(event, paragraphId) {
// paragraph col width changed
if (paragraphId === paragraph.id) {
- let builtInViz = builtInVisualizations[$scope.graphMode]
+ let builtInViz = builtInVisualizations[$scope.graphMode];
if (builtInViz && builtInViz.instance) {
- $timeout(_ => builtInViz.instance.resize(), 200)
+ $timeout(() => builtInViz.instance.resize(), 200);
}
}
- })
+ });
- $scope.resize = function (width, height) {
- $timeout(function () {
- changeHeight(width, height)
- }, 200)
- }
+ $scope.resize = function(width, height) {
+ $timeout(function() {
+ changeHeight(width, height);
+ }, 200);
+ };
- const changeHeight = function (width, height) {
- let newParams = angular.copy(paragraph.settings.params)
- let newConfig = angular.copy($scope.config)
+ const changeHeight = function(width, height) {
+ let newParams = angular.copy(paragraph.settings.params);
+ let newConfig = angular.copy($scope.config);
- newConfig.graph.height = height
- paragraph.config.colWidth = width
+ newConfig.graph.height = height;
+ paragraph.config.colWidth = width;
- commitParagraphResult(paragraph.title, paragraph.text, newConfig, newParams)
- }
+ commitParagraphResult(paragraph.title, paragraph.text, newConfig, newParams);
+ };
- $scope.exportToDSV = function (delimiter) {
- let dsv = ''
- let dateFinished = moment(paragraph.dateFinished).format('YYYY-MM-DD hh:mm:ss A')
- let exportedFileName = paragraph.title ? paragraph.title + '_' + dateFinished : 'data_' + dateFinished
+ $scope.exportToDSV = function(delimiter) {
+ let dsv = '';
+ let dateFinished = moment(paragraph.dateFinished).format('YYYY-MM-DD hh:mm:ss A');
+ let exportedFileName = paragraph.title ? paragraph.title + '_' + dateFinished : 'data_' + dateFinished;
for (let titleIndex in tableData.columns) {
- dsv += tableData.columns[titleIndex].name + delimiter
+ if (tableData.columns.hasOwnProperty(titleIndex)) {
+ dsv += tableData.columns[titleIndex].name + delimiter;
+ }
}
- dsv = dsv.substring(0, dsv.length - 1) + '\n'
+ dsv = dsv.substring(0, dsv.length - 1) + '\n';
for (let r in tableData.rows) {
- let row = tableData.rows[r]
- let dsvRow = ''
- for (let index in row) {
- let stringValue = (row[index]).toString()
- if (stringValue.indexOf(delimiter) > -1) {
- dsvRow += '"' + stringValue + '"' + delimiter
- } else {
- dsvRow += row[index] + delimiter
+ if (tableData.rows.hasOwnProperty(r)) {
+ let row = tableData.rows[r];
+ let dsvRow = '';
+ for (let index in row) {
+ if (row.hasOwnProperty(index)) {
+ let stringValue = (row[index]).toString();
+ if (stringValue.indexOf(delimiter) > -1) {
+ dsvRow += '"' + stringValue + '"' + delimiter;
+ } else {
+ dsvRow += row[index] + delimiter;
+ }
+ }
}
+ dsv += dsvRow.substring(0, dsvRow.length - 1) + '\n';
}
- dsv += dsvRow.substring(0, dsvRow.length - 1) + '\n'
}
- let extension = ''
+ let extension = '';
if (delimiter === '\t') {
- extension = 'tsv'
+ extension = 'tsv';
} else if (delimiter === ',') {
- extension = 'csv'
+ extension = 'csv';
}
- saveAsService.saveAs(dsv, exportedFileName, extension)
- }
+ saveAsService.saveAs(dsv, exportedFileName, extension);
+ };
- $scope.getBase64ImageSrc = function (base64Data) {
- return 'data:image/png;base64,' + base64Data
- }
+ $scope.getBase64ImageSrc = function(base64Data) {
+ return 'data:image/png;base64,' + base64Data;
+ };
// Helium ----------------
- let ANGULAR_FUNCTION_OBJECT_NAME_PREFIX = '_Z_ANGULAR_FUNC_'
+ let ANGULAR_FUNCTION_OBJECT_NAME_PREFIX = '_Z_ANGULAR_FUNC_';
// app states
- $scope.apps = []
+ $scope.apps = [];
// suggested apps
- $scope.suggestion = {}
+ $scope.suggestion = {};
- $scope.switchApp = function (appId) {
- let newConfig = angular.copy($scope.config)
- let newParams = angular.copy(paragraph.settings.params)
+ $scope.switchApp = function(appId) {
+ let newConfig = angular.copy($scope.config);
+ let newParams = angular.copy(paragraph.settings.params);
// 'helium.activeApp' can be cleared by switchViz()
- _.set(newConfig, 'helium.activeApp', appId)
+ _.set(newConfig, 'helium.activeApp', appId);
- commitConfig(newConfig, newParams)
- }
+ commitConfig(newConfig, newParams);
+ };
- $scope.loadApp = function (heliumPackage) {
- let noteId = $route.current.pathParams.noteId
+ $scope.loadApp = function(heliumPackage) {
+ let noteId = $route.current.pathParams.noteId;
$http.post(baseUrlSrv.getRestApiBase() + '/helium/load/' + noteId + '/' + paragraph.id, heliumPackage)
- .success(function (data, status, headers, config) {
- console.log('Load app %o', data)
+ .success(function(data, status, headers, config) {
+ console.log('Load app %o', data);
})
- .error(function (err, status, headers, config) {
- console.log('Error %o', err)
- })
- }
+ .error(function(err, status, headers, config) {
+ console.log('Error %o', err);
+ });
+ };
- const commitConfig = function (config, params) {
- commitParagraphResult(paragraph.title, paragraph.text, config, params)
- }
+ const commitConfig = function(config, params) {
+ commitParagraphResult(paragraph.title, paragraph.text, config, params);
+ };
- const getApplicationStates = function () {
- let appStates = []
+ const getApplicationStates = function() {
+ let appStates = [];
// Display ApplicationState
if (paragraph.apps) {
- _.forEach(paragraph.apps, function (app) {
+ _.forEach(paragraph.apps, function(app) {
appStates.push({
id: app.id,
pkg: app.pkg,
status: app.status,
- output: app.output
- })
- })
+ output: app.output,
+ });
+ });
}
// update or remove app states no longer exists
- _.forEach($scope.apps, function (currentAppState, idx) {
- let newAppState = _.find(appStates, {id: currentAppState.id})
+ _.forEach($scope.apps, function(currentAppState, idx) {
+ let newAppState = _.find(appStates, {id: currentAppState.id});
if (newAppState) {
- angular.extend($scope.apps[idx], newAppState)
+ angular.extend($scope.apps[idx], newAppState);
} else {
- $scope.apps.splice(idx, 1)
+ $scope.apps.splice(idx, 1);
}
- })
+ });
// add new app states
- _.forEach(appStates, function (app, idx) {
+ _.forEach(appStates, function(app, idx) {
if ($scope.apps.length <= idx || $scope.apps[idx].id !== app.id) {
- $scope.apps.splice(idx, 0, app)
+ $scope.apps.splice(idx, 0, app);
}
- })
- }
+ });
+ };
- const getSuggestions = function () {
+ const getSuggestions = function() {
// Get suggested apps
- let noteId = $route.current.pathParams.noteId
+ let noteId = $route.current.pathParams.noteId;
if (!noteId) {
- return
+ return;
}
$http.get(baseUrlSrv.getRestApiBase() + '/helium/suggest/' + noteId + '/' + paragraph.id)
- .success(function (data, status, headers, config) {
- $scope.suggestion = data.body
- })
- .error(function (err, status, headers, config) {
- console.log('Error %o', err)
+ .success(function(data, status, headers, config) {
+ $scope.suggestion = data.body;
})
- }
+ .error(function(err, status, headers, config) {
+ console.log('Error %o', err);
+ });
+ };
- const renderApp = function (targetElemId, appState) {
+ const renderApp = function(targetElemId, appState) {
const afterLoaded = (loadedElem) => {
try {
- console.log('renderApp %o', appState)
- loadedElem.html(appState.output)
- $compile(loadedElem.contents())(getAppScope(appState))
+ console.log('renderApp %o', appState);
+ loadedElem.html(appState.output);
+ $compile(loadedElem.contents())(getAppScope(appState));
} catch (err) {
- console.log('App rendering error %o', err)
+ console.log('App rendering error %o', err);
}
- }
- retryUntilElemIsLoaded(targetElemId, afterLoaded)
- }
+ };
+ retryUntilElemIsLoaded(targetElemId, afterLoaded);
+ };
/*
** $scope.$on functions below
*/
- $scope.$on('appendAppOutput', function (event, data) {
+ $scope.$on('appendAppOutput', function(event, data) {
if (paragraph.id === data.paragraphId) {
- let app = _.find($scope.apps, {id: data.appId})
+ let app = _.find($scope.apps, {id: data.appId});
if (app) {
- app.output += data.data
+ app.output += data.data;
- let paragraphAppState = _.find(paragraph.apps, {id: data.appId})
- paragraphAppState.output = app.output
+ let paragraphAppState = _.find(paragraph.apps, {id: data.appId});
+ paragraphAppState.output = app.output;
- let targetEl = angular.element(document.getElementById('p' + app.id))
- targetEl.html(app.output)
- $compile(targetEl.contents())(getAppScope(app))
- console.log('append app output %o', $scope.apps)
+ let targetEl = angular.element(document.getElementById('p' + app.id));
+ targetEl.html(app.output);
+ $compile(targetEl.contents())(getAppScope(app));
+ console.log('append app output %o', $scope.apps);
}
}
- })
+ });
- $scope.$on('updateAppOutput', function (event, data) {
+ $scope.$on('updateAppOutput', function(event, data) {
if (paragraph.id === data.paragraphId) {
- let app = _.find($scope.apps, {id: data.appId})
+ let app = _.find($scope.apps, {id: data.appId});
if (app) {
- app.output = data.data
+ app.output = data.data;
- let paragraphAppState = _.find(paragraph.apps, {id: data.appId})
- paragraphAppState.output = app.output
+ let paragraphAppState = _.find(paragraph.apps, {id: data.appId});
+ paragraphAppState.output = app.output;
- let targetEl = angular.element(document.getElementById('p' + app.id))
- targetEl.html(app.output)
- $compile(targetEl.contents())(getAppScope(app))
- console.log('append app output')
+ let targetEl = angular.element(document.getElementById('p' + app.id));
+ targetEl.html(app.output);
+ $compile(targetEl.contents())(getAppScope(app));
+ console.log('append app output');
}
}
- })
+ });
- $scope.$on('appLoad', function (event, data) {
+ $scope.$on('appLoad', function(event, data) {
if (paragraph.id === data.paragraphId) {
- let app = _.find($scope.apps, {id: data.appId})
+ let app = _.find($scope.apps, {id: data.appId});
if (!app) {
app = {
id: data.appId,
pkg: data.pkg,
status: 'UNLOADED',
- output: ''
- }
+ output: '',
+ };
- $scope.apps.push(app)
- paragraph.apps.push(app)
- $scope.switchApp(app.id)
+ $scope.apps.push(app);
+ paragraph.apps.push(app);
+ $scope.switchApp(app.id);
}
}
- })
+ });
- $scope.$on('appStatusChange', function (event, data) {
+ $scope.$on('appStatusChange', function(event, data) {
if (paragraph.id === data.paragraphId) {
- let app = _.find($scope.apps, {id: data.appId})
+ let app = _.find($scope.apps, {id: data.appId});
if (app) {
- app.status = data.status
- let paragraphAppState = _.find(paragraph.apps, {id: data.appId})
- paragraphAppState.status = app.status
+ app.status = data.status;
+ let paragraphAppState = _.find(paragraph.apps, {id: data.appId});
+ paragraphAppState.status = app.status;
}
}
- })
+ });
- let getAppRegistry = function (appState) {
+ let getAppRegistry = function(appState) {
if (!appState.registry) {
- appState.registry = {}
+ appState.registry = {};
}
- return appState.registry
- }
+ return appState.registry;
+ };
- const getAppScope = function (appState) {
+ const getAppScope = function(appState) {
if (!appState.scope) {
- appState.scope = $rootScope.$new(true, $rootScope)
+ appState.scope = $rootScope.$new(true, $rootScope);
}
- return appState.scope
- }
+ return appState.scope;
+ };
- $scope.$on('angularObjectUpdate', function (event, data) {
- let noteId = $route.current.pathParams.noteId
+ $scope.$on('angularObjectUpdate', function(event, data) {
+ let noteId = $route.current.pathParams.noteId;
if (!data.noteId || data.noteId === noteId) {
- let scope
- let registry
+ let scope;
+ let registry;
- let app = _.find($scope.apps, {id: data.paragraphId})
+ let app = _.find($scope.apps, {id: data.paragraphId});
if (app) {
- scope = getAppScope(app)
- registry = getAppRegistry(app)
+ scope = getAppScope(app);
+ registry = getAppRegistry(app);
} else {
// no matching app in this paragraph
- return
+ return;
}
- let varName = data.angularObject.name
+ let varName = data.angularObject.name;
if (angular.equals(data.angularObject.object, scope[varName])) {
// return when update has no change
- return
+ return;
}
if (!registry[varName]) {
registry[varName] = {
interpreterGroupId: data.interpreterGroupId,
noteId: data.noteId,
- paragraphId: data.paragraphId
- }
+ paragraphId: data.paragraphId,
+ };
} else {
- registry[varName].noteId = registry[varName].noteId || data.noteId
- registry[varName].paragraphId = registry[varName].paragraphId || data.paragraphId
+ registry[varName].noteId = registry[varName].noteId || data.noteId;
+ registry[varName].paragraphId = registry[varName].paragraphId || data.paragraphId;
}
- registry[varName].skipEmit = true
+ registry[varName].skipEmit = true;
if (!registry[varName].clearWatcher) {
- registry[varName].clearWatcher = scope.$watch(varName, function (newValue, oldValue) {
- console.log('angular object (paragraph) updated %o %o', varName, registry[varName])
+ registry[varName].clearWatcher = scope.$watch(varName, function(newValue, oldValue) {
+ console.log('angular object (paragraph) updated %o %o', varName, registry[varName]);
if (registry[varName].skipEmit) {
- registry[varName].skipEmit = false
- return
+ registry[varName].skipEmit = false;
+ return;
}
websocketMsgSrv.updateAngularObject(
registry[varName].noteId,
registry[varName].paragraphId,
varName,
newValue,
- registry[varName].interpreterGroupId)
- })
+ registry[varName].interpreterGroupId);
+ });
}
- console.log('angular object (paragraph) created %o', varName)
- scope[varName] = data.angularObject.object
+ console.log('angular object (paragraph) created %o', varName);
+ scope[varName] = data.angularObject.object;
// create proxy for AngularFunction
if (varName.indexOf(ANGULAR_FUNCTION_OBJECT_NAME_PREFIX) === 0) {
- let funcName = varName.substring((ANGULAR_FUNCTION_OBJECT_NAME_PREFIX).length)
- scope[funcName] = function () {
+ let funcName = varName.substring((ANGULAR_FUNCTION_OBJECT_NAME_PREFIX).length);
+ scope[funcName] = function() {
// eslint-disable-next-line prefer-rest-params
- scope[varName] = arguments
+ scope[varName] = arguments;
// eslint-disable-next-line prefer-rest-params
- console.log('angular function (paragraph) invoked %o', arguments)
- }
+ console.log('angular function (paragraph) invoked %o', arguments);
+ };
- console.log('angular function (paragraph) created %o', scope[funcName])
+ console.log('angular function (paragraph) created %o', scope[funcName]);
}
}
- })
+ });
- $scope.$on('angularObjectRemove', function (event, data) {
- let noteId = $route.current.pathParams.noteId
+ $scope.$on('angularObjectRemove', function(event, data) {
+ let noteId = $route.current.pathParams.noteId;
if (!data.noteId || data.noteId === noteId) {
- let scope
- let registry
+ let scope;
+ let registry;
- let app = _.find($scope.apps, {id: data.paragraphId})
+ let app = _.find($scope.apps, {id: data.paragraphId});
if (app) {
- scope = getAppScope(app)
- registry = getAppRegistry(app)
+ scope = getAppScope(app);
+ registry = getAppRegistry(app);
} else {
// no matching app in this paragraph
- return
+ return;
}
- let varName = data.name
+ let varName = data.name;
// clear watcher
if (registry[varName]) {
- registry[varName].clearWatcher()
- registry[varName] = undefined
+ registry[varName].clearWatcher();
+ registry[varName] = undefined;
}
// remove scope variable
- scope[varName] = undefined
+ scope[varName] = undefined;
// remove proxy for AngularFunction
if (varName.indexOf(ANGULAR_FUNCTION_OBJECT_NAME_PREFIX) === 0) {
- let funcName = varName.substring((ANGULAR_FUNCTION_OBJECT_NAME_PREFIX).length)
- scope[funcName] = undefined
+ let funcName = varName.substring((ANGULAR_FUNCTION_OBJECT_NAME_PREFIX).length);
+ scope[funcName] = undefined;
}
}
- })
+ });
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/revisions-comparator/revisions-comparator.component.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/revisions-comparator/revisions-comparator.component.js b/zeppelin-web/src/app/notebook/revisions-comparator/revisions-comparator.component.js
index 45db38a..debdb6e 100644
--- a/zeppelin-web/src/app/notebook/revisions-comparator/revisions-comparator.component.js
+++ b/zeppelin-web/src/app/notebook/revisions-comparator/revisions-comparator.component.js
@@ -12,81 +12,81 @@
* limitations under the License.
*/
-import revisionsComparatorTemplate from './revisions-comparator.html'
-import './revisions-comparator.css'
-import moment from 'moment'
+import revisionsComparatorTemplate from './revisions-comparator.html';
+import './revisions-comparator.css';
+import moment from 'moment';
function RevisionsComparatorController($scope, websocketMsgSrv, $routeParams) {
- 'ngInject'
+ 'ngInject';
- $scope.firstNoteRevisionForCompare = null
- $scope.secondNoteRevisionForCompare = null
- $scope.mergeNoteRevisionsForCompare = null
- $scope.currentParagraphDiffDisplay = null
- $scope.currentFirstRevisionForCompare = 'Choose...'
- $scope.currentSecondRevisionForCompare = 'Choose...'
+ $scope.firstNoteRevisionForCompare = null;
+ $scope.secondNoteRevisionForCompare = null;
+ $scope.mergeNoteRevisionsForCompare = null;
+ $scope.currentParagraphDiffDisplay = null;
+ $scope.currentFirstRevisionForCompare = 'Choose...';
+ $scope.currentSecondRevisionForCompare = 'Choose...';
- $scope.getNoteRevisionForReview = function (revision, position) {
+ $scope.getNoteRevisionForReview = function(revision, position) {
if (position) {
if (position === 'first') {
- $scope.currentFirstRevisionForCompare = revision.message
+ $scope.currentFirstRevisionForCompare = revision.message;
} else {
- $scope.currentSecondRevisionForCompare = revision.message
+ $scope.currentSecondRevisionForCompare = revision.message;
}
- websocketMsgSrv.getNoteByRevisionForCompare($routeParams.noteId, revision.id, position)
+ websocketMsgSrv.getNoteByRevisionForCompare($routeParams.noteId, revision.id, position);
}
- }
+ };
// compare revisions
- $scope.compareRevisions = function () {
+ $scope.compareRevisions = function() {
if ($scope.firstNoteRevisionForCompare && $scope.secondNoteRevisionForCompare) {
- let paragraphs1 = $scope.firstNoteRevisionForCompare.note.paragraphs
- let paragraphs2 = $scope.secondNoteRevisionForCompare.note.paragraphs
- let added = 'added'
- let deleted = 'deleted'
- let compared = 'compared'
- let merge = []
+ let paragraphs1 = $scope.firstNoteRevisionForCompare.note.paragraphs;
+ let paragraphs2 = $scope.secondNoteRevisionForCompare.note.paragraphs;
+ let added = 'added';
+ let deleted = 'deleted';
+ let compared = 'compared';
+ let merge = [];
for (let p1 of paragraphs1) {
- let p2 = null
+ let p2 = null;
for (let p of paragraphs2) {
if (p1.id === p.id) {
- p2 = p
- break
+ p2 = p;
+ break;
}
}
if (p2 === null) {
- merge.push({paragraph: p1, firstString: (p1.text || '').split('\n')[0], type: deleted})
+ merge.push({paragraph: p1, firstString: (p1.text || '').split('\n')[0], type: deleted});
} else {
- let colorClass = ''
- let span = null
- let text1 = p1.text || ''
- let text2 = p2.text || ''
-
- let diff = window.JsDiff.diffLines(text1, text2)
- let diffHtml = document.createDocumentFragment()
- let identical = true
- let identicalClass = 'color-black'
-
- diff.forEach(function (part) {
- colorClass = part.added ? 'color-green-row' : part.removed ? 'color-red-row' : identicalClass
- span = document.createElement('span')
- span.className = colorClass
+ let colorClass = '';
+ let span = null;
+ let text1 = p1.text || '';
+ let text2 = p2.text || '';
+
+ let diff = window.JsDiff.diffLines(text1, text2);
+ let diffHtml = document.createDocumentFragment();
+ let identical = true;
+ let identicalClass = 'color-black';
+
+ diff.forEach(function(part) {
+ colorClass = part.added ? 'color-green-row' : part.removed ? 'color-red-row' : identicalClass;
+ span = document.createElement('span');
+ span.className = colorClass;
if (identical && colorClass !== identicalClass) {
- identical = false
+ identical = false;
}
- let str = part.value
+ let str = part.value;
if (str[str.length - 1] !== '\n') {
- str = str + '\n'
+ str = str + '\n';
}
- span.appendChild(document.createTextNode(str))
- diffHtml.appendChild(span)
- })
+ span.appendChild(document.createTextNode(str));
+ diffHtml.appendChild(span);
+ });
- let pre = document.createElement('pre')
- pre.appendChild(diffHtml)
+ let pre = document.createElement('pre');
+ pre.appendChild(diffHtml);
merge.push(
{
@@ -94,88 +94,88 @@ function RevisionsComparatorController($scope, websocketMsgSrv, $routeParams) {
diff: pre.innerHTML,
identical: identical,
firstString: (p1.text || '').split('\n')[0],
- type: compared
- })
+ type: compared,
+ });
}
}
for (let p2 of paragraphs2) {
- let p1 = null
+ let p1 = null;
for (let p of paragraphs1) {
if (p2.id === p.id) {
- p1 = p
- break
+ p1 = p;
+ break;
}
}
if (p1 === null) {
- merge.push({paragraph: p2, firstString: (p2.text || '').split('\n')[0], type: added})
+ merge.push({paragraph: p2, firstString: (p2.text || '').split('\n')[0], type: added});
}
}
- merge.sort(function (a, b) {
+ merge.sort(function(a, b) {
if (a.type === added) {
- return -1
+ return -1;
}
if (a.type === compared) {
- return 1
+ return 1;
}
if (a.type === deleted) {
if (b.type === compared) {
- return -1
+ return -1;
} else {
- return 1
+ return 1;
}
}
- })
+ });
- $scope.mergeNoteRevisionsForCompare = merge
+ $scope.mergeNoteRevisionsForCompare = merge;
if ($scope.currentParagraphDiffDisplay !== null) {
- $scope.changeCurrentParagraphDiffDisplay($scope.currentParagraphDiffDisplay.paragraph.id)
+ $scope.changeCurrentParagraphDiffDisplay($scope.currentParagraphDiffDisplay.paragraph.id);
}
}
- }
+ };
- $scope.$on('noteRevisionForCompare', function (event, data) {
- console.debug('received note revision for compare %o', data)
+ $scope.$on('noteRevisionForCompare', function(event, data) {
+ console.debug('received note revision for compare %o', data);
if (data.note && data.position) {
if (data.position === 'first') {
- $scope.firstNoteRevisionForCompare = data
+ $scope.firstNoteRevisionForCompare = data;
} else {
- $scope.secondNoteRevisionForCompare = data
+ $scope.secondNoteRevisionForCompare = data;
}
if ($scope.firstNoteRevisionForCompare !== null && $scope.secondNoteRevisionForCompare !== null &&
$scope.firstNoteRevisionForCompare.revisionId !== $scope.secondNoteRevisionForCompare.revisionId) {
- $scope.compareRevisions()
+ $scope.compareRevisions();
}
}
- })
+ });
- $scope.formatRevisionDate = function (date) {
- return moment.unix(date).format('MMMM Do YYYY, h:mm:ss a')
- }
+ $scope.formatRevisionDate = function(date) {
+ return moment.unix(date).format('MMMM Do YYYY, h:mm:ss a');
+ };
- $scope.changeCurrentParagraphDiffDisplay = function (paragraphId) {
+ $scope.changeCurrentParagraphDiffDisplay = function(paragraphId) {
for (let p of $scope.mergeNoteRevisionsForCompare) {
if (p.paragraph.id === paragraphId) {
- $scope.currentParagraphDiffDisplay = p
- return
+ $scope.currentParagraphDiffDisplay = p;
+ return;
}
}
- $scope.currentParagraphDiffDisplay = null
- }
+ $scope.currentParagraphDiffDisplay = null;
+ };
}
export const RevisionsComparatorComponent = {
template: revisionsComparatorTemplate,
controller: RevisionsComparatorController,
bindings: {
- noteRevisions: '<'
- }
-}
+ noteRevisions: '<',
+ },
+};
export const RevisionsComparatorModule = angular
.module('zeppelinWebApp')
.component('revisionsComparator', RevisionsComparatorComponent)
- .name
+ .name;
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/save-as/browser-detect.service.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/save-as/browser-detect.service.js b/zeppelin-web/src/app/notebook/save-as/browser-detect.service.js
index a31e9af..0c74b45 100644
--- a/zeppelin-web/src/app/notebook/save-as/browser-detect.service.js
+++ b/zeppelin-web/src/app/notebook/save-as/browser-detect.service.js
@@ -12,28 +12,28 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').service('browserDetectService', BrowserDetectService)
+angular.module('zeppelinWebApp').service('browserDetectService', BrowserDetectService);
-function BrowserDetectService () {
- this.detectIE = function () {
- let ua = window.navigator.userAgent
- let msie = ua.indexOf('MSIE ')
+function BrowserDetectService() {
+ this.detectIE = function() {
+ let ua = window.navigator.userAgent;
+ let msie = ua.indexOf('MSIE ');
if (msie > 0) {
// IE 10 or older => return version number
- return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10)
+ return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
}
- let trident = ua.indexOf('Trident/')
+ let trident = ua.indexOf('Trident/');
if (trident > 0) {
// IE 11 => return version number
- let rv = ua.indexOf('rv:')
- return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10)
+ let rv = ua.indexOf('rv:');
+ return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
}
- let edge = ua.indexOf('Edge/')
+ let edge = ua.indexOf('Edge/');
if (edge > 0) {
// IE 12 (aka Edge) => return version number
- return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10)
+ return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
}
// other browser
- return false
- }
+ return false;
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/save-as/save-as.service.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/save-as/save-as.service.js b/zeppelin-web/src/app/notebook/save-as/save-as.service.js
index ff463c8..72a54d1 100644
--- a/zeppelin-web/src/app/notebook/save-as/save-as.service.js
+++ b/zeppelin-web/src/app/notebook/save-as/save-as.service.js
@@ -12,45 +12,45 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').service('saveAsService', SaveAsService)
+angular.module('zeppelinWebApp').service('saveAsService', SaveAsService);
-function SaveAsService (browserDetectService) {
- 'ngInject'
+function SaveAsService(browserDetectService) {
+ 'ngInject';
- this.saveAs = function (content, filename, extension) {
- let BOM = '\uFEFF'
+ this.saveAs = function(content, filename, extension) {
+ let BOM = '\uFEFF';
if (browserDetectService.detectIE()) {
- angular.element('body').append('<iframe id="SaveAsId" style="display: none"></iframe>')
- let frameSaveAs = angular.element('body > iframe#SaveAsId')[0].contentWindow
- content = BOM + content
- frameSaveAs.document.open('text/json', 'replace')
- frameSaveAs.document.write(content)
- frameSaveAs.document.close()
- frameSaveAs.focus()
- let t1 = Date.now()
- frameSaveAs.document.execCommand('SaveAs', false, filename + '.' + extension)
- let t2 = Date.now()
+ angular.element('body').append('<iframe id="SaveAsId" style="display: none"></iframe>');
+ let frameSaveAs = angular.element('body > iframe#SaveAsId')[0].contentWindow;
+ content = BOM + content;
+ frameSaveAs.document.open('text/json', 'replace');
+ frameSaveAs.document.write(content);
+ frameSaveAs.document.close();
+ frameSaveAs.focus();
+ let t1 = Date.now();
+ frameSaveAs.document.execCommand('SaveAs', false, filename + '.' + extension);
+ let t2 = Date.now();
// This means, this version of IE dosen't support auto download of a file with extension provided in param
// falling back to ".txt"
if (t1 === t2) {
- frameSaveAs.document.execCommand('SaveAs', true, filename + '.txt')
+ frameSaveAs.document.execCommand('SaveAs', true, filename + '.txt');
}
- angular.element('body > iframe#SaveAsId').remove()
+ angular.element('body > iframe#SaveAsId').remove();
} else {
- let binaryData = []
- binaryData.push(BOM)
- binaryData.push(content)
- content = window.URL.createObjectURL(new Blob(binaryData))
+ let binaryData = [];
+ binaryData.push(BOM);
+ binaryData.push(content);
+ content = window.URL.createObjectURL(new Blob(binaryData));
- angular.element('body').append('<a id="SaveAsId"></a>')
- let saveAsElement = angular.element('body > a#SaveAsId')
- saveAsElement.attr('href', content)
- saveAsElement.attr('download', filename + '.' + extension)
- saveAsElement.attr('target', '_blank')
- saveAsElement[0].click()
- saveAsElement.remove()
- window.URL.revokeObjectURL(content)
+ angular.element('body').append('<a id="SaveAsId"></a>');
+ let saveAsElement = angular.element('body > a#SaveAsId');
+ saveAsElement.attr('href', content);
+ saveAsElement.attr('download', filename + '.' + extension);
+ saveAsElement.attr('target', '_blank');
+ saveAsElement[0].click();
+ saveAsElement.remove();
+ window.URL.revokeObjectURL(content);
}
- }
+ };
}
[09/12] zeppelin git commit: [ZEPPELIN-3245] checkstyle/eslintrc for
zeppelin-web (JavaScript)
Posted by pr...@apache.org.
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/notebook.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/notebook.controller.js b/zeppelin-web/src/app/notebook/notebook.controller.js
index b02b74e..05ab9fb 100644
--- a/zeppelin-web/src/app/notebook/notebook.controller.js
+++ b/zeppelin-web/src/app/notebook/notebook.controller.js
@@ -12,30 +12,30 @@
* limitations under the License.
*/
-import moment from 'moment'
+import moment from 'moment';
-import { isParagraphRunning, } from './paragraph/paragraph.status'
+import {isParagraphRunning} from './paragraph/paragraph.status';
-angular.module('zeppelinWebApp').controller('NotebookCtrl', NotebookCtrl)
+angular.module('zeppelinWebApp').controller('NotebookCtrl', NotebookCtrl);
-function NotebookCtrl ($scope, $route, $routeParams, $location, $rootScope,
+function NotebookCtrl($scope, $route, $routeParams, $location, $rootScope,
$http, websocketMsgSrv, baseUrlSrv, $timeout, saveAsService,
ngToast, noteActionService, noteVarShareService, TRASH_FOLDER_ID,
heliumService) {
- 'ngInject'
-
- ngToast.dismiss()
-
- $scope.note = null
- $scope.actionOnFormSelectionChange = true
- $scope.hideForms = false
- $scope.disableForms = false
- $scope.editorToggled = false
- $scope.tableToggled = false
- $scope.viewOnly = false
- $scope.showSetting = false
- $scope.showRevisionsComparator = false
- $scope.looknfeelOption = ['default', 'simple', 'report']
+ 'ngInject';
+
+ ngToast.dismiss();
+
+ $scope.note = null;
+ $scope.actionOnFormSelectionChange = true;
+ $scope.hideForms = false;
+ $scope.disableForms = false;
+ $scope.editorToggled = false;
+ $scope.tableToggled = false;
+ $scope.viewOnly = false;
+ $scope.showSetting = false;
+ $scope.showRevisionsComparator = false;
+ $scope.looknfeelOption = ['default', 'simple', 'report'];
$scope.cronOption = [
{name: 'None', value: undefined},
{name: '1m', value: '0 0/1 * * * ?'},
@@ -44,28 +44,28 @@ function NotebookCtrl ($scope, $route, $routeParams, $location, $rootScope,
{name: '3h', value: '0 0 0/3 * * ?'},
{name: '6h', value: '0 0 0/6 * * ?'},
{name: '12h', value: '0 0 0/12 * * ?'},
- {name: '1d', value: '0 0 0 * * ?'}
- ]
+ {name: '1d', value: '0 0 0 * * ?'},
+ ];
$scope.formatRevisionDate = function(date) {
- return moment.unix(date).format('MMMM Do YYYY, h:mm a')
- }
+ return moment.unix(date).format('MMMM Do YYYY, h:mm a');
+ };
- $scope.interpreterSettings = []
- $scope.interpreterBindings = []
- $scope.isNoteDirty = null
- $scope.saveTimer = null
- $scope.paragraphWarningDialog = {}
+ $scope.interpreterSettings = [];
+ $scope.interpreterBindings = [];
+ $scope.isNoteDirty = null;
+ $scope.saveTimer = null;
+ $scope.paragraphWarningDialog = {};
- let connectedOnce = false
- let isRevisionPath = function (path) {
- let pattern = new RegExp('^.*\/notebook\/[a-zA-Z0-9_]*\/revision\/[a-zA-Z0-9_]*')
- return pattern.test(path)
- }
+ let connectedOnce = false;
+ let isRevisionPath = function(path) {
+ let pattern = new RegExp('^.*\/notebook\/[a-zA-Z0-9_]*\/revision\/[a-zA-Z0-9_]*');
+ return pattern.test(path);
+ };
- $scope.noteRevisions = []
- $scope.currentRevision = 'Head'
- $scope.revisionView = isRevisionPath($location.path())
+ $scope.noteRevisions = [];
+ $scope.currentRevision = 'Head';
+ $scope.revisionView = isRevisionPath($location.path());
$scope.search = {
searchText: '',
@@ -78,48 +78,48 @@ function NotebookCtrl ($scope, $route, $routeParams, $location, $rootScope,
currentOccurrence: 0,
searchBoxOpened: false,
searchBoxWidth: 350,
- left: '0px'
- }
- let currentSearchParagraph = 0
+ left: '0px',
+ };
+ let currentSearchParagraph = 0;
- $scope.$watch('note', function (value) {
- let title
+ $scope.$watch('note', function(value) {
+ let title;
if (value) {
- title = value.name.substr(value.name.lastIndexOf('/') + 1, value.name.length)
- title += ' - Zeppelin'
+ title = value.name.substr(value.name.lastIndexOf('/') + 1, value.name.length);
+ title += ' - Zeppelin';
} else {
- title = 'Zeppelin'
+ title = 'Zeppelin';
}
- $rootScope.pageTitle = title
- }, true)
+ $rootScope.pageTitle = title;
+ }, true);
- $scope.$on('setConnectedStatus', function (event, param) {
+ $scope.$on('setConnectedStatus', function(event, param) {
if (connectedOnce && param) {
- initNotebook()
+ initNotebook();
}
- connectedOnce = true
- })
+ connectedOnce = true;
+ });
- $scope.getCronOptionNameFromValue = function (value) {
+ $scope.getCronOptionNameFromValue = function(value) {
if (!value) {
- return ''
+ return '';
}
for (let o in $scope.cronOption) {
if ($scope.cronOption[o].value === value) {
- return $scope.cronOption[o].name
+ return $scope.cronOption[o].name;
}
}
- return value
- }
+ return value;
+ };
- $scope.blockAnonUsers = function () {
- let zeppelinVersion = $rootScope.zeppelinVersion
- let url = 'https://zeppelin.apache.org/docs/' + zeppelinVersion + '/security/notebook_authorization.html'
+ $scope.blockAnonUsers = function() {
+ let zeppelinVersion = $rootScope.zeppelinVersion;
+ let url = 'https://zeppelin.apache.org/docs/' + zeppelinVersion + '/security/notebook_authorization.html';
let content = 'Only authenticated user can set the permission.' +
'<a data-toggle="tooltip" data-placement="top" title="Learn more" target="_blank" href=' + url + '>' +
'<i class="icon-question" />' +
- '</a>'
+ '</a>';
BootstrapDialog.show({
closable: false,
closeByBackdrop: false,
@@ -128,866 +128,878 @@ function NotebookCtrl ($scope, $route, $routeParams, $location, $rootScope,
message: content,
buttons: [{
label: 'Close',
- action: function (dialog) {
- dialog.close()
- }
- }]
- })
- }
+ action: function(dialog) {
+ dialog.close();
+ },
+ }],
+ });
+ };
/** Init the new controller */
- const initNotebook = function () {
- noteVarShareService.clear()
+ const initNotebook = function() {
+ noteVarShareService.clear();
if ($routeParams.revisionId) {
- websocketMsgSrv.getNoteByRevision($routeParams.noteId, $routeParams.revisionId)
+ websocketMsgSrv.getNoteByRevision($routeParams.noteId, $routeParams.revisionId);
} else {
- websocketMsgSrv.getNote($routeParams.noteId)
+ websocketMsgSrv.getNote($routeParams.noteId);
}
- websocketMsgSrv.listRevisionHistory($routeParams.noteId)
- let currentRoute = $route.current
+ websocketMsgSrv.listRevisionHistory($routeParams.noteId);
+ let currentRoute = $route.current;
if (currentRoute) {
setTimeout(
- function () {
- let routeParams = currentRoute.params
- let $id = angular.element('#' + routeParams.paragraph + '_container')
+ function() {
+ let routeParams = currentRoute.params;
+ let $id = angular.element('#' + routeParams.paragraph + '_container');
if ($id.length > 0) {
// adjust for navbar
- let top = $id.offset().top - 103
- angular.element('html, body').scrollTo({top: top, left: 0})
+ let top = $id.offset().top - 103;
+ angular.element('html, body').scrollTo({top: top, left: 0});
}
},
1000
- )
+ );
}
- }
+ };
- initNotebook()
+ initNotebook();
- $scope.focusParagraphOnClick = function (clickEvent) {
+ $scope.focusParagraphOnClick = function(clickEvent) {
if (!$scope.note) {
- return
+ return;
}
for (let i = 0; i < $scope.note.paragraphs.length; i++) {
- let paragraphId = $scope.note.paragraphs[i].id
+ let paragraphId = $scope.note.paragraphs[i].id;
if (jQuery.contains(angular.element('#' + paragraphId + '_container')[0], clickEvent.target)) {
- $scope.$broadcast('focusParagraph', paragraphId, 0, null, true)
- break
+ $scope.$broadcast('focusParagraph', paragraphId, 0, null, true);
+ break;
}
}
- }
+ };
// register mouseevent handler for focus paragraph
- document.addEventListener('click', $scope.focusParagraphOnClick)
+ document.addEventListener('click', $scope.focusParagraphOnClick);
- let keyboardShortcut = function (keyEvent) {
+ let keyboardShortcut = function(keyEvent) {
// handle keyevent
if (!$scope.viewOnly && !$scope.revisionView) {
- $scope.$broadcast('keyEvent', keyEvent)
+ $scope.$broadcast('keyEvent', keyEvent);
}
- }
+ };
- $scope.keydownEvent = function (keyEvent) {
+ $scope.keydownEvent = function(keyEvent) {
if ((keyEvent.ctrlKey || keyEvent.metaKey) && String.fromCharCode(keyEvent.which).toLowerCase() === 's') {
- keyEvent.preventDefault()
+ keyEvent.preventDefault();
}
- keyboardShortcut(keyEvent)
- }
+ keyboardShortcut(keyEvent);
+ };
// register mouseevent handler for focus paragraph
- document.addEventListener('keydown', $scope.keydownEvent)
+ document.addEventListener('keydown', $scope.keydownEvent);
- $scope.paragraphOnDoubleClick = function (paragraphId) {
- $scope.$broadcast('doubleClickParagraph', paragraphId)
- }
+ $scope.paragraphOnDoubleClick = function(paragraphId) {
+ $scope.$broadcast('doubleClickParagraph', paragraphId);
+ };
// Move the note to trash and go back to the main page
- $scope.moveNoteToTrash = function (noteId) {
- noteActionService.moveNoteToTrash(noteId, true)
- }
+ $scope.moveNoteToTrash = function(noteId) {
+ noteActionService.moveNoteToTrash(noteId, true);
+ };
// Remove the note permanently if it's in the trash
- $scope.removeNote = function (noteId) {
- noteActionService.removeNote(noteId, true)
- }
+ $scope.removeNote = function(noteId) {
+ noteActionService.removeNote(noteId, true);
+ };
- $scope.isTrash = function (note) {
- return note ? note.name.split('/')[0] === TRASH_FOLDER_ID : false
- }
+ $scope.isTrash = function(note) {
+ return note ? note.name.split('/')[0] === TRASH_FOLDER_ID : false;
+ };
// Export notebook
- $scope.exportNote = function () {
- let jsonContent = JSON.stringify($scope.note)
- saveAsService.saveAs(jsonContent, $scope.note.name, 'json')
- }
+ $scope.exportNote = function() {
+ let jsonContent = JSON.stringify($scope.note);
+ saveAsService.saveAs(jsonContent, $scope.note.name, 'json');
+ };
// Clone note
- $scope.cloneNote = function (noteId) {
+ $scope.cloneNote = function(noteId) {
BootstrapDialog.confirm({
closable: true,
title: '',
message: 'Do you want to clone this note?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- websocketMsgSrv.cloneNote(noteId)
- $location.path('/')
+ websocketMsgSrv.cloneNote(noteId);
+ $location.path('/');
}
- }
- })
- }
+ },
+ });
+ };
// checkpoint/commit notebook
- $scope.checkpointNote = function (commitMessage) {
+ $scope.checkpointNote = function(commitMessage) {
BootstrapDialog.confirm({
closable: true,
title: '',
message: 'Commit note to current repository?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- websocketMsgSrv.checkpointNote($routeParams.noteId, commitMessage)
+ websocketMsgSrv.checkpointNote($routeParams.noteId, commitMessage);
}
- }
- })
- document.getElementById('note.checkpoint.message').value = ''
- }
+ },
+ });
+ document.getElementById('note.checkpoint.message').value = '';
+ };
// set notebook head to given revision
- $scope.setNoteRevision = function () {
+ $scope.setNoteRevision = function() {
BootstrapDialog.confirm({
closable: true,
title: '',
message: 'Set notebook head to current revision?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- websocketMsgSrv.setNoteRevision($routeParams.noteId, $routeParams.revisionId)
+ websocketMsgSrv.setNoteRevision($routeParams.noteId, $routeParams.revisionId);
}
- }
- })
- }
+ },
+ });
+ };
$scope.preVisibleRevisionsComparator = function() {
- $scope.mergeNoteRevisionsForCompare = null
- $scope.firstNoteRevisionForCompare = null
- $scope.secondNoteRevisionForCompare = null
- $scope.currentFirstRevisionForCompare = 'Choose...'
- $scope.currentSecondRevisionForCompare = 'Choose...'
- $scope.$apply()
- }
-
- $scope.$on('listRevisionHistory', function (event, data) {
- console.debug('received list of revisions %o', data)
- $scope.noteRevisions = data.revisionList
+ $scope.mergeNoteRevisionsForCompare = null;
+ $scope.firstNoteRevisionForCompare = null;
+ $scope.secondNoteRevisionForCompare = null;
+ $scope.currentFirstRevisionForCompare = 'Choose...';
+ $scope.currentSecondRevisionForCompare = 'Choose...';
+ $scope.$apply();
+ };
+
+ $scope.$on('listRevisionHistory', function(event, data) {
+ console.debug('received list of revisions %o', data);
+ $scope.noteRevisions = data.revisionList;
if ($scope.noteRevisions.length === 0 || $scope.noteRevisions[0].id !== 'Head') {
$scope.noteRevisions.splice(0, 0, {
id: 'Head',
- message: 'Head'
- })
+ message: 'Head',
+ });
}
if ($routeParams.revisionId) {
- let index = _.findIndex($scope.noteRevisions, {'id': $routeParams.revisionId})
+ let index = _.findIndex($scope.noteRevisions, {'id': $routeParams.revisionId});
if (index > -1) {
- $scope.currentRevision = $scope.noteRevisions[index].message
+ $scope.currentRevision = $scope.noteRevisions[index].message;
}
}
- })
+ });
- $scope.$on('noteRevision', function (event, data) {
- console.log('received note revision %o', data)
+ $scope.$on('noteRevision', function(event, data) {
+ console.log('received note revision %o', data);
if (data.note) {
- $scope.note = data.note
- initializeLookAndFeel()
+ $scope.note = data.note;
+ initializeLookAndFeel();
} else {
- $location.path('/')
+ $location.path('/');
}
- })
+ });
- $scope.$on('setNoteRevisionResult', function (event, data) {
- console.log('received set note revision result %o', data)
+ $scope.$on('setNoteRevisionResult', function(event, data) {
+ console.log('received set note revision result %o', data);
if (data.status) {
- $location.path('/notebook/' + $routeParams.noteId)
+ $location.path('/notebook/' + $routeParams.noteId);
}
- })
+ });
- $scope.visitRevision = function (revision) {
+ $scope.visitRevision = function(revision) {
if (revision.id) {
if (revision.id === 'Head') {
- $location.path('/notebook/' + $routeParams.noteId)
+ $location.path('/notebook/' + $routeParams.noteId);
} else {
- $location.path('/notebook/' + $routeParams.noteId + '/revision/' + revision.id)
+ $location.path('/notebook/' + $routeParams.noteId + '/revision/' + revision.id);
}
} else {
ngToast.danger({content: 'There is a problem with this Revision',
verticalPosition: 'top',
- dismissOnTimeout: false
- })
+ dismissOnTimeout: false,
+ });
}
- }
+ };
- $scope.runAllParagraphs = function (noteId) {
+ $scope.runAllParagraphs = function(noteId) {
BootstrapDialog.confirm({
closable: true,
title: '',
message: 'Run all paragraphs?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- const paragraphs = $scope.note.paragraphs.map(p => {
+ const paragraphs = $scope.note.paragraphs.map((p) => {
return {
id: p.id,
title: p.title,
paragraph: p.text,
config: p.config,
- params: p.settings.params
- }
- })
- websocketMsgSrv.runAllParagraphs(noteId, paragraphs)
+ params: p.settings.params,
+ };
+ });
+ websocketMsgSrv.runAllParagraphs(noteId, paragraphs);
}
- }
- })
- }
+ },
+ });
+ };
- $scope.saveNote = function () {
+ $scope.saveNote = function() {
if ($scope.note && $scope.note.paragraphs) {
- _.forEach($scope.note.paragraphs, function (par) {
+ _.forEach($scope.note.paragraphs, function(par) {
angular
.element('#' + par.id + '_paragraphColumn_main')
.scope()
- .saveParagraph(par)
- })
- $scope.isNoteDirty = null
+ .saveParagraph(par);
+ });
+ $scope.isNoteDirty = null;
}
- }
+ };
- $scope.clearAllParagraphOutput = function (noteId) {
- noteActionService.clearAllParagraphOutput(noteId)
- }
+ $scope.clearAllParagraphOutput = function(noteId) {
+ noteActionService.clearAllParagraphOutput(noteId);
+ };
- $scope.toggleAllEditor = function () {
+ $scope.toggleAllEditor = function() {
if ($scope.editorToggled) {
- $scope.$broadcast('openEditor')
+ $scope.$broadcast('openEditor');
} else {
- $scope.$broadcast('closeEditor')
+ $scope.$broadcast('closeEditor');
}
- $scope.editorToggled = !$scope.editorToggled
- }
+ $scope.editorToggled = !$scope.editorToggled;
+ };
- $scope.showAllEditor = function () {
- $scope.$broadcast('openEditor')
- }
+ $scope.showAllEditor = function() {
+ $scope.$broadcast('openEditor');
+ };
- $scope.hideAllEditor = function () {
- $scope.$broadcast('closeEditor')
- }
+ $scope.hideAllEditor = function() {
+ $scope.$broadcast('closeEditor');
+ };
- $scope.toggleAllTable = function () {
+ $scope.toggleAllTable = function() {
if ($scope.tableToggled) {
- $scope.$broadcast('openTable')
+ $scope.$broadcast('openTable');
} else {
- $scope.$broadcast('closeTable')
+ $scope.$broadcast('closeTable');
}
- $scope.tableToggled = !$scope.tableToggled
- }
+ $scope.tableToggled = !$scope.tableToggled;
+ };
- $scope.showAllTable = function () {
- $scope.$broadcast('openTable')
- }
+ $scope.showAllTable = function() {
+ $scope.$broadcast('openTable');
+ };
- $scope.hideAllTable = function () {
- $scope.$broadcast('closeTable')
- }
+ $scope.hideAllTable = function() {
+ $scope.$broadcast('closeTable');
+ };
/**
* @returns {boolean} true if one more paragraphs are running. otherwise return false.
*/
- $scope.isNoteRunning = function () {
- if (!$scope.note) { return false }
+ $scope.isNoteRunning = function() {
+ if (!$scope.note) {
+ return false;
+ }
for (let i = 0; i < $scope.note.paragraphs.length; i++) {
if (isParagraphRunning($scope.note.paragraphs[i])) {
- return true
+ return true;
}
}
- return false
- }
+ return false;
+ };
- $scope.killSaveTimer = function () {
+ $scope.killSaveTimer = function() {
if ($scope.saveTimer) {
- $timeout.cancel($scope.saveTimer)
- $scope.saveTimer = null
+ $timeout.cancel($scope.saveTimer);
+ $scope.saveTimer = null;
}
- }
+ };
- $scope.startSaveTimer = function () {
- $scope.killSaveTimer()
- $scope.isNoteDirty = true
+ $scope.startSaveTimer = function() {
+ $scope.killSaveTimer();
+ $scope.isNoteDirty = true;
// console.log('startSaveTimer called ' + $scope.note.id);
- $scope.saveTimer = $timeout(function () {
- $scope.saveNote()
- }, 10000)
- }
+ $scope.saveTimer = $timeout(function() {
+ $scope.saveNote();
+ }, 10000);
+ };
- $scope.setLookAndFeel = function (looknfeel) {
- $scope.note.config.looknfeel = looknfeel
+ $scope.setLookAndFeel = function(looknfeel) {
+ $scope.note.config.looknfeel = looknfeel;
if ($scope.revisionView === true) {
- $rootScope.$broadcast('setLookAndFeel', $scope.note.config.looknfeel)
+ $rootScope.$broadcast('setLookAndFeel', $scope.note.config.looknfeel);
} else {
- $scope.setConfig()
+ $scope.setConfig();
}
- }
+ };
/** Set cron expression for this note **/
- $scope.setCronScheduler = function (cronExpr) {
+ $scope.setCronScheduler = function(cronExpr) {
if (cronExpr) {
if (!$scope.note.config.cronExecutingUser) {
- $scope.note.config.cronExecutingUser = $rootScope.ticket.principal
+ $scope.note.config.cronExecutingUser = $rootScope.ticket.principal;
}
} else {
- $scope.note.config.cronExecutingUser = ''
+ $scope.note.config.cronExecutingUser = '';
}
- $scope.note.config.cron = cronExpr
- $scope.setConfig()
- }
+ $scope.note.config.cron = cronExpr;
+ $scope.setConfig();
+ };
/** Set the username of the user to be used to execute all notes in notebook **/
- $scope.setCronExecutingUser = function (cronExecutingUser) {
- $scope.note.config.cronExecutingUser = cronExecutingUser
- $scope.setConfig()
- }
+ $scope.setCronExecutingUser = function(cronExecutingUser) {
+ $scope.note.config.cronExecutingUser = cronExecutingUser;
+ $scope.setConfig();
+ };
/** Set release resource for this note **/
- $scope.setReleaseResource = function (value) {
- $scope.note.config.releaseresource = value
- $scope.setConfig()
- }
+ $scope.setReleaseResource = function(value) {
+ $scope.note.config.releaseresource = value;
+ $scope.setConfig();
+ };
/** Update note config **/
- $scope.setConfig = function (config) {
+ $scope.setConfig = function(config) {
if (config) {
- $scope.note.config = config
+ $scope.note.config = config;
}
- websocketMsgSrv.updateNote($scope.note.id, $scope.note.name, $scope.note.config)
- }
+ websocketMsgSrv.updateNote($scope.note.id, $scope.note.name, $scope.note.config);
+ };
/** Update the note name */
- $scope.updateNoteName = function (newName) {
- const trimmedNewName = newName.trim()
+ $scope.updateNoteName = function(newName) {
+ const trimmedNewName = newName.trim();
if (trimmedNewName.length > 0 && $scope.note.name !== trimmedNewName) {
- $scope.note.name = trimmedNewName
- websocketMsgSrv.renameNote($scope.note.id, $scope.note.name)
+ $scope.note.name = trimmedNewName;
+ websocketMsgSrv.renameNote($scope.note.id, $scope.note.name);
}
- }
+ };
- const initializeLookAndFeel = function () {
+ const initializeLookAndFeel = function() {
if (!$scope.note.config.looknfeel) {
- $scope.note.config.looknfeel = 'default'
+ $scope.note.config.looknfeel = 'default';
} else {
- $scope.viewOnly = $scope.note.config.looknfeel === 'report' ? true : false
+ $scope.viewOnly = $scope.note.config.looknfeel === 'report' ? true : false;
}
if ($scope.note.paragraphs && $scope.note.paragraphs[0]) {
- $scope.note.paragraphs[0].focus = true
- }
- $rootScope.$broadcast('setLookAndFeel', $scope.note.config.looknfeel)
- }
-
- let cleanParagraphExcept = function (paragraphId, note) {
- let noteCopy = {}
- noteCopy.id = note.id
- noteCopy.name = note.name
- noteCopy.config = note.config
- noteCopy.info = note.info
- noteCopy.paragraphs = []
+ $scope.note.paragraphs[0].focus = true;
+ }
+ $rootScope.$broadcast('setLookAndFeel', $scope.note.config.looknfeel);
+ };
+
+ let cleanParagraphExcept = function(paragraphId, note) {
+ let noteCopy = {};
+ noteCopy.id = note.id;
+ noteCopy.name = note.name;
+ noteCopy.config = note.config;
+ noteCopy.info = note.info;
+ noteCopy.paragraphs = [];
for (let i = 0; i < note.paragraphs.length; i++) {
if (note.paragraphs[i].id === paragraphId) {
- noteCopy.paragraphs[0] = note.paragraphs[i]
+ noteCopy.paragraphs[0] = note.paragraphs[i];
if (!noteCopy.paragraphs[0].config) {
- noteCopy.paragraphs[0].config = {}
+ noteCopy.paragraphs[0].config = {};
}
- noteCopy.paragraphs[0].config.editorHide = true
- noteCopy.paragraphs[0].config.tableHide = false
- break
+ noteCopy.paragraphs[0].config.editorHide = true;
+ noteCopy.paragraphs[0].config.tableHide = false;
+ break;
}
}
- return noteCopy
- }
+ return noteCopy;
+ };
- let addPara = function (paragraph, index) {
- $scope.note.paragraphs.splice(index, 0, paragraph)
- $scope.note.paragraphs.map(para => {
+ let addPara = function(paragraph, index) {
+ $scope.note.paragraphs.splice(index, 0, paragraph);
+ $scope.note.paragraphs.map((para) => {
if (para.id === paragraph.id) {
- para.focus = true
+ para.focus = true;
// we need `$timeout` since angular DOM might not be initialized
- $timeout(() => { $scope.$broadcast('focusParagraph', para.id, 0, null, false) })
+ $timeout(() => {
+ $scope.$broadcast('focusParagraph', para.id, 0, null, false);
+ });
}
- })
- }
+ });
+ };
- let removePara = function (paragraphId) {
- let removeIdx
- _.each($scope.note.paragraphs, function (para, idx) {
+ let removePara = function(paragraphId) {
+ let removeIdx;
+ _.each($scope.note.paragraphs, function(para, idx) {
if (para.id === paragraphId) {
- removeIdx = idx
+ removeIdx = idx;
}
- })
- return $scope.note.paragraphs.splice(removeIdx, 1)
- }
+ });
+ return $scope.note.paragraphs.splice(removeIdx, 1);
+ };
- $scope.$on('addParagraph', function (event, paragraph, index) {
+ $scope.$on('addParagraph', function(event, paragraph, index) {
if ($scope.paragraphUrl || $scope.revisionView === true) {
- return
+ return;
}
- addPara(paragraph, index)
- })
+ addPara(paragraph, index);
+ });
- $scope.$on('removeParagraph', function (event, paragraphId) {
+ $scope.$on('removeParagraph', function(event, paragraphId) {
if ($scope.paragraphUrl || $scope.revisionView === true) {
- return
+ return;
}
- removePara(paragraphId)
- })
+ removePara(paragraphId);
+ });
- $scope.$on('moveParagraph', function (event, paragraphId, newIdx) {
+ $scope.$on('moveParagraph', function(event, paragraphId, newIdx) {
if ($scope.revisionView === true) {
- return
+ return;
}
- let removedPara = removePara(paragraphId)
+ let removedPara = removePara(paragraphId);
if (removedPara && removedPara.length === 1) {
- addPara(removedPara[0], newIdx)
+ addPara(removedPara[0], newIdx);
}
- })
+ });
- $scope.$on('updateNote', function (event, name, config, info) {
+ $scope.$on('updateNote', function(event, name, config, info) {
/** update Note name */
if (name !== $scope.note.name) {
- console.log('change note name to : %o', $scope.note.name)
- $scope.note.name = name
+ console.log('change note name to : %o', $scope.note.name);
+ $scope.note.name = name;
}
- $scope.note.config = config
- $scope.note.info = info
- initializeLookAndFeel()
- })
+ $scope.note.config = config;
+ $scope.note.info = info;
+ initializeLookAndFeel();
+ });
- let getInterpreterBindings = function () {
- websocketMsgSrv.getInterpreterBindings($scope.note.id)
- }
+ let getInterpreterBindings = function() {
+ websocketMsgSrv.getInterpreterBindings($scope.note.id);
+ };
- $scope.$on('interpreterBindings', function (event, data) {
- $scope.interpreterBindings = data.interpreterBindings
- $scope.interpreterBindingsOrig = angular.copy($scope.interpreterBindings) // to check dirty
+ $scope.$on('interpreterBindings', function(event, data) {
+ $scope.interpreterBindings = data.interpreterBindings;
+ $scope.interpreterBindingsOrig = angular.copy($scope.interpreterBindings); // to check dirty
- let selected = false
- let key
- let setting
+ let selected = false;
+ let key;
+ let setting;
for (key in $scope.interpreterBindings) {
- setting = $scope.interpreterBindings[key]
- if (setting.selected) {
- selected = true
- break
+ if($scope.interpreterBindings.hasOwnProperty(key)) {
+ setting = $scope.interpreterBindings[key];
+ if (setting.selected) {
+ selected = true;
+ break;
+ }
}
}
if (!selected) {
// make default selection
- let selectedIntp = {}
+ let selectedIntp = {};
for (key in $scope.interpreterBindings) {
- setting = $scope.interpreterBindings[key]
- if (!selectedIntp[setting.name]) {
- setting.selected = true
- selectedIntp[setting.name] = true
+ if ($scope.interpreterBindings.hasOwnProperty(key)) {
+ setting = $scope.interpreterBindings[key];
+ if (!selectedIntp[setting.name]) {
+ setting.selected = true;
+ selectedIntp[setting.name] = true;
+ }
}
}
- $scope.showSetting = true
+ $scope.showSetting = true;
}
- })
+ });
$scope.interpreterSelectionListeners = {
- accept: function (sourceItemHandleScope, destSortableScope) { return true },
- itemMoved: function (event) {},
- orderChanged: function (event) {}
- }
+ accept: function(sourceItemHandleScope, destSortableScope) {
+ return true;
+ },
+ itemMoved: function(event) {},
+ orderChanged: function(event) {},
+ };
$scope.closeAdditionalBoards = function() {
- $scope.closeSetting()
- $scope.closePermissions()
- $scope.closeRevisionsComparator()
- }
+ $scope.closeSetting();
+ $scope.closePermissions();
+ $scope.closeRevisionsComparator();
+ };
- $scope.openSetting = function () {
- $scope.showSetting = true
- getInterpreterBindings()
- }
+ $scope.openSetting = function() {
+ $scope.showSetting = true;
+ getInterpreterBindings();
+ };
- $scope.closeSetting = function () {
+ $scope.closeSetting = function() {
if (isSettingDirty()) {
BootstrapDialog.confirm({
closable: true,
title: '',
message: 'Interpreter setting changes will be discarded.',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- $scope.$apply(function () {
- $scope.showSetting = false
- })
+ $scope.$apply(function() {
+ $scope.showSetting = false;
+ });
}
- }
- })
+ },
+ });
} else {
- $scope.showSetting = false
+ $scope.showSetting = false;
}
- }
+ };
- $scope.saveSetting = function () {
- let selectedSettingIds = []
+ $scope.saveSetting = function() {
+ let selectedSettingIds = [];
for (let no in $scope.interpreterBindings) {
- let setting = $scope.interpreterBindings[no]
- if (setting.selected) {
- selectedSettingIds.push(setting.id)
+ if ($scope.interpreterBindings.hasOwnProperty(no)) {
+ let setting = $scope.interpreterBindings[no];
+ if (setting.selected) {
+ selectedSettingIds.push(setting.id);
+ }
}
}
- websocketMsgSrv.saveInterpreterBindings($scope.note.id, selectedSettingIds)
- console.log('Interpreter bindings %o saved', selectedSettingIds)
+ websocketMsgSrv.saveInterpreterBindings($scope.note.id, selectedSettingIds);
+ console.log('Interpreter bindings %o saved', selectedSettingIds);
- _.forEach($scope.note.paragraphs, function (n, key) {
- let regExp = /^\s*%/g
+ _.forEach($scope.note.paragraphs, function(n, key) {
+ let regExp = /^\s*%/g;
if (n.text && !regExp.exec(n.text)) {
- $scope.$broadcast('saveInterpreterBindings', n.id)
+ $scope.$broadcast('saveInterpreterBindings', n.id);
}
- })
+ });
- $scope.showSetting = false
- }
+ $scope.showSetting = false;
+ };
- $scope.toggleSetting = function () {
+ $scope.toggleSetting = function() {
if ($scope.showSetting) {
- $scope.closeSetting()
+ $scope.closeSetting();
} else {
- $scope.closeAdditionalBoards()
- $scope.openSetting()
- angular.element('html, body').animate({ scrollTop: 0 }, 'slow')
+ $scope.closeAdditionalBoards();
+ $scope.openSetting();
+ angular.element('html, body').animate({scrollTop: 0}, 'slow');
}
- }
+ };
- $scope.openRevisionsComparator = function () {
- $scope.showRevisionsComparator = true
- }
+ $scope.openRevisionsComparator = function() {
+ $scope.showRevisionsComparator = true;
+ };
- $scope.closeRevisionsComparator = function () {
- $scope.showRevisionsComparator = false
- }
+ $scope.closeRevisionsComparator = function() {
+ $scope.showRevisionsComparator = false;
+ };
- $scope.toggleRevisionsComparator = function () {
+ $scope.toggleRevisionsComparator = function() {
if ($scope.showRevisionsComparator) {
- $scope.closeRevisionsComparator()
+ $scope.closeRevisionsComparator();
} else {
- $scope.closeAdditionalBoards()
- $scope.openRevisionsComparator()
- angular.element('html, body').animate({ scrollTop: 0 }, 'slow')
+ $scope.closeAdditionalBoards();
+ $scope.openRevisionsComparator();
+ angular.element('html, body').animate({scrollTop: 0}, 'slow');
}
- }
+ };
- let getPermissions = function (callback) {
+ let getPermissions = function(callback) {
$http.get(baseUrlSrv.getRestApiBase() + '/notebook/' + $scope.note.id + '/permissions')
- .success(function (data, status, headers, config) {
- $scope.permissions = data.body
- $scope.permissionsOrig = angular.copy($scope.permissions) // to check dirty
+ .success(function(data, status, headers, config) {
+ $scope.permissions = data.body;
+ $scope.permissionsOrig = angular.copy($scope.permissions); // to check dirty
let selectJson = {
tokenSeparators: [',', ' '],
ajax: {
- url: function (params) {
+ url: function(params) {
if (!params.term) {
- return false
+ return false;
}
- return baseUrlSrv.getRestApiBase() + '/security/userlist/' + params.term
+ return baseUrlSrv.getRestApiBase() + '/security/userlist/' + params.term;
},
delay: 250,
- processResults: function (data, params) {
- let results = []
+ processResults: function(data, params) {
+ let results = [];
if (data.body.users.length !== 0) {
- let users = []
+ let users = [];
for (let len = 0; len < data.body.users.length; len++) {
users.push({
'id': data.body.users[len],
- 'text': data.body.users[len]
- })
+ 'text': data.body.users[len],
+ });
}
results.push({
'text': 'Users :',
- 'children': users
- })
+ 'children': users,
+ });
}
if (data.body.roles.length !== 0) {
- let roles = []
+ let roles = [];
for (let len = 0; len < data.body.roles.length; len++) {
roles.push({
'id': data.body.roles[len],
- 'text': data.body.roles[len]
- })
+ 'text': data.body.roles[len],
+ });
}
results.push({
'text': 'Roles :',
- 'children': roles
- })
+ 'children': roles,
+ });
}
return {
results: results,
pagination: {
- more: false
- }
- }
+ more: false,
+ },
+ };
},
- cache: false
+ cache: false,
},
width: ' ',
tags: true,
- minimumInputLength: 3
- }
-
- $scope.setIamOwner()
- angular.element('#selectOwners').select2(selectJson)
- angular.element('#selectReaders').select2(selectJson)
- angular.element('#selectRunners').select2(selectJson)
- angular.element('#selectWriters').select2(selectJson)
+ minimumInputLength: 3,
+ };
+
+ $scope.setIamOwner();
+ angular.element('#selectOwners').select2(selectJson);
+ angular.element('#selectReaders').select2(selectJson);
+ angular.element('#selectRunners').select2(selectJson);
+ angular.element('#selectWriters').select2(selectJson);
if (callback) {
- callback()
+ callback();
}
})
- .error(function (data, status, headers, config) {
+ .error(function(data, status, headers, config) {
if (status !== 0) {
- console.log('Error %o %o', status, data.message)
+ console.log('Error %o %o', status, data.message);
}
- })
- }
+ });
+ };
- $scope.openPermissions = function () {
- $scope.showPermissions = true
- getPermissions()
- }
+ $scope.openPermissions = function() {
+ $scope.showPermissions = true;
+ getPermissions();
+ };
- $scope.closePermissions = function () {
+ $scope.closePermissions = function() {
if (isPermissionsDirty()) {
BootstrapDialog.confirm({
closable: true,
title: '',
message: 'Changes will be discarded.',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- $scope.$apply(function () {
- $scope.showPermissions = false
- })
+ $scope.$apply(function() {
+ $scope.showPermissions = false;
+ });
}
- }
- })
+ },
+ });
} else {
- $scope.showPermissions = false
+ $scope.showPermissions = false;
}
- }
+ };
- function convertPermissionsToArray () {
- $scope.permissions.owners = angular.element('#selectOwners').val()
- $scope.permissions.readers = angular.element('#selectReaders').val()
- $scope.permissions.runners = angular.element('#selectRunners').val()
- $scope.permissions.writers = angular.element('#selectWriters').val()
- angular.element('.permissionsForm select').find('option:not([is-select2="false"])').remove()
+ function convertPermissionsToArray() {
+ $scope.permissions.owners = angular.element('#selectOwners').val();
+ $scope.permissions.readers = angular.element('#selectReaders').val();
+ $scope.permissions.runners = angular.element('#selectRunners').val();
+ $scope.permissions.writers = angular.element('#selectWriters').val();
+ angular.element('.permissionsForm select').find('option:not([is-select2="false"])').remove();
}
$scope.hasMatches = function() {
- return $scope.search.occurrencesCount > 0
- }
+ return $scope.search.occurrencesCount > 0;
+ };
const markAllOccurrences = function() {
- $scope.search.occurrencesCount = 0
- $scope.search.occurrencesHidden = false
- currentSearchParagraph = 0
- $scope.$broadcast('markAllOccurrences', $scope.search.searchText)
- $scope.search.currentOccurrence = $scope.search.occurrencesCount > 0 ? 1 : 0
- }
+ $scope.search.occurrencesCount = 0;
+ $scope.search.occurrencesHidden = false;
+ currentSearchParagraph = 0;
+ $scope.$broadcast('markAllOccurrences', $scope.search.searchText);
+ $scope.search.currentOccurrence = $scope.search.occurrencesCount > 0 ? 1 : 0;
+ };
$scope.markAllOccurrencesAndHighlightFirst = function() {
- $scope.search.needHighlightFirst = true
- markAllOccurrences()
- }
+ $scope.search.needHighlightFirst = true;
+ markAllOccurrences();
+ };
const increaseCurrentOccurence = function() {
- ++$scope.search.currentOccurrence
+ ++$scope.search.currentOccurrence;
if ($scope.search.currentOccurrence > $scope.search.occurrencesCount) {
- $scope.search.currentOccurrence = 1
+ $scope.search.currentOccurrence = 1;
}
- }
+ };
const decreaseCurrentOccurence = function() {
- --$scope.search.currentOccurrence
+ --$scope.search.currentOccurrence;
if ($scope.search.currentOccurrence === 0) {
- $scope.search.currentOccurrence = $scope.search.occurrencesCount
+ $scope.search.currentOccurrence = $scope.search.occurrencesCount;
}
- }
+ };
const sendNextOccurrenceMessage = function() {
if ($scope.search.occurrencesCount === 0) {
- markAllOccurrences()
+ markAllOccurrences();
if ($scope.search.occurrencesCount === 0) {
- return
+ return;
}
}
if ($scope.search.occurrencesHidden) {
- markAllOccurrences()
+ markAllOccurrences();
}
- $scope.$broadcast('nextOccurrence', $scope.note.paragraphs[currentSearchParagraph].id)
- }
+ $scope.$broadcast('nextOccurrence', $scope.note.paragraphs[currentSearchParagraph].id);
+ };
const sendPrevOccurrenceMessage = function() {
if ($scope.search.occurrencesCount === 0) {
- markAllOccurrences()
+ markAllOccurrences();
if ($scope.search.occurrencesCount === 0) {
- return
+ return;
}
}
if ($scope.search.occurrencesHidden) {
- markAllOccurrences()
- currentSearchParagraph = $scope.note.paragraphs.length - 1
+ markAllOccurrences();
+ currentSearchParagraph = $scope.note.paragraphs.length - 1;
}
- $scope.$broadcast('prevOccurrence', $scope.note.paragraphs[currentSearchParagraph].id)
- }
+ $scope.$broadcast('prevOccurrence', $scope.note.paragraphs[currentSearchParagraph].id);
+ };
const increaseCurrentSearchParagraph = function() {
- ++currentSearchParagraph
+ ++currentSearchParagraph;
if (currentSearchParagraph >= $scope.note.paragraphs.length) {
- currentSearchParagraph = 0
+ currentSearchParagraph = 0;
}
- }
+ };
- const decreaseCurrentSearchParagraph = function () {
- --currentSearchParagraph
+ const decreaseCurrentSearchParagraph = function() {
+ --currentSearchParagraph;
if (currentSearchParagraph === -1) {
- currentSearchParagraph = $scope.note.paragraphs.length - 1
+ currentSearchParagraph = $scope.note.paragraphs.length - 1;
}
- }
+ };
$scope.$on('occurrencesExists', function(event, count) {
- $scope.search.occurrencesCount += count
+ $scope.search.occurrencesCount += count;
if ($scope.search.needHighlightFirst) {
- sendNextOccurrenceMessage()
- $scope.search.needHighlightFirst = false
+ sendNextOccurrenceMessage();
+ $scope.search.needHighlightFirst = false;
}
- })
+ });
$scope.nextOccurrence = function() {
- sendNextOccurrenceMessage()
- increaseCurrentOccurence()
- }
+ sendNextOccurrenceMessage();
+ increaseCurrentOccurence();
+ };
$scope.$on('noNextOccurrence', function(event) {
- increaseCurrentSearchParagraph()
- sendNextOccurrenceMessage()
- })
+ increaseCurrentSearchParagraph();
+ sendNextOccurrenceMessage();
+ });
$scope.prevOccurrence = function() {
- sendPrevOccurrenceMessage()
- decreaseCurrentOccurence()
- }
+ sendPrevOccurrenceMessage();
+ decreaseCurrentOccurence();
+ };
$scope.$on('noPrevOccurrence', function(event) {
- decreaseCurrentSearchParagraph()
- sendPrevOccurrenceMessage()
- })
+ decreaseCurrentSearchParagraph();
+ sendPrevOccurrenceMessage();
+ });
$scope.$on('editorClicked', function() {
- $scope.search.occurrencesHidden = true
- $scope.$broadcast('unmarkAll')
- })
+ $scope.search.occurrencesHidden = true;
+ $scope.$broadcast('unmarkAll');
+ });
$scope.replace = function() {
if ($scope.search.occurrencesCount === 0) {
- $scope.markAllOccurrencesAndHighlightFirst()
+ $scope.markAllOccurrencesAndHighlightFirst();
if ($scope.search.occurrencesCount === 0) {
- return
+ return;
}
}
if ($scope.search.occurrencesHidden) {
- $scope.markAllOccurrencesAndHighlightFirst()
- return
+ $scope.markAllOccurrencesAndHighlightFirst();
+ return;
}
- $scope.$broadcast('replaceCurrent', $scope.search.searchText, $scope.search.replaceText)
+ $scope.$broadcast('replaceCurrent', $scope.search.searchText, $scope.search.replaceText);
if ($scope.search.needToSendNextOccurrenceAfterReplace) {
- sendNextOccurrenceMessage()
- $scope.search.needToSendNextOccurrenceAfterReplace = false
+ sendNextOccurrenceMessage();
+ $scope.search.needToSendNextOccurrenceAfterReplace = false;
}
- }
+ };
$scope.$on('occurrencesCountChanged', function(event, cnt) {
- $scope.search.occurrencesCount += cnt
+ $scope.search.occurrencesCount += cnt;
if ($scope.search.occurrencesCount === 0) {
- $scope.search.currentOccurrence = 0
+ $scope.search.currentOccurrence = 0;
} else {
- $scope.search.currentOccurrence += cnt + 1
+ $scope.search.currentOccurrence += cnt + 1;
if ($scope.search.currentOccurrence > $scope.search.occurrencesCount) {
- $scope.search.currentOccurrence = 1
+ $scope.search.currentOccurrence = 1;
}
}
- })
+ });
$scope.replaceAll = function() {
if ($scope.search.occurrencesCount === 0) {
- return
+ return;
}
if ($scope.search.occurrencesHidden) {
- $scope.markAllOccurrencesAndHighlightFirst()
+ $scope.markAllOccurrencesAndHighlightFirst();
}
- $scope.$broadcast('replaceAll', $scope.search.searchText, $scope.search.replaceText)
- $scope.markAllOccurrencesAndHighlightFirst()
- }
+ $scope.$broadcast('replaceAll', $scope.search.searchText, $scope.search.replaceText);
+ $scope.markAllOccurrencesAndHighlightFirst();
+ };
$scope.$on('noNextOccurrenceAfterReplace', function() {
- $scope.search.occurrencesCount = 0
- $scope.search.needHighlightFirst = false
- $scope.search.needToSendNextOccurrenceAfterReplace = false
- $scope.$broadcast('checkOccurrences')
- increaseCurrentSearchParagraph()
+ $scope.search.occurrencesCount = 0;
+ $scope.search.needHighlightFirst = false;
+ $scope.search.needToSendNextOccurrenceAfterReplace = false;
+ $scope.$broadcast('checkOccurrences');
+ increaseCurrentSearchParagraph();
if ($scope.search.occurrencesCount > 0) {
- $scope.search.needToSendNextOccurrenceAfterReplace = true
+ $scope.search.needToSendNextOccurrenceAfterReplace = true;
}
- })
+ });
$scope.onPressOnFindInput = function(event) {
if (event.keyCode === 13) {
- $scope.nextOccurrence()
+ $scope.nextOccurrence();
}
- }
+ };
let makeSearchBoxVisible = function() {
if ($scope.search.searchBoxOpened) {
- $scope.search.searchBoxOpened = false
- console.log('make 0')
- $scope.search.left = '0px'
+ $scope.search.searchBoxOpened = false;
+ console.log('make 0');
+ $scope.search.left = '0px';
} else {
- $scope.search.searchBoxOpened = true
- let searchGroupRect = angular.element('#searchGroup')[0].getBoundingClientRect()
- console.log('make visible')
- let dropdownRight = searchGroupRect.left + $scope.search.searchBoxWidth
- console.log(dropdownRight + ' ' + window.innerWidth)
+ $scope.search.searchBoxOpened = true;
+ let searchGroupRect = angular.element('#searchGroup')[0].getBoundingClientRect();
+ console.log('make visible');
+ let dropdownRight = searchGroupRect.left + $scope.search.searchBoxWidth;
+ console.log(dropdownRight + ' ' + window.innerWidth);
if (dropdownRight + 5 > window.innerWidth) {
- $scope.search.left = window.innerWidth - dropdownRight - 15 + 'px'
+ $scope.search.left = window.innerWidth - dropdownRight - 15 + 'px';
}
}
- }
+ };
$scope.searchClicked = function() {
- makeSearchBoxVisible()
- }
+ makeSearchBoxVisible();
+ };
$scope.$on('toggleSearchBox', function() {
- let elem = angular.element('#searchGroup')
+ let elem = angular.element('#searchGroup');
if ($scope.search.searchBoxOpened) {
- elem.removeClass('open')
+ elem.removeClass('open');
} else {
- elem.addClass('open')
+ elem.addClass('open');
}
- $timeout(makeSearchBoxVisible())
- })
+ $timeout(makeSearchBoxVisible());
+ });
$scope.restartInterpreter = function(interpreter) {
const thisConfirm = BootstrapDialog.confirm({
@@ -999,37 +1011,37 @@ function NotebookCtrl ($scope, $route, $routeParams, $location, $rootScope,
callback: function(result) {
if (result) {
let payload = {
- 'noteId': $scope.note.id
- }
+ 'noteId': $scope.note.id,
+ };
- thisConfirm.$modalFooter.find('button').addClass('disabled')
+ thisConfirm.$modalFooter.find('button').addClass('disabled');
thisConfirm.$modalFooter.find('button:contains("OK")')
- .html('<i class="fa fa-circle-o-notch fa-spin"></i> Saving Setting')
+ .html('<i class="fa fa-circle-o-notch fa-spin"></i> Saving Setting');
$http.put(baseUrlSrv.getRestApiBase() + '/interpreter/setting/restart/' + interpreter.id, payload)
.success(function(data, status, headers, config) {
- let index = _.findIndex($scope.interpreterSettings, {'id': interpreter.id})
- $scope.interpreterSettings[index] = data.body
- thisConfirm.close()
- }).error(function (data, status, headers, config) {
- thisConfirm.close()
- console.log('Error %o %o', status, data.message)
+ let index = _.findIndex($scope.interpreterSettings, {'id': interpreter.id});
+ $scope.interpreterSettings[index] = data.body;
+ thisConfirm.close();
+ }).error(function(data, status, headers, config) {
+ thisConfirm.close();
+ console.log('Error %o %o', status, data.message);
BootstrapDialog.show({
title: 'Error restart interpreter.',
- message: data.message
- })
- })
- return false
+ message: data.message,
+ });
+ });
+ return false;
}
- }
- })
- }
+ },
+ });
+ };
- $scope.savePermissions = function () {
+ $scope.savePermissions = function() {
if ($scope.isAnonymous || $rootScope.ticket.principal.trim().length === 0) {
- $scope.blockAnonUsers()
+ $scope.blockAnonUsers();
}
- convertPermissionsToArray()
+ convertPermissionsToArray();
if ($scope.isOwnerEmpty()) {
BootstrapDialog.show({
closable: false,
@@ -1040,43 +1052,43 @@ function NotebookCtrl ($scope, $route, $routeParams, $location, $rootScope,
{
label: 'Set',
action: function(dialog) {
- dialog.close()
- $scope.permissions.owners = [$rootScope.ticket.principal]
- $scope.setPermissions()
- }
+ dialog.close();
+ $scope.permissions.owners = [$rootScope.ticket.principal];
+ $scope.setPermissions();
+ },
},
{
label: 'Cancel',
action: function(dialog) {
- dialog.close()
- $scope.openPermissions()
- }
- }
- ]
- })
+ dialog.close();
+ $scope.openPermissions();
+ },
+ },
+ ],
+ });
} else {
- $scope.setPermissions()
+ $scope.setPermissions();
}
- }
+ };
$scope.setPermissions = function() {
$http.put(baseUrlSrv.getRestApiBase() + '/notebook/' + $scope.note.id + '/permissions',
$scope.permissions, {withCredentials: true})
- .success(function (data, status, headers, config) {
- getPermissions(function () {
- console.log('Note permissions %o saved', $scope.permissions)
+ .success(function(data, status, headers, config) {
+ getPermissions(function() {
+ console.log('Note permissions %o saved', $scope.permissions);
BootstrapDialog.alert({
closable: true,
title: 'Permissions Saved Successfully',
message: 'Owners : ' + $scope.permissions.owners + '\n\n' + 'Readers : ' +
$scope.permissions.readers + '\n\n' + 'Runners : ' + $scope.permissions.runners +
- '\n\n' + 'Writers : ' + $scope.permissions.writers
- })
- $scope.showPermissions = false
- })
+ '\n\n' + 'Writers : ' + $scope.permissions.writers,
+ });
+ $scope.showPermissions = false;
+ });
})
- .error(function (data, status, headers, config) {
- console.log('Error %o %o', status, data.message)
+ .error(function(data, status, headers, config) {
+ console.log('Error %o %o', status, data.message);
BootstrapDialog.show({
closable: false,
closeByBackdrop: false,
@@ -1086,362 +1098,366 @@ function NotebookCtrl ($scope, $route, $routeParams, $location, $rootScope,
buttons: [
{
label: 'Login',
- action: function (dialog) {
- dialog.close()
+ action: function(dialog) {
+ dialog.close();
angular.element('#loginModal').modal({
- show: 'true'
- })
- }
+ show: 'true',
+ });
+ },
},
{
label: 'Cancel',
- action: function (dialog) {
- dialog.close()
- $location.path('/')
- }
- }
- ]
- })
- })
- }
-
- $scope.togglePermissions = function () {
- let principal = $rootScope.ticket.principal
- $scope.isAnonymous = principal === 'anonymous' ? true : false
+ action: function(dialog) {
+ dialog.close();
+ $location.path('/');
+ },
+ },
+ ],
+ });
+ });
+ };
+
+ $scope.togglePermissions = function() {
+ let principal = $rootScope.ticket.principal;
+ $scope.isAnonymous = principal === 'anonymous' ? true : false;
if (!!principal && $scope.isAnonymous) {
- $scope.blockAnonUsers()
+ $scope.blockAnonUsers();
} else {
if ($scope.showPermissions) {
- $scope.closePermissions()
- angular.element('#selectOwners').select2({})
- angular.element('#selectReaders').select2({})
- angular.element('#selectRunners').select2({})
- angular.element('#selectWriters').select2({})
+ $scope.closePermissions();
+ angular.element('#selectOwners').select2({});
+ angular.element('#selectReaders').select2({});
+ angular.element('#selectRunners').select2({});
+ angular.element('#selectWriters').select2({});
} else {
- $scope.closeAdditionalBoards()
- $scope.openPermissions()
+ $scope.closeAdditionalBoards();
+ $scope.openPermissions();
}
}
- }
+ };
- $scope.setIamOwner = function () {
+ $scope.setIamOwner = function() {
if ($scope.permissions.owners.length > 0 &&
_.indexOf($scope.permissions.owners, $rootScope.ticket.principal) < 0) {
- $scope.isOwner = false
- return false
+ $scope.isOwner = false;
+ return false;
}
- $scope.isOwner = true
- return true
- }
+ $scope.isOwner = true;
+ return true;
+ };
- $scope.toggleNotePersonalizedMode = function () {
- let personalizedMode = $scope.note.config.personalizedMode
+ $scope.toggleNotePersonalizedMode = function() {
+ let personalizedMode = $scope.note.config.personalizedMode;
if ($scope.isOwner) {
BootstrapDialog.confirm({
closable: true,
title: 'Setting the result display',
- message: function (dialog) {
- let modeText = $scope.note.config.personalizedMode === 'true' ? 'collaborate' : 'personalize'
- return 'Do you want to <span class="text-info">' + modeText + '</span> your analysis?'
+ message: function(dialog) {
+ let modeText = $scope.note.config.personalizedMode === 'true' ? 'collaborate' : 'personalize';
+ return 'Do you want to <span class="text-info">' + modeText + '</span> your analysis?';
},
- callback: function (result) {
+ callback: function(result) {
if (result) {
if ($scope.note.config.personalizedMode === undefined) {
- $scope.note.config.personalizedMode = 'false'
+ $scope.note.config.personalizedMode = 'false';
}
- $scope.note.config.personalizedMode = personalizedMode === 'true' ? 'false' : 'true'
- websocketMsgSrv.updatePersonalizedMode($scope.note.id, $scope.note.config.personalizedMode)
+ $scope.note.config.personalizedMode = personalizedMode === 'true' ? 'false' : 'true';
+ websocketMsgSrv.updatePersonalizedMode($scope.note.id, $scope.note.config.personalizedMode);
}
- }
- })
+ },
+ });
}
- }
+ };
- const isSettingDirty = function () {
+ const isSettingDirty = function() {
if (angular.equals($scope.interpreterBindings, $scope.interpreterBindingsOrig)) {
- return false
+ return false;
} else {
- return true
+ return true;
}
- }
+ };
- const isPermissionsDirty = function () {
+ const isPermissionsDirty = function() {
if (angular.equals($scope.permissions, $scope.permissionsOrig)) {
- return false
+ return false;
} else {
- return true
+ return true;
}
- }
+ };
- angular.element(document).click(function () {
- angular.element('.ace_autocomplete').hide()
- })
+ angular.element(document).click(function() {
+ angular.element('.ace_autocomplete').hide();
+ });
$scope.isOwnerEmpty = function() {
if ($scope.permissions.owners.length > 0) {
for (let i = 0; i < $scope.permissions.owners.length; i++) {
if ($scope.permissions.owners[i].trim().length > 0) {
- return false
+ return false;
} else if (i === $scope.permissions.owners.length - 1) {
- return true
+ return true;
}
}
} else {
- return true
+ return true;
}
- }
+ };
/*
** $scope.$on functions below
*/
- $scope.$on('runAllAbove', function (event, paragraph, isNeedConfirm) {
- let allParagraphs = $scope.note.paragraphs
- let toRunParagraphs = []
+ $scope.$on('runAllAbove', function(event, paragraph, isNeedConfirm) {
+ let allParagraphs = $scope.note.paragraphs;
+ let toRunParagraphs = [];
for (let i = 0; allParagraphs[i] !== paragraph; i++) {
- if (i === allParagraphs.length - 1) { return } // if paragraph not in array of all paragraphs
- toRunParagraphs.push(allParagraphs[i])
+ if (i === allParagraphs.length - 1) {
+ return;
+ } // if paragraph not in array of all paragraphs
+ toRunParagraphs.push(allParagraphs[i]);
}
- const paragraphs = toRunParagraphs.map(p => {
+ const paragraphs = toRunParagraphs.map((p) => {
return {
id: p.id,
title: p.title,
paragraph: p.text,
config: p.config,
- params: p.settings.params
- }
- })
+ params: p.settings.params,
+ };
+ });
if (!isNeedConfirm) {
- websocketMsgSrv.runAllParagraphs($scope.note.id, paragraphs)
+ websocketMsgSrv.runAllParagraphs($scope.note.id, paragraphs);
} else {
BootstrapDialog.confirm({
closable: true,
title: '',
message: 'Run all above?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- websocketMsgSrv.runAllParagraphs($scope.note.id, paragraphs)
+ websocketMsgSrv.runAllParagraphs($scope.note.id, paragraphs);
}
- }
- })
+ },
+ });
}
- $scope.saveCursorPosition(paragraph)
- })
+ $scope.saveCursorPosition(paragraph);
+ });
- $scope.$on('runAllBelowAndCurrent', function (event, paragraph, isNeedConfirm) {
- let allParagraphs = $scope.note.paragraphs
- let toRunParagraphs = []
+ $scope.$on('runAllBelowAndCurrent', function(event, paragraph, isNeedConfirm) {
+ let allParagraphs = $scope.note.paragraphs;
+ let toRunParagraphs = [];
for (let i = allParagraphs.length - 1; allParagraphs[i] !== paragraph; i--) {
- if (i < 0) { return } // if paragraph not in array of all paragraphs
- toRunParagraphs.push(allParagraphs[i])
+ if (i < 0) {
+ return;
+ } // if paragraph not in array of all paragraphs
+ toRunParagraphs.push(allParagraphs[i]);
}
- toRunParagraphs.push(paragraph)
- toRunParagraphs.reverse()
+ toRunParagraphs.push(paragraph);
+ toRunParagraphs.reverse();
- const paragraphs = toRunParagraphs.map(p => {
+ const paragraphs = toRunParagraphs.map((p) => {
return {
id: p.id,
title: p.title,
paragraph: p.text,
config: p.config,
- params: p.settings.params
- }
- })
+ params: p.settings.params,
+ };
+ });
if (!isNeedConfirm) {
- websocketMsgSrv.runAllParagraphs($scope.note.id, paragraphs)
+ websocketMsgSrv.runAllParagraphs($scope.note.id, paragraphs);
} else {
BootstrapDialog.confirm({
closable: true,
title: '',
message: 'Run current and all below?',
- callback: function (result) {
+ callback: function(result) {
if (result) {
- websocketMsgSrv.runAllParagraphs($scope.note.id, paragraphs)
+ websocketMsgSrv.runAllParagraphs($scope.note.id, paragraphs);
}
- }
- })
+ },
+ });
}
- $scope.saveCursorPosition(paragraph)
- })
+ $scope.saveCursorPosition(paragraph);
+ });
- $scope.saveCursorPosition = function (paragraph) {
+ $scope.saveCursorPosition = function(paragraph) {
let angParagEditor = angular
.element('#' + paragraph.id + '_paragraphColumn_main')
- .scope().editor
- let col = angParagEditor.selection.lead.column
- let row = angParagEditor.selection.lead.row
- $scope.$broadcast('focusParagraph', paragraph.id, row + 1, col)
- }
+ .scope().editor;
+ let col = angParagEditor.selection.lead.column;
+ let row = angParagEditor.selection.lead.row;
+ $scope.$broadcast('focusParagraph', paragraph.id, row + 1, col);
+ };
- $scope.$on('setConnectedStatus', function (event, param) {
+ $scope.$on('setConnectedStatus', function(event, param) {
if (connectedOnce && param) {
- initNotebook()
+ initNotebook();
}
- connectedOnce = true
- })
+ connectedOnce = true;
+ });
- $scope.$on('moveParagraphUp', function (event, paragraph) {
- let newIndex = -1
+ $scope.$on('moveParagraphUp', function(event, paragraph) {
+ let newIndex = -1;
for (let i = 0; i < $scope.note.paragraphs.length; i++) {
if ($scope.note.paragraphs[i].id === paragraph.id) {
- newIndex = i - 1
- break
+ newIndex = i - 1;
+ break;
}
}
if (newIndex < 0 || newIndex >= $scope.note.paragraphs.length) {
- return
+ return;
}
// save dirtyText of moving paragraphs.
- let prevParagraph = $scope.note.paragraphs[newIndex]
+ let prevParagraph = $scope.note.paragraphs[newIndex];
angular
.element('#' + paragraph.id + '_paragraphColumn_main')
.scope()
- .saveParagraph(paragraph)
+ .saveParagraph(paragraph);
angular
.element('#' + prevParagraph.id + '_paragraphColumn_main')
.scope()
- .saveParagraph(prevParagraph)
- websocketMsgSrv.moveParagraph(paragraph.id, newIndex)
- })
+ .saveParagraph(prevParagraph);
+ websocketMsgSrv.moveParagraph(paragraph.id, newIndex);
+ });
- $scope.$on('moveParagraphDown', function (event, paragraph) {
- let newIndex = -1
+ $scope.$on('moveParagraphDown', function(event, paragraph) {
+ let newIndex = -1;
for (let i = 0; i < $scope.note.paragraphs.length; i++) {
if ($scope.note.paragraphs[i].id === paragraph.id) {
- newIndex = i + 1
- break
+ newIndex = i + 1;
+ break;
}
}
if (newIndex < 0 || newIndex >= $scope.note.paragraphs.length) {
- return
+ return;
}
// save dirtyText of moving paragraphs.
- let nextParagraph = $scope.note.paragraphs[newIndex]
+ let nextParagraph = $scope.note.paragraphs[newIndex];
angular
.element('#' + paragraph.id + '_paragraphColumn_main')
.scope()
- .saveParagraph(paragraph)
+ .saveParagraph(paragraph);
angular
.element('#' + nextParagraph.id + '_paragraphColumn_main')
.scope()
- .saveParagraph(nextParagraph)
- websocketMsgSrv.moveParagraph(paragraph.id, newIndex)
- })
+ .saveParagraph(nextParagraph);
+ websocketMsgSrv.moveParagraph(paragraph.id, newIndex);
+ });
- $scope.$on('moveFocusToPreviousParagraph', function (event, currentParagraphId) {
- let focus = false
+ $scope.$on('moveFocusToPreviousParagraph', function(event, currentParagraphId) {
+ let focus = false;
for (let i = $scope.note.paragraphs.length - 1; i >= 0; i--) {
if (focus === false) {
if ($scope.note.paragraphs[i].id === currentParagraphId) {
- focus = true
- continue
+ focus = true;
+ continue;
}
} else {
- $scope.$broadcast('focusParagraph', $scope.note.paragraphs[i].id, -1)
- break
+ $scope.$broadcast('focusParagraph', $scope.note.paragraphs[i].id, -1);
+ break;
}
}
- })
+ });
- $scope.$on('moveFocusToNextParagraph', function (event, currentParagraphId) {
- let focus = false
+ $scope.$on('moveFocusToNextParagraph', function(event, currentParagraphId) {
+ let focus = false;
for (let i = 0; i < $scope.note.paragraphs.length; i++) {
if (focus === false) {
if ($scope.note.paragraphs[i].id === currentParagraphId) {
- focus = true
- continue
+ focus = true;
+ continue;
}
} else {
- $scope.$broadcast('focusParagraph', $scope.note.paragraphs[i].id, 0)
- break
+ $scope.$broadcast('focusParagraph', $scope.note.paragraphs[i].id, 0);
+ break;
}
}
- })
+ });
- $scope.$on('insertParagraph', function (event, paragraphId, position) {
+ $scope.$on('insertParagraph', function(event, paragraphId, position) {
if ($scope.revisionView === true) {
- return
+ return;
}
- let newIndex = -1
+ let newIndex = -1;
for (let i = 0; i < $scope.note.paragraphs.length; i++) {
if ($scope.note.paragraphs[i].id === paragraphId) {
// determine position of where to add new paragraph; default is below
if (position === 'above') {
- newIndex = i
+ newIndex = i;
} else {
- newIndex = i + 1
+ newIndex = i + 1;
}
- break
+ break;
}
}
if (newIndex < 0 || newIndex > $scope.note.paragraphs.length) {
- return
+ return;
}
- websocketMsgSrv.insertParagraph(newIndex)
- })
+ websocketMsgSrv.insertParagraph(newIndex);
+ });
- $scope.$on('setNoteContent', function (event, note) {
+ $scope.$on('setNoteContent', function(event, note) {
if (note === undefined) {
- $location.path('/')
+ $location.path('/');
}
- $scope.note = note
+ $scope.note = note;
- $scope.paragraphUrl = $routeParams.paragraphId
- $scope.asIframe = $routeParams.asIframe
+ $scope.paragraphUrl = $routeParams.paragraphId;
+ $scope.asIframe = $routeParams.asIframe;
if ($scope.paragraphUrl) {
- $scope.note = cleanParagraphExcept($scope.paragraphUrl, $scope.note)
- $scope.$broadcast('$unBindKeyEvent', $scope.$unBindKeyEvent)
- $rootScope.$broadcast('setIframe', $scope.asIframe)
- initializeLookAndFeel()
- return
+ $scope.note = cleanParagraphExcept($scope.paragraphUrl, $scope.note);
+ $scope.$broadcast('$unBindKeyEvent', $scope.$unBindKeyEvent);
+ $rootScope.$broadcast('setIframe', $scope.asIframe);
+ initializeLookAndFeel();
+ return;
}
- initializeLookAndFeel()
+ initializeLookAndFeel();
// open interpreter binding setting when there're none selected
- getInterpreterBindings()
- getPermissions()
- let isPersonalized = $scope.note.config.personalizedMode
- isPersonalized = isPersonalized === undefined ? 'false' : isPersonalized
- $scope.note.config.personalizedMode = isPersonalized
- })
-
- $scope.$on('$routeChangeStart', function (event, next, current) {
+ getInterpreterBindings();
+ getPermissions();
+ let isPersonalized = $scope.note.config.personalizedMode;
+ isPersonalized = isPersonalized === undefined ? 'false' : isPersonalized;
+ $scope.note.config.personalizedMode = isPersonalized;
+ });
+
+ $scope.$on('$routeChangeStart', function(event, next, current) {
if (!$scope.note || !$scope.note.paragraphs) {
- return
+ return;
}
if ($scope.note && $scope.note.paragraphs) {
- $scope.note.paragraphs.map(par => {
+ $scope.note.paragraphs.map((par) => {
if ($scope.allowLeave === true) {
- return
+ return;
}
let thisScope = angular.element(
- '#' + par.id + '_paragraphColumn_main').scope()
+ '#' + par.id + '_paragraphColumn_main').scope();
if (thisScope.dirtyText === undefined ||
thisScope.originalText === undefined ||
thisScope.dirtyText === thisScope.originalText) {
- return true
+ return true;
} else {
- event.preventDefault()
- $scope.showParagraphWarning(next)
+ event.preventDefault();
+ $scope.showParagraphWarning(next);
}
- })
+ });
}
- })
+ });
- $scope.showParagraphWarning = function (next) {
+ $scope.showParagraphWarning = function(next) {
if ($scope.paragraphWarningDialog.opened !== true) {
$scope.paragraphWarningDialog = BootstrapDialog.show({
closable: false,
@@ -1451,62 +1467,62 @@ function NotebookCtrl ($scope, $route, $routeParams, $location, $rootScope,
message: 'Changes that you have made will not be saved.',
buttons: [{
label: 'Stay',
- action: function (dialog) {
- dialog.close()
- }
+ action: function(dialog) {
+ dialog.close();
+ },
}, {
label: 'Leave',
- action: function (dialog) {
- dialog.close()
- let locationToRedirect = next['$$route']['originalPath']
- Object.keys(next.pathParams).map(key => {
+ action: function(dialog) {
+ dialog.close();
+ let locationToRedirect = next['$$route']['originalPath'];
+ Object.keys(next.pathParams).map((key) => {
locationToRedirect = locationToRedirect.replace(':' + key,
- next.pathParams[key])
- })
- $scope.allowLeave = true
- $location.path(locationToRedirect)
- }
- }]
- })
+ next.pathParams[key]);
+ });
+ $scope.allowLeave = true;
+ $location.path(locationToRedirect);
+ },
+ }],
+ });
}
- }
+ };
- $scope.$on('saveNoteForms', function (event, data) {
- $scope.note.noteForms = data.formsData.forms
- $scope.note.noteParams = data.formsData.params
- })
+ $scope.$on('saveNoteForms', function(event, data) {
+ $scope.note.noteForms = data.formsData.forms;
+ $scope.note.noteParams = data.formsData.params;
+ });
$scope.isShowNoteForms = function() {
if ($scope.note && !angular.equals({}, $scope.note.noteForms)) {
- return true
+ return true;
}
- return false
- }
+ return false;
+ };
- $scope.saveNoteForms = function () {
- websocketMsgSrv.saveNoteForms($scope.note)
- }
+ $scope.saveNoteForms = function() {
+ websocketMsgSrv.saveNoteForms($scope.note);
+ };
- $scope.removeNoteForms = function (formName) {
- websocketMsgSrv.removeNoteForms($scope.note, formName)
- }
+ $scope.removeNoteForms = function(formName) {
+ websocketMsgSrv.removeNoteForms($scope.note, formName);
+ };
- $scope.$on('$destroy', function () {
- angular.element(window).off('beforeunload')
- $scope.killSaveTimer()
- $scope.saveNote()
+ $scope.$on('$destroy', function() {
+ angular.element(window).off('beforeunload');
+ $scope.killSaveTimer();
+ $scope.saveNote();
- document.removeEventListener('click', $scope.focusParagraphOnClick)
- document.removeEventListener('keydown', $scope.keyboardShortcut)
- })
+ document.removeEventListener('click', $scope.focusParagraphOnClick);
+ document.removeEventListener('keydown', $scope.keyboardShortcut);
+ });
- $scope.$on('$unBindKeyEvent', function () {
- document.removeEventListener('click', $scope.focusParagraphOnClick)
- document.removeEventListener('keydown', $scope.keyboardShortcut)
- })
+ $scope.$on('$unBindKeyEvent', function() {
+ document.removeEventListener('click', $scope.focusParagraphOnClick);
+ document.removeEventListener('keydown', $scope.keyboardShortcut);
+ });
- angular.element(window).bind('resize', function () {
- const actionbarHeight = document.getElementById('actionbar').lastElementChild.clientHeight
- angular.element(document.getElementById('content')).css('padding-top', actionbarHeight - 20)
- })
+ angular.element(window).bind('resize', function() {
+ const actionbarHeight = document.getElementById('actionbar').lastElementChild.clientHeight;
+ angular.element(document.getElementById('content')).css('padding-top', actionbarHeight - 20);
+ });
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/notebook.controller.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/notebook.controller.test.js b/zeppelin-web/src/app/notebook/notebook.controller.test.js
index f393d2c..be9f956 100644
--- a/zeppelin-web/src/app/notebook/notebook.controller.test.js
+++ b/zeppelin-web/src/app/notebook/notebook.controller.test.js
@@ -1,139 +1,139 @@
-describe('Controller: NotebookCtrl', function () {
- beforeEach(angular.mock.module('zeppelinWebApp'))
+describe('Controller: NotebookCtrl', function() {
+ beforeEach(angular.mock.module('zeppelinWebApp'));
- let scope
+ let scope;
let websocketMsgSrvMock = {
- getNote: function () {},
- listRevisionHistory: function () {},
- getInterpreterBindings: function () {},
- updateNote: function () {},
- renameNote: function () {}
- }
+ getNote: function() {},
+ listRevisionHistory: function() {},
+ getInterpreterBindings: function() {},
+ updateNote: function() {},
+ renameNote: function() {},
+ };
let baseUrlSrvMock = {
- getRestApiBase: function () {
- return 'http://localhost:8080'
- }
- }
+ getRestApiBase: function() {
+ return 'http://localhost:8080';
+ },
+ };
let noteMock = {
id: 1,
name: 'my note',
config: {},
- }
+ };
- beforeEach(inject(function ($controller, $rootScope) {
- scope = $rootScope.$new()
+ beforeEach(inject(function($controller, $rootScope) {
+ scope = $rootScope.$new();
$controller('NotebookCtrl', {
$scope: scope,
websocketMsgSrv: websocketMsgSrvMock,
- baseUrlSrv: baseUrlSrvMock
- })
- }))
+ baseUrlSrv: baseUrlSrvMock,
+ });
+ }));
- beforeEach(function () {
- scope.note = noteMock
- })
+ beforeEach(function() {
+ scope.note = noteMock;
+ });
let functions = ['getCronOptionNameFromValue', 'removeNote', 'runAllParagraphs', 'saveNote', 'toggleAllEditor',
'showAllEditor', 'hideAllEditor', 'toggleAllTable', 'hideAllTable', 'showAllTable', 'isNoteRunning',
'killSaveTimer', 'startSaveTimer', 'setLookAndFeel', 'setCronScheduler', 'setConfig', 'updateNoteName',
- 'openSetting', 'closeSetting', 'saveSetting', 'toggleSetting']
-
- functions.forEach(function (fn) {
- it('check for scope functions to be defined : ' + fn, function () {
- expect(scope[fn]).toBeDefined()
- })
- })
-
- it('should set default value of "editorToggled" to false', function () {
- expect(scope.editorToggled).toEqual(false)
- })
-
- it('should set "showSetting" to true when openSetting() is called', function () {
- scope.openSetting()
- expect(scope.showSetting).toEqual(true)
- })
-
- it('should set "showSetting" to false when closeSetting() is called', function () {
- scope.closeSetting()
- expect(scope.showSetting).toEqual(false)
- })
-
- it('should return the correct value for getCronOptionNameFromValue()', function () {
- let none = scope.getCronOptionNameFromValue()
- let oneMin = scope.getCronOptionNameFromValue('0 0/1 * * * ?')
- let fiveMin = scope.getCronOptionNameFromValue('0 0/5 * * * ?')
- let oneHour = scope.getCronOptionNameFromValue('0 0 0/1 * * ?')
- let threeHours = scope.getCronOptionNameFromValue('0 0 0/3 * * ?')
- let sixHours = scope.getCronOptionNameFromValue('0 0 0/6 * * ?')
- let twelveHours = scope.getCronOptionNameFromValue('0 0 0/12 * * ?')
- let oneDay = scope.getCronOptionNameFromValue('0 0 0 * * ?')
-
- expect(none).toEqual('')
- expect(oneMin).toEqual('1m')
- expect(fiveMin).toEqual('5m')
- expect(oneHour).toEqual('1h')
- expect(threeHours).toEqual('3h')
- expect(sixHours).toEqual('6h')
- expect(twelveHours).toEqual('12h')
- expect(oneDay).toEqual('1d')
- })
-
- it('should have "isNoteDirty" as null by default', function () {
- expect(scope.isNoteDirty).toEqual(null)
- })
-
- it('should first call killSaveTimer() when calling startSaveTimer()', function () {
- expect(scope.saveTimer).toEqual(null)
- spyOn(scope, 'killSaveTimer')
- scope.startSaveTimer()
- expect(scope.killSaveTimer).toHaveBeenCalled()
- })
-
- it('should set "saveTimer" when saveTimer() and killSaveTimer() are called', function () {
- expect(scope.saveTimer).toEqual(null)
- scope.startSaveTimer()
- expect(scope.saveTimer).toBeTruthy()
- scope.killSaveTimer()
- expect(scope.saveTimer).toEqual(null)
- })
-
- it('should NOT update note name when updateNoteName() is called with an invalid name', function () {
- spyOn(websocketMsgSrvMock, 'renameNote')
- scope.updateNoteName('')
- expect(scope.note.name).toEqual(noteMock.name)
- expect(websocketMsgSrvMock.renameNote).not.toHaveBeenCalled()
- scope.updateNoteName(' ')
- expect(scope.note.name).toEqual(noteMock.name)
- expect(websocketMsgSrvMock.renameNote).not.toHaveBeenCalled()
- scope.updateNoteName(scope.note.name)
- expect(scope.note.name).toEqual(noteMock.name)
- expect(websocketMsgSrvMock.renameNote).not.toHaveBeenCalled()
- })
-
- it('should update note name when updateNoteName() is called with a valid name', function () {
- spyOn(websocketMsgSrvMock, 'renameNote')
- let newName = 'Your Note'
- scope.updateNoteName(newName)
- expect(scope.note.name).toEqual(newName)
- expect(websocketMsgSrvMock.renameNote).toHaveBeenCalled()
- })
-
- it('should reload note info once per one "setNoteMenu" event', function () {
- spyOn(websocketMsgSrvMock, 'getNote')
- spyOn(websocketMsgSrvMock, 'listRevisionHistory')
-
- scope.$broadcast('setNoteMenu')
- expect(websocketMsgSrvMock.getNote.calls.count()).toEqual(0)
- expect(websocketMsgSrvMock.listRevisionHistory.calls.count()).toEqual(0)
-
- websocketMsgSrvMock.getNote.calls.reset()
- websocketMsgSrvMock.listRevisionHistory.calls.reset()
-
- scope.$broadcast('setNoteMenu')
- expect(websocketMsgSrvMock.getNote.calls.count()).toEqual(0)
- expect(websocketMsgSrvMock.listRevisionHistory.calls.count()).toEqual(0)
- })
-})
+ 'openSetting', 'closeSetting', 'saveSetting', 'toggleSetting'];
+
+ functions.forEach(function(fn) {
+ it('check for scope functions to be defined : ' + fn, function() {
+ expect(scope[fn]).toBeDefined();
+ });
+ });
+
+ it('should set default value of "editorToggled" to false', function() {
+ expect(scope.editorToggled).toEqual(false);
+ });
+
+ it('should set "showSetting" to true when openSetting() is called', function() {
+ scope.openSetting();
+ expect(scope.showSetting).toEqual(true);
+ });
+
+ it('should set "showSetting" to false when closeSetting() is called', function() {
+ scope.closeSetting();
+ expect(scope.showSetting).toEqual(false);
+ });
+
+ it('should return the correct value for getCronOptionNameFromValue()', function() {
+ let none = scope.getCronOptionNameFromValue();
+ let oneMin = scope.getCronOptionNameFromValue('0 0/1 * * * ?');
+ let fiveMin = scope.getCronOptionNameFromValue('0 0/5 * * * ?');
+ let oneHour = scope.getCronOptionNameFromValue('0 0 0/1 * * ?');
+ let threeHours = scope.getCronOptionNameFromValue('0 0 0/3 * * ?');
+ let sixHours = scope.getCronOptionNameFromValue('0 0 0/6 * * ?');
+ let twelveHours = scope.getCronOptionNameFromValue('0 0 0/12 * * ?');
+ let oneDay = scope.getCronOptionNameFromValue('0 0 0 * * ?');
+
+ expect(none).toEqual('');
+ expect(oneMin).toEqual('1m');
+ expect(fiveMin).toEqual('5m');
+ expect(oneHour).toEqual('1h');
+ expect(threeHours).toEqual('3h');
+ expect(sixHours).toEqual('6h');
+ expect(twelveHours).toEqual('12h');
+ expect(oneDay).toEqual('1d');
+ });
+
+ it('should have "isNoteDirty" as null by default', function() {
+ expect(scope.isNoteDirty).toEqual(null);
+ });
+
+ it('should first call killSaveTimer() when calling startSaveTimer()', function() {
+ expect(scope.saveTimer).toEqual(null);
+ spyOn(scope, 'killSaveTimer');
+ scope.startSaveTimer();
+ expect(scope.killSaveTimer).toHaveBeenCalled();
+ });
+
+ it('should set "saveTimer" when saveTimer() and killSaveTimer() are called', function() {
+ expect(scope.saveTimer).toEqual(null);
+ scope.startSaveTimer();
+ expect(scope.saveTimer).toBeTruthy();
+ scope.killSaveTimer();
+ expect(scope.saveTimer).toEqual(null);
+ });
+
+ it('should NOT update note name when updateNoteName() is called with an invalid name', function() {
+ spyOn(websocketMsgSrvMock, 'renameNote');
+ scope.updateNoteName('');
+ expect(scope.note.name).toEqual(noteMock.name);
+ expect(websocketMsgSrvMock.renameNote).not.toHaveBeenCalled();
+ scope.updateNoteName(' ');
+ expect(scope.note.name).toEqual(noteMock.name);
+ expect(websocketMsgSrvMock.renameNote).not.toHaveBeenCalled();
+ scope.updateNoteName(scope.note.name);
+ expect(scope.note.name).toEqual(noteMock.name);
+ expect(websocketMsgSrvMock.renameNote).not.toHaveBeenCalled();
+ });
+
+ it('should update note name when updateNoteName() is called with a valid name', function() {
+ spyOn(websocketMsgSrvMock, 'renameNote');
+ let newName = 'Your Note';
+ scope.updateNoteName(newName);
+ expect(scope.note.name).toEqual(newName);
+ expect(websocketMsgSrvMock.renameNote).toHaveBeenCalled();
+ });
+
+ it('should reload note info once per one "setNoteMenu" event', function() {
+ spyOn(websocketMsgSrvMock, 'getNote');
+ spyOn(websocketMsgSrvMock, 'listRevisionHistory');
+
+ scope.$broadcast('setNoteMenu');
+ expect(websocketMsgSrvMock.getNote.calls.count()).toEqual(0);
+ expect(websocketMsgSrvMock.listRevisionHistory.calls.count()).toEqual(0);
+
+ websocketMsgSrvMock.getNote.calls.reset();
+ websocketMsgSrvMock.listRevisionHistory.calls.reset();
+
+ scope.$broadcast('setNoteMenu');
+ expect(websocketMsgSrvMock.getNote.calls.count()).toEqual(0);
+ expect(websocketMsgSrvMock.listRevisionHistory.calls.count()).toEqual(0);
+ });
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/paragraph/clipboard.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/paragraph/clipboard.controller.js b/zeppelin-web/src/app/notebook/paragraph/clipboard.controller.js
index 0eb78e3..ea75b27 100644
--- a/zeppelin-web/src/app/notebook/paragraph/clipboard.controller.js
+++ b/zeppelin-web/src/app/notebook/paragraph/clipboard.controller.js
@@ -11,24 +11,24 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-angular.module('zeppelinWebApp').controller('clipboardCtrl', ClipboardController)
+angular.module('zeppelinWebApp').controller('clipboardCtrl', ClipboardController);
-function ClipboardController ($scope) {
- 'ngInject'
+function ClipboardController($scope) {
+ 'ngInject';
- $scope.complete = function (e) {
- $scope.copied = true
- $scope.tooltip = 'Copied!'
- setTimeout(function () {
- $scope.tooltip = 'Copy to clipboard'
- }, 400)
- }
- $scope.$watch('input', function () {
- $scope.copied = false
- $scope.tooltip = 'Copy to clipboard'
- })
- $scope.clipError = function (e) {
- console.log('Error: ' + e.name + ' - ' + e.message)
- $scope.tooltip = 'Not supported browser'
- }
+ $scope.complete = function(e) {
+ $scope.copied = true;
+ $scope.tooltip = 'Copied!';
+ setTimeout(function() {
+ $scope.tooltip = 'Copy to clipboard';
+ }, 400);
+ };
+ $scope.$watch('input', function() {
+ $scope.copied = false;
+ $scope.tooltip = 'Copy to clipboard';
+ });
+ $scope.clipError = function(e) {
+ console.log('Error: ' + e.name + ' - ' + e.message);
+ $scope.tooltip = 'Not supported browser';
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/notebook/paragraph/code-editor/code-editor.directive.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/paragraph/code-editor/code-editor.directive.js b/zeppelin-web/src/app/notebook/paragraph/code-editor/code-editor.directive.js
index 944f05d..db4a98f 100644
--- a/zeppelin-web/src/app/notebook/paragraph/code-editor/code-editor.directive.js
+++ b/zeppelin-web/src/app/notebook/paragraph/code-editor/code-editor.directive.js
@@ -12,7 +12,7 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').directive('codeEditor', CodeEditorDirective)
+angular.module('zeppelinWebApp').directive('codeEditor', CodeEditorDirective);
function CodeEditorDirective($templateRequest, $compile) {
return {
@@ -23,16 +23,16 @@ function CodeEditorDirective($templateRequest, $compile) {
dirtyText: '=dirtyText',
originalText: '=originalText',
onLoad: '=onLoad',
- revisionView: '=revisionView'
+ revisionView: '=revisionView',
},
- link: function (scope, element, attrs, controller) {
- $templateRequest('app/notebook/paragraph/code-editor/code-editor.directive.html').then(function (editorHtml) {
- let editor = angular.element(editorHtml)
- editor.attr('id', scope.paragraphId + '_editor')
- element.append(editor)
- $compile(editor)(scope)
- console.debug('codeEditor directive revision view is ' + scope.revisionView)
- })
- }
- }
+ link: function(scope, element, attrs, controller) {
+ $templateRequest('app/notebook/paragraph/code-editor/code-editor.directive.html').then(function(editorHtml) {
+ let editor = angular.element(editorHtml);
+ editor.attr('id', scope.paragraphId + '_editor');
+ element.append(editor);
+ $compile(editor)(scope);
+ console.debug('codeEditor directive revision view is ' + scope.revisionView);
+ });
+ },
+ };
}
[03/12] zeppelin git commit: [ZEPPELIN-3245] checkstyle/eslintrc for
zeppelin-web (JavaScript)
Posted by pr...@apache.org.
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/visualization/builtins/visualization-linechart.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/visualization/builtins/visualization-linechart.js b/zeppelin-web/src/app/visualization/builtins/visualization-linechart.js
index 6d47a9e..df161b9 100644
--- a/zeppelin-web/src/app/visualization/builtins/visualization-linechart.js
+++ b/zeppelin-web/src/app/visualization/builtins/visualization-linechart.js
@@ -12,39 +12,39 @@
* limitations under the License.
*/
-import Nvd3ChartVisualization from './visualization-nvd3chart'
-import PivotTransformation from '../../tabledata/pivot'
-import moment from 'moment'
+import Nvd3ChartVisualization from './visualization-nvd3chart';
+import PivotTransformation from '../../tabledata/pivot';
+import moment from 'moment';
/**
* Visualize data in line chart
*/
export default class LinechartVisualization extends Nvd3ChartVisualization {
- constructor (targetEl, config) {
- super(targetEl, config)
+ constructor(targetEl, config) {
+ super(targetEl, config);
- this.pivot = new PivotTransformation(config)
+ this.pivot = new PivotTransformation(config);
try {
- this.config.rotate = {degree: config.rotate.degree}
+ this.config.rotate = {degree: config.rotate.degree};
} catch (e) {
- this.config.rotate = {degree: '-45'}
+ this.config.rotate = {degree: '-45'};
}
}
- type () {
+ type() {
if (this.config.lineWithFocus) {
- return 'lineWithFocusChart'
+ return 'lineWithFocusChart';
} else {
- return 'lineChart'
+ return 'lineChart';
}
}
- getTransformation () {
- return this.pivot
+ getTransformation() {
+ return this.pivot;
}
- render (pivot) {
+ render(pivot) {
let d3Data = this.d3DataFromPivot(
pivot.schema,
pivot.rows,
@@ -53,113 +53,113 @@ export default class LinechartVisualization extends Nvd3ChartVisualization {
pivot.values,
false,
true,
- false)
+ false);
- this.xLabels = d3Data.xLabels
- super.render(d3Data)
- this.config.changeXLabel(this.config.xLabelStatus)
+ this.xLabels = d3Data.xLabels;
+ super.render(d3Data);
+ this.config.changeXLabel(this.config.xLabelStatus);
}
/**
* Set new config
*/
- setConfig (config) {
- super.setConfig(config)
- this.pivot.setConfig(config)
+ setConfig(config) {
+ super.setConfig(config);
+ this.pivot.setConfig(config);
// change mode
if (this.currentMode !== config.lineWithFocus) {
- super.destroy()
- this.currentMode = config.lineWithFocus
+ super.destroy();
+ this.currentMode = config.lineWithFocus;
}
}
- configureChart (chart) {
- let self = this
- let configObj = self.config
+ configureChart(chart) {
+ let self = this;
+ let configObj = self.config;
- chart.xAxis.tickFormat(function (d) {
+ chart.xAxis.tickFormat(function(d) {
if (self.config.isDateFormat) {
if (self.config.dateFormat) {
- return moment(new Date(self.xAxisTickFormat(d, self.xLabels))).format(self.config.dateFormat)
+ return moment(new Date(self.xAxisTickFormat(d, self.xLabels))).format(self.config.dateFormat);
} else {
- return moment(new Date(self.xAxisTickFormat(d, self.xLabels))).format('YYYY-MM-DD HH:mm:ss')
+ return moment(new Date(self.xAxisTickFormat(d, self.xLabels))).format('YYYY-MM-DD HH:mm:ss');
}
}
- return self.xAxisTickFormat(d, self.xLabels)
- })
- chart.yAxis.tickFormat(function (d) {
+ return self.xAxisTickFormat(d, self.xLabels);
+ });
+ chart.yAxis.tickFormat(function(d) {
if (d === undefined) {
- return 'N/A'
+ return 'N/A';
}
- return self.yAxisTickFormat(d, self.xLabels)
- })
- chart.yAxis.axisLabelDistance(50)
+ return self.yAxisTickFormat(d, self.xLabels);
+ });
+ chart.yAxis.axisLabelDistance(50);
if (chart.useInteractiveGuideline) { // lineWithFocusChart hasn't got useInteractiveGuideline
- chart.useInteractiveGuideline(true) // for better UX and performance issue. (https://github.com/novus/nvd3/issues/691)
+ chart.useInteractiveGuideline(true); // for better UX and performance issue. (https://github.com/novus/nvd3/issues/691)
}
if (this.config.forceY) {
- chart.forceY([0]) // force y-axis minimum to 0 for line chart.
+ chart.forceY([0]); // force y-axis minimum to 0 for line chart.
} else {
- chart.forceY([])
+ chart.forceY([]);
}
self.config.changeXLabel = function(type) {
switch (type) {
case 'default':
- self.chart._options['showXAxis'] = true
- self.chart._options['margin'] = {bottom: 50}
- self.chart.xAxis.rotateLabels(0)
- configObj.xLabelStatus = 'default'
- break
+ self.chart._options['showXAxis'] = true;
+ self.chart._options['margin'] = {bottom: 50};
+ self.chart.xAxis.rotateLabels(0);
+ configObj.xLabelStatus = 'default';
+ break;
case 'rotate':
- self.chart._options['showXAxis'] = true
- self.chart._options['margin'] = {bottom: 140}
- self.chart.xAxis.rotateLabels(configObj.rotate.degree)
- configObj.xLabelStatus = 'rotate'
- break
+ self.chart._options['showXAxis'] = true;
+ self.chart._options['margin'] = {bottom: 140};
+ self.chart.xAxis.rotateLabels(configObj.rotate.degree);
+ configObj.xLabelStatus = 'rotate';
+ break;
case 'hide':
- self.chart._options['showXAxis'] = false
- self.chart._options['margin'] = {bottom: 50}
- d3.select('#' + self.targetEl[0].id + '> svg').select('g.nv-axis.nv-x').selectAll('*').remove()
- configObj.xLabelStatus = 'hide'
- break
+ self.chart._options['showXAxis'] = false;
+ self.chart._options['margin'] = {bottom: 50};
+ d3.select('#' + self.targetEl[0].id + '> svg').select('g.nv-axis.nv-x').selectAll('*').remove();
+ configObj.xLabelStatus = 'hide';
+ break;
}
- self.emitConfig(configObj)
- }
+ self.emitConfig(configObj);
+ };
self.config.isXLabelStatus = function(type) {
if (configObj.xLabelStatus === type) {
- return true
+ return true;
} else {
- return false
+ return false;
}
- }
+ };
self.config.setDegree = function(type) {
- configObj.rotate.degree = type
- self.chart.xAxis.rotateLabels(type)
- self.emitConfig(configObj)
- }
-
- self.config.setDateFormat = function (format) {
- configObj.dateFormat = format
- self.emitConfig(configObj)
- }
+ configObj.rotate.degree = type;
+ self.chart.xAxis.rotateLabels(type);
+ self.emitConfig(configObj);
+ };
+
+ self.config.setDateFormat = function(format) {
+ configObj.dateFormat = format;
+ self.emitConfig(configObj);
+ };
}
- getSetting (chart) {
- let self = this
- let configObj = self.config
+ getSetting(chart) {
+ let self = this;
+ let configObj = self.config;
// default to visualize xLabel
if (typeof (configObj.xLabelStatus) === 'undefined') {
- configObj.changeXLabel('default')
+ configObj.changeXLabel('default');
}
if (typeof (configObj.rotate.degree) === 'undefined' || configObj.rotate.degree === '') {
- configObj.rotate.degree = '-45'
- self.emitConfig(configObj)
+ configObj.rotate.degree = '-45';
+ self.emitConfig(configObj);
}
return {
@@ -199,14 +199,14 @@ export default class LinechartVisualization extends Nvd3ChartVisualization {
</ng-include>`,
scope: {
config: configObj,
- save: function () {
- self.emitConfig(configObj)
- }
- }
- }
+ save: function() {
+ self.emitConfig(configObj);
+ },
+ },
+ };
}
- defaultY () {
- return undefined
+ defaultY() {
+ return undefined;
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/visualization/builtins/visualization-nvd3chart.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/visualization/builtins/visualization-nvd3chart.js b/zeppelin-web/src/app/visualization/builtins/visualization-nvd3chart.js
index f99fa3d..b3e6ec6 100644
--- a/zeppelin-web/src/app/visualization/builtins/visualization-nvd3chart.js
+++ b/zeppelin-web/src/app/visualization/builtins/visualization-nvd3chart.js
@@ -12,42 +12,42 @@
* limitations under the License.
*/
-import Visualization from '../visualization'
+import Visualization from '../visualization';
/**
* Visualize data in table format
*/
export default class Nvd3ChartVisualization extends Visualization {
- constructor (targetEl, config) {
- super(targetEl, config)
- this.targetEl.append('<svg></svg>')
+ constructor(targetEl, config) {
+ super(targetEl, config);
+ this.targetEl.append('<svg></svg>');
}
- refresh () {
+ refresh() {
if (this.chart) {
- this.chart.update()
+ this.chart.update();
}
}
- render (data) {
- let type = this.type()
- let d3g = data.d3g
+ render(data) {
+ let type = this.type();
+ let d3g = data.d3g;
if (!this.chart) {
- this.chart = nv.models[type]()
+ this.chart = nv.models[type]();
}
- this.configureChart(this.chart)
+ this.configureChart(this.chart);
- let animationDuration = 300
- let numberOfDataThreshold = 150
- let height = this.targetEl.height()
+ let animationDuration = 300;
+ let numberOfDataThreshold = 150;
+ let height = this.targetEl.height();
// turn off animation when dataset is too large. (for performance issue)
// still, since dataset is large, the chart content sequentially appears like animated
try {
if (d3g[0].values.length > numberOfDataThreshold) {
- animationDuration = 0
+ animationDuration = 0;
}
} catch (err) { /** ignore */ }
@@ -56,206 +56,214 @@ export default class Nvd3ChartVisualization extends Visualization {
.datum(d3g)
.transition()
.duration(animationDuration)
- .call(this.chart)
- d3.select('#' + this.targetEl[0].id + ' svg').style.height = height + 'px'
+ .call(this.chart);
+ d3.select('#' + this.targetEl[0].id + ' svg').style.height = height + 'px';
}
- type () {
+ type() {
// override this and return chart type
}
- configureChart (chart) {
+ configureChart(chart) {
// override this to configure chart
}
- groupedThousandsWith3DigitsFormatter (x) {
- return d3.format(',')(d3.round(x, 3))
+ groupedThousandsWith3DigitsFormatter(x) {
+ return d3.format(',')(d3.round(x, 3));
}
- customAbbrevFormatter (x) {
- let s = d3.format('.3s')(x)
+ customAbbrevFormatter(x) {
+ let s = d3.format('.3s')(x);
switch (s[s.length - 1]) {
- case 'G': return s.slice(0, -1) + 'B'
+ case 'G': return s.slice(0, -1) + 'B';
}
- return s
+ return s;
}
- defaultY () {
- return 0
+ defaultY() {
+ return 0;
}
- xAxisTickFormat (d, xLabels) {
+ xAxisTickFormat(d, xLabels) {
if (xLabels[d] && (isNaN(parseFloat(xLabels[d])) || !isFinite(xLabels[d]))) { // to handle string type xlabel
- return xLabels[d]
+ return xLabels[d];
} else {
- return d
+ return d;
}
}
- yAxisTickFormat (d) {
+ yAxisTickFormat(d) {
if (Math.abs(d) >= Math.pow(10, 6)) {
- return this.customAbbrevFormatter(d)
+ return this.customAbbrevFormatter(d);
}
- return this.groupedThousandsWith3DigitsFormatter(d)
+ return this.groupedThousandsWith3DigitsFormatter(d);
}
- d3DataFromPivot (
+ d3DataFromPivot(
schema, rows, keys, groups, values, allowTextXAxis, fillMissingValues, multiBarChart) {
- let self = this
+ let self = this;
// construct table data
- let d3g = []
+ let d3g = [];
- let concat = function (o, n) {
+ let concat = function(o, n) {
if (!o) {
- return n
+ return n;
} else {
- return o + '.' + n
+ return o + '.' + n;
}
- }
+ };
- const getSchemaUnderKey = function (key, s) {
+ const getSchemaUnderKey = function(key, s) {
for (let c in key.children) {
- s[c] = {}
- getSchemaUnderKey(key.children[c], s[c])
+ if(key.children.hasOwnProperty(c)) {
+ s[c] = {};
+ getSchemaUnderKey(key.children[c], s[c]);
+ }
}
- }
+ };
- const traverse = function (sKey, s, rKey, r, func, rowName, rowValue, colName) {
+ const traverse = function(sKey, s, rKey, r, func, rowName, rowValue, colName) {
// console.log("TRAVERSE sKey=%o, s=%o, rKey=%o, r=%o, rowName=%o, rowValue=%o, colName=%o", sKey, s, rKey, r, rowName, rowValue, colName);
if (s.type === 'key') {
- rowName = concat(rowName, sKey)
- rowValue = concat(rowValue, rKey)
+ rowName = concat(rowName, sKey);
+ rowValue = concat(rowValue, rKey);
} else if (s.type === 'group') {
- colName = concat(colName, rKey)
+ colName = concat(colName, rKey);
} else if (s.type === 'value' && sKey === rKey || valueOnly) {
- colName = concat(colName, rKey)
- func(rowName, rowValue, colName, r)
+ colName = concat(colName, rKey);
+ func(rowName, rowValue, colName, r);
}
for (let c in s.children) {
if (fillMissingValues && s.children[c].type === 'group' && r[c] === undefined) {
- let cs = {}
- getSchemaUnderKey(s.children[c], cs)
- traverse(c, s.children[c], c, cs, func, rowName, rowValue, colName)
- continue
+ let cs = {};
+ getSchemaUnderKey(s.children[c], cs);
+ traverse(c, s.children[c], c, cs, func, rowName, rowValue, colName);
+ continue;
}
for (let j in r) {
if (s.children[c].type === 'key' || c === j) {
- traverse(c, s.children[c], j, r[j], func, rowName, rowValue, colName)
+ traverse(c, s.children[c], j, r[j], func, rowName, rowValue, colName);
}
}
}
- }
+ };
- const valueOnly = (keys.length === 0 && groups.length === 0 && values.length > 0)
- let noKey = (keys.length === 0)
- let isMultiBarChart = multiBarChart
+ const valueOnly = (keys.length === 0 && groups.length === 0 && values.length > 0);
+ let noKey = (keys.length === 0);
+ let isMultiBarChart = multiBarChart;
- let sKey = Object.keys(schema)[0]
+ let sKey = Object.keys(schema)[0];
- let rowNameIndex = {}
- let rowIdx = 0
- let colNameIndex = {}
- let colIdx = 0
- let rowIndexValue = {}
+ let rowNameIndex = {};
+ let rowIdx = 0;
+ let colNameIndex = {};
+ let colIdx = 0;
+ let rowIndexValue = {};
for (let k in rows) {
- traverse(sKey, schema[sKey], k, rows[k], function (rowName, rowValue, colName, value) {
- // console.log("RowName=%o, row=%o, col=%o, value=%o", rowName, rowValue, colName, value);
- if (rowNameIndex[rowValue] === undefined) {
- rowIndexValue[rowIdx] = rowValue
- rowNameIndex[rowValue] = rowIdx++
- }
+ if (rows.hasOwnProperty(k)) {
+ traverse(sKey, schema[sKey], k, rows[k], function(rowName, rowValue, colName, value) {
+ // console.log("RowName=%o, row=%o, col=%o, value=%o", rowName, rowValue, colName, value);
+ if (rowNameIndex[rowValue] === undefined) {
+ rowIndexValue[rowIdx] = rowValue;
+ rowNameIndex[rowValue] = rowIdx++;
+ }
- if (colNameIndex[colName] === undefined) {
- colNameIndex[colName] = colIdx++
- }
- let i = colNameIndex[colName]
- if (noKey && isMultiBarChart) {
- i = 0
- }
+ if (colNameIndex[colName] === undefined) {
+ colNameIndex[colName] = colIdx++;
+ }
+ let i = colNameIndex[colName];
+ if (noKey && isMultiBarChart) {
+ i = 0;
+ }
- if (!d3g[i]) {
- d3g[i] = {
- values: [],
- key: (noKey && isMultiBarChart) ? 'values' : colName
+ if (!d3g[i]) {
+ d3g[i] = {
+ values: [],
+ key: (noKey && isMultiBarChart) ? 'values' : colName,
+ };
}
- }
- let xVar = isNaN(rowValue) ? ((allowTextXAxis) ? rowValue : rowNameIndex[rowValue]) : parseFloat(rowValue)
- let yVar = self.defaultY()
- if (xVar === undefined) { xVar = colName }
- if (value !== undefined) {
- yVar = isNaN(value.value) ? self.defaultY() : parseFloat(value.value) / parseFloat(value.count)
- }
- d3g[i].values.push({
- x: xVar,
- y: yVar
- })
- })
+ let xVar = isNaN(rowValue) ? ((allowTextXAxis) ? rowValue : rowNameIndex[rowValue]) : parseFloat(rowValue);
+ let yVar = self.defaultY();
+ if (xVar === undefined) {
+ xVar = colName;
+ }
+ if (value !== undefined) {
+ yVar = isNaN(value.value) ? self.defaultY() : parseFloat(value.value) / parseFloat(value.count);
+ }
+ d3g[i].values.push({
+ x: xVar,
+ y: yVar,
+ });
+ });
+ }
}
// clear aggregation name, if possible
- let namesWithoutAggr = {}
- let colName
- let withoutAggr
+ let namesWithoutAggr = {};
+ let colName;
+ let withoutAggr;
// TODO - This part could use som refactoring - Weird if/else with similar actions and variable names
for (colName in colNameIndex) {
- withoutAggr = colName.substring(0, colName.lastIndexOf('('))
- if (!namesWithoutAggr[withoutAggr]) {
- namesWithoutAggr[withoutAggr] = 1
- } else {
- namesWithoutAggr[withoutAggr]++
+ if (colNameIndex.hasOwnProperty(colName)) {
+ withoutAggr = colName.substring(0, colName.lastIndexOf('('));
+ if (!namesWithoutAggr[withoutAggr]) {
+ namesWithoutAggr[withoutAggr] = 1;
+ } else {
+ namesWithoutAggr[withoutAggr]++;
+ }
}
}
if (valueOnly) {
for (let valueIndex = 0; valueIndex < d3g[0].values.length; valueIndex++) {
- colName = d3g[0].values[valueIndex].x
+ colName = d3g[0].values[valueIndex].x;
if (!colName) {
- continue
+ continue;
}
- withoutAggr = colName.substring(0, colName.lastIndexOf('('))
+ withoutAggr = colName.substring(0, colName.lastIndexOf('('));
if (namesWithoutAggr[withoutAggr] <= 1) {
- d3g[0].values[valueIndex].x = withoutAggr
+ d3g[0].values[valueIndex].x = withoutAggr;
}
}
} else {
for (let d3gIndex = 0; d3gIndex < d3g.length; d3gIndex++) {
- colName = d3g[d3gIndex].key
- withoutAggr = colName.substring(0, colName.lastIndexOf('('))
+ colName = d3g[d3gIndex].key;
+ withoutAggr = colName.substring(0, colName.lastIndexOf('('));
if (namesWithoutAggr[withoutAggr] <= 1) {
- d3g[d3gIndex].key = withoutAggr
+ d3g[d3gIndex].key = withoutAggr;
}
}
// use group name instead of group.value as a column name, if there're only one group and one value selected.
if (groups.length === 1 && values.length === 1) {
for (let d3gIndex = 0; d3gIndex < d3g.length; d3gIndex++) {
- colName = d3g[d3gIndex].key
- colName = colName.split('.').slice(0, -1).join('.')
- d3g[d3gIndex].key = colName
+ colName = d3g[d3gIndex].key;
+ colName = colName.split('.').slice(0, -1).join('.');
+ d3g[d3gIndex].key = colName;
}
}
}
return {
xLabels: rowIndexValue,
- d3g: d3g
- }
+ d3g: d3g,
+ };
}
/**
* method will be invoked when visualization need to be destroyed.
* Don't need to destroy this.targetEl.
*/
- destroy () {
+ destroy() {
if (this.chart) {
- d3.selectAll('#' + this.targetEl[0].id + ' svg > *').remove()
- this.chart = undefined
+ d3.selectAll('#' + this.targetEl[0].id + ' svg > *').remove();
+ this.chart = undefined;
}
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/visualization/builtins/visualization-piechart.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/visualization/builtins/visualization-piechart.js b/zeppelin-web/src/app/visualization/builtins/visualization-piechart.js
index 4f80654..84479cb 100644
--- a/zeppelin-web/src/app/visualization/builtins/visualization-piechart.js
+++ b/zeppelin-web/src/app/visualization/builtins/visualization-piechart.js
@@ -12,29 +12,29 @@
* limitations under the License.
*/
-import Nvd3ChartVisualization from './visualization-nvd3chart'
-import PivotTransformation from '../../tabledata/pivot'
+import Nvd3ChartVisualization from './visualization-nvd3chart';
+import PivotTransformation from '../../tabledata/pivot';
/**
* Visualize data in pie chart
*/
export default class PiechartVisualization extends Nvd3ChartVisualization {
- constructor (targetEl, config) {
- super(targetEl, config)
- this.pivot = new PivotTransformation(config)
+ constructor(targetEl, config) {
+ super(targetEl, config);
+ this.pivot = new PivotTransformation(config);
}
- type () {
- return 'pieChart'
+ type() {
+ return 'pieChart';
}
- getTransformation () {
- return this.pivot
+ getTransformation() {
+ return this.pivot;
}
- render (pivot) {
+ render(pivot) {
// [ZEPPELIN-2253] New chart function will be created each time inside super.render()
- this.chart = null
+ this.chart = null;
const d3Data = this.d3DataFromPivot(
pivot.schema,
pivot.rows,
@@ -43,41 +43,45 @@ export default class PiechartVisualization extends Nvd3ChartVisualization {
pivot.values,
true,
false,
- false)
- const d = d3Data.d3g
+ false);
+ const d = d3Data.d3g;
- let generateLabel
+ let generateLabel;
// data is grouped
if (pivot.groups && pivot.groups.length > 0) {
- generateLabel = (suffix, prefix) => `${prefix}.${suffix}`
+ generateLabel = (suffix, prefix) => `${prefix}.${suffix}`;
} else { // data isn't grouped
- generateLabel = suffix => suffix
+ generateLabel = (suffix) => suffix;
}
- let d3g = d.map(group => {
- return group.values.map(row => ({
+ let d3g = d.map((group) => {
+ return group.values.map((row) => ({
label: generateLabel(row.x, group.key),
- value: row.y
- }))
- })
+ value: row.y,
+ }));
+ });
// the map function returns d3g as a nested array
// [].concat flattens it, http://stackoverflow.com/a/10865042/5154397
- d3g = [].concat.apply([], d3g) // eslint-disable-line prefer-spread
- super.render({d3g: d3g})
+ d3g = [].concat.apply([], d3g); // eslint-disable-line prefer-spread
+ super.render({d3g: d3g});
}
/**
* Set new config
*/
- setConfig (config) {
- super.setConfig(config)
- this.pivot.setConfig(config)
+ setConfig(config) {
+ super.setConfig(config);
+ this.pivot.setConfig(config);
}
- configureChart (chart) {
- chart.x(function (d) { return d.label })
- .y(function (d) { return d.value })
- .showLabels(false)
- .showTooltipPercent(true)
+ configureChart(chart) {
+ chart.x(function(d) {
+ return d.label;
+ })
+ .y(function(d) {
+ return d.value;
+ })
+ .showLabels(false)
+ .showTooltipPercent(true);
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/visualization/builtins/visualization-scatterchart.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/visualization/builtins/visualization-scatterchart.js b/zeppelin-web/src/app/visualization/builtins/visualization-scatterchart.js
index d7c00db..fad7500 100644
--- a/zeppelin-web/src/app/visualization/builtins/visualization-scatterchart.js
+++ b/zeppelin-web/src/app/visualization/builtins/visualization-scatterchart.js
@@ -12,25 +12,25 @@
* limitations under the License.
*/
-import Nvd3ChartVisualization from './visualization-nvd3chart'
-import ColumnselectorTransformation from '../../tabledata/columnselector'
+import Nvd3ChartVisualization from './visualization-nvd3chart';
+import ColumnselectorTransformation from '../../tabledata/columnselector';
/**
* Visualize data in scatter char
*/
export default class ScatterchartVisualization extends Nvd3ChartVisualization {
- constructor (targetEl, config) {
- super(targetEl, config)
+ constructor(targetEl, config) {
+ super(targetEl, config);
this.columnselectorProps = [
{
- name: 'xAxis'
+ name: 'xAxis',
},
{
- name: 'yAxis'
+ name: 'yAxis',
},
{
- name: 'group'
+ name: 'group',
},
{
name: 'size',
@@ -39,322 +39,330 @@ export default class ScatterchartVisualization extends Nvd3ChartVisualization {
'number of values in corresponding coordinate' will be used.
Zeppelin considers values as discrete when input values contain a string
or the number of distinct values is greater than 5% of the total number of values.
- This field turns grey when the selected option is invalid.`
- }
- ]
- this.columnselector = new ColumnselectorTransformation(config, this.columnselectorProps)
+ This field turns grey when the selected option is invalid.`,
+ },
+ ];
+ this.columnselector = new ColumnselectorTransformation(config, this.columnselectorProps);
}
- type () {
- return 'scatterChart'
+ type() {
+ return 'scatterChart';
}
- getTransformation () {
- return this.columnselector
+ getTransformation() {
+ return this.columnselector;
}
- render (tableData) {
- this.tableData = tableData
- this.selectDefault()
- let d3Data = this.setScatterChart(tableData, true)
- this.xLabels = d3Data.xLabels
- this.yLabels = d3Data.yLabels
+ render(tableData) {
+ this.tableData = tableData;
+ this.selectDefault();
+ let d3Data = this.setScatterChart(tableData, true);
+ this.xLabels = d3Data.xLabels;
+ this.yLabels = d3Data.yLabels;
- super.render(d3Data)
+ super.render(d3Data);
}
- configureChart (chart) {
- let self = this
+ configureChart(chart) {
+ let self = this;
- chart.xAxis.tickFormat(function (d) { // TODO remove round after bump to nvd3 > 1.8.5
- return self.xAxisTickFormat(Math.round(d * 1e3) / 1e3, self.xLabels)
- })
+ chart.xAxis.tickFormat(function(d) { // TODO remove round after bump to nvd3 > 1.8.5
+ return self.xAxisTickFormat(Math.round(d * 1e3) / 1e3, self.xLabels);
+ });
- chart.yAxis.tickFormat(function (d) { // TODO remove round after bump to nvd3 > 1.8.5
- return self.yAxisTickFormat(Math.round(d * 1e3) / 1e3, self.yLabels)
- })
+ chart.yAxis.tickFormat(function(d) { // TODO remove round after bump to nvd3 > 1.8.5
+ return self.yAxisTickFormat(Math.round(d * 1e3) / 1e3, self.yLabels);
+ });
- chart.showDistX(true).showDistY(true)
+ chart.showDistX(true).showDistY(true);
// handle the problem of tooltip not showing when muliple points have same value.
}
- yAxisTickFormat (d, yLabels) {
+ yAxisTickFormat(d, yLabels) {
if (yLabels[d] && (isNaN(parseFloat(yLabels[d])) || !isFinite(yLabels[d]))) { // to handle string type xlabel
- return yLabels[d]
+ return yLabels[d];
} else {
- return super.yAxisTickFormat(d)
+ return super.yAxisTickFormat(d);
}
}
- selectDefault () {
+ selectDefault() {
if (!this.config.xAxis && !this.config.yAxis) {
if (this.tableData.columns.length > 1) {
- this.config.xAxis = this.tableData.columns[0]
- this.config.yAxis = this.tableData.columns[1]
+ this.config.xAxis = this.tableData.columns[0];
+ this.config.yAxis = this.tableData.columns[1];
} else if (this.tableData.columns.length === 1) {
- this.config.xAxis = this.tableData.columns[0]
+ this.config.xAxis = this.tableData.columns[0];
}
}
}
- setScatterChart (data, refresh) {
- let xAxis = this.config.xAxis
- let yAxis = this.config.yAxis
- let group = this.config.group
- let size = this.config.size
-
- let xValues = []
- let yValues = []
- let rows = {}
- let d3g = []
-
- let rowNameIndex = {}
- let colNameIndex = {}
- let grpNameIndex = {}
- let rowIndexValue = {}
- let colIndexValue = {}
- let grpIndexValue = {}
- let rowIdx = 0
- let colIdx = 0
- let grpIdx = 0
- let grpName = ''
-
- let xValue
- let yValue
- let row
+ setScatterChart(data, refresh) {
+ let xAxis = this.config.xAxis;
+ let yAxis = this.config.yAxis;
+ let group = this.config.group;
+ let size = this.config.size;
+
+ let xValues = [];
+ let yValues = [];
+ let rows = {};
+ let d3g = [];
+
+ let rowNameIndex = {};
+ let colNameIndex = {};
+ let grpNameIndex = {};
+ let rowIndexValue = {};
+ let colIndexValue = {};
+ let grpIndexValue = {};
+ let rowIdx = 0;
+ let colIdx = 0;
+ let grpIdx = 0;
+ let grpName = '';
+
+ let xValue;
+ let yValue;
+ let row;
if (!xAxis && !yAxis) {
return {
- d3g: []
- }
+ d3g: [],
+ };
}
for (let i = 0; i < data.rows.length; i++) {
- row = data.rows[i]
+ row = data.rows[i];
if (xAxis) {
- xValue = row[xAxis.index]
- xValues[i] = xValue
+ xValue = row[xAxis.index];
+ xValues[i] = xValue;
}
if (yAxis) {
- yValue = row[yAxis.index]
- yValues[i] = yValue
+ yValue = row[yAxis.index];
+ yValues[i] = yValue;
}
}
let isAllDiscrete = ((xAxis && yAxis && this.isDiscrete(xValues) && this.isDiscrete(yValues)) ||
(!xAxis && this.isDiscrete(yValues)) ||
- (!yAxis && this.isDiscrete(xValues)))
+ (!yAxis && this.isDiscrete(xValues)));
if (isAllDiscrete) {
- rows = this.setDiscreteScatterData(data)
+ rows = this.setDiscreteScatterData(data);
} else {
- rows = data.rows
+ rows = data.rows;
}
if (!group && isAllDiscrete) {
- grpName = 'count'
+ grpName = 'count';
} else if (!group && !size) {
if (xAxis && yAxis) {
- grpName = '(' + xAxis.name + ', ' + yAxis.name + ')'
+ grpName = '(' + xAxis.name + ', ' + yAxis.name + ')';
} else if (xAxis && !yAxis) {
- grpName = xAxis.name
+ grpName = xAxis.name;
} else if (!xAxis && yAxis) {
- grpName = yAxis.name
+ grpName = yAxis.name;
}
} else if (!group && size) {
- grpName = size.name
+ grpName = size.name;
}
- let epsilon = 1e-4 // TODO remove after bump to nvd3 > 1.8.5
+ let epsilon = 1e-4; // TODO remove after bump to nvd3 > 1.8.5
for (let i = 0; i < rows.length; i++) {
- row = rows[i]
+ row = rows[i];
if (xAxis) {
- xValue = row[xAxis.index]
+ xValue = row[xAxis.index];
}
if (yAxis) {
- yValue = row[yAxis.index]
+ yValue = row[yAxis.index];
}
if (group) {
- grpName = row[group.index]
+ grpName = row[group.index];
}
- let sz = (isAllDiscrete) ? row[row.length - 1] : ((size) ? row[size.index] : 1)
+ let sz = (isAllDiscrete) ? row[row.length - 1] : ((size) ? row[size.index] : 1);
if (grpNameIndex[grpName] === undefined) {
- grpIndexValue[grpIdx] = grpName
- grpNameIndex[grpName] = grpIdx++
+ grpIndexValue[grpIdx] = grpName;
+ grpNameIndex[grpName] = grpIdx++;
}
if (xAxis && rowNameIndex[xValue] === undefined) {
- rowIndexValue[rowIdx] = xValue
- rowNameIndex[xValue] = rowIdx++
+ rowIndexValue[rowIdx] = xValue;
+ rowNameIndex[xValue] = rowIdx++;
}
if (yAxis && colNameIndex[yValue] === undefined) {
- colIndexValue[colIdx] = yValue
- colNameIndex[yValue] = colIdx++
+ colIndexValue[colIdx] = yValue;
+ colNameIndex[yValue] = colIdx++;
}
if (!d3g[grpNameIndex[grpName]]) {
d3g[grpNameIndex[grpName]] = {
key: grpName,
- values: []
- }
+ values: [],
+ };
}
// TODO remove epsilon jitter after bump to nvd3 > 1.8.5
- let xval = 0
- let yval = 0
+ let xval = 0;
+ let yval = 0;
if (xAxis) {
- xval = (isNaN(xValue) ? rowNameIndex[xValue] : parseFloat(xValue)) + Math.random() * epsilon
+ xval = (isNaN(xValue) ? rowNameIndex[xValue] : parseFloat(xValue)) + Math.random() * epsilon;
}
if (yAxis) {
- yval = (isNaN(yValue) ? colNameIndex[yValue] : parseFloat(yValue)) + Math.random() * epsilon
+ yval = (isNaN(yValue) ? colNameIndex[yValue] : parseFloat(yValue)) + Math.random() * epsilon;
}
d3g[grpNameIndex[grpName]].values.push({
x: xval,
y: yval,
- size: isNaN(parseFloat(sz)) ? 1 : parseFloat(sz)
- })
+ size: isNaN(parseFloat(sz)) ? 1 : parseFloat(sz),
+ });
}
// TODO remove sort and dedup after bump to nvd3 > 1.8.5
- let d3gvalues = d3g[grpNameIndex[grpName]].values
- d3gvalues.sort(function (a, b) {
- return ((a['x'] - b['x']) || (a['y'] - b['y']))
- })
+ let d3gvalues = d3g[grpNameIndex[grpName]].values;
+ d3gvalues.sort(function(a, b) {
+ return ((a['x'] - b['x']) || (a['y'] - b['y']));
+ });
for (let i = 0; i < d3gvalues.length - 1;) {
if ((Math.abs(d3gvalues[i]['x'] - d3gvalues[i + 1]['x']) < epsilon) &&
(Math.abs(d3gvalues[i]['y'] - d3gvalues[i + 1]['y']) < epsilon)) {
- d3gvalues.splice(i + 1, 1)
+ d3gvalues.splice(i + 1, 1);
} else {
- i++
+ i++;
}
}
return {
xLabels: rowIndexValue,
yLabels: colIndexValue,
- d3g: d3g
- }
+ d3g: d3g,
+ };
}
- setDiscreteScatterData (data) {
- let xAxis = this.config.xAxis
- let yAxis = this.config.yAxis
- let group = this.config.group
+ setDiscreteScatterData(data) {
+ let xAxis = this.config.xAxis;
+ let yAxis = this.config.yAxis;
+ let group = this.config.group;
- let xValue
- let yValue
- let grp
+ let xValue;
+ let yValue;
+ let grp;
- let rows = {}
+ let rows = {};
for (let i = 0; i < data.rows.length; i++) {
- let row = data.rows[i]
+ let row = data.rows[i];
if (xAxis) {
- xValue = row[xAxis.index]
+ xValue = row[xAxis.index];
}
if (yAxis) {
- yValue = row[yAxis.index]
+ yValue = row[yAxis.index];
}
if (group) {
- grp = row[group.index]
+ grp = row[group.index];
}
- let key = xValue + ',' + yValue + ',' + grp
+ let key = xValue + ',' + yValue + ',' + grp;
if (!rows[key]) {
rows[key] = {
x: xValue,
y: yValue,
group: grp,
- size: 1
- }
+ size: 1,
+ };
} else {
- rows[key].size++
+ rows[key].size++;
}
}
// change object into array
- let newRows = []
+ let newRows = [];
for (let r in rows) {
- let newRow = []
- if (xAxis) { newRow[xAxis.index] = rows[r].x }
- if (yAxis) { newRow[yAxis.index] = rows[r].y }
- if (group) { newRow[group.index] = rows[r].group }
- newRow[data.rows[0].length] = rows[r].size
- newRows.push(newRow)
+ if (rows.hasOwnProperty(r)) {
+ let newRow = [];
+ if (xAxis) {
+ newRow[xAxis.index] = rows[r].x;
+ }
+ if (yAxis) {
+ newRow[yAxis.index] = rows[r].y;
+ }
+ if (group) {
+ newRow[group.index] = rows[r].group;
+ }
+ newRow[data.rows[0].length] = rows[r].size;
+ newRows.push(newRow);
+ }
}
- return newRows
+ return newRows;
}
- isDiscrete (field) {
- let getUnique = function (f) {
- let uniqObj = {}
- let uniqArr = []
- let j = 0
+ isDiscrete(field) {
+ let getUnique = function(f) {
+ let uniqObj = {};
+ let uniqArr = [];
+ let j = 0;
for (let i = 0; i < f.length; i++) {
- let item = f[i]
+ let item = f[i];
if (uniqObj[item] !== 1) {
- uniqObj[item] = 1
- uniqArr[j++] = item
+ uniqObj[item] = 1;
+ uniqArr[j++] = item;
}
}
- return uniqArr
- }
+ return uniqArr;
+ };
for (let i = 0; i < field.length; i++) {
if (isNaN(parseFloat(field[i])) &&
(typeof field[i] === 'string' || field[i] instanceof String)) {
- return true
+ return true;
}
}
- let threshold = 0.05
- let unique = getUnique(field)
+ let threshold = 0.05;
+ let unique = getUnique(field);
if (unique.length / field.length < threshold) {
- return true
+ return true;
} else {
- return false
+ return false;
}
}
- isValidSizeOption (options) {
- let xValues = []
- let yValues = []
- let rows = this.tableData.rows
+ isValidSizeOption(options) {
+ let xValues = [];
+ let yValues = [];
+ let rows = this.tableData.rows;
for (let i = 0; i < rows.length; i++) {
- let row = rows[i]
- let size = row[options.size.index]
+ let row = rows[i];
+ let size = row[options.size.index];
// check if the field is numeric
if (isNaN(parseFloat(size)) || !isFinite(size)) {
- return false
+ return false;
}
if (options.xAxis) {
- let x = row[options.xAxis.index]
- xValues[i] = x
+ let x = row[options.xAxis.index];
+ xValues[i] = x;
}
if (options.yAxis) {
- let y = row[options.yAxis.index]
- yValues[i] = y
+ let y = row[options.yAxis.index];
+ yValues[i] = y;
}
}
// check if all existing fields are discrete
let isAllDiscrete = ((options.xAxis && options.yAxis && this.isDiscrete(xValues) && this.isDiscrete(yValues)) ||
(!options.xAxis && this.isDiscrete(yValues)) ||
- (!options.yAxis && this.isDiscrete(xValues)))
+ (!options.yAxis && this.isDiscrete(xValues)));
if (isAllDiscrete) {
- return false
+ return false;
}
- return true
+ return true;
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/visualization/builtins/visualization-table.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/visualization/builtins/visualization-table.js b/zeppelin-web/src/app/visualization/builtins/visualization-table.js
index afb5394..d77efbc 100644
--- a/zeppelin-web/src/app/visualization/builtins/visualization-table.js
+++ b/zeppelin-web/src/app/visualization/builtins/visualization-table.js
@@ -12,8 +12,8 @@
* limitations under the License.
*/
-import Visualization from '../visualization'
-import PassthroughTransformation from '../../tabledata/passthrough'
+import Visualization from '../visualization';
+import PassthroughTransformation from '../../tabledata/passthrough';
import {
Widget, ValueType,
@@ -22,9 +22,9 @@ import {
initializeTableConfig, resetTableOptionConfig,
DefaultTableColumnType, TableColumnType, updateColumnTypeState,
parseTableOption,
-} from './visualization-util'
+} from './visualization-util';
-const SETTING_TEMPLATE = require('./visualization-table-setting.html')
+const SETTING_TEMPLATE = require('./visualization-table-setting.html');
const TABLE_OPTION_SPECS = [
{
@@ -48,41 +48,43 @@ const TABLE_OPTION_SPECS = [
widget: Widget.CHECKBOX,
description: 'Enable a footer for displaying aggregated values',
},
-]
+];
/**
* Visualize data in table format
*/
export default class TableVisualization extends Visualization {
- constructor (targetEl, config) {
- super(targetEl, config)
- this.passthrough = new PassthroughTransformation(config)
- this.emitTimeout = null
- this.isRestoring = false
+ constructor(targetEl, config) {
+ super(targetEl, config);
+ this.passthrough = new PassthroughTransformation(config);
+ this.emitTimeout = null;
+ this.isRestoring = false;
- initializeTableConfig(config, TABLE_OPTION_SPECS)
+ initializeTableConfig(config, TABLE_OPTION_SPECS);
}
getColumnMinWidth(colName) {
- let width = 150 // default
- const calculatedWidth = colName.length * 10
+ let width = 150; // default
+ const calculatedWidth = colName.length * 10;
// use the broad one
- if (calculatedWidth > width) { width = calculatedWidth }
+ if (calculatedWidth > width) {
+ width = calculatedWidth;
+ }
- return width
+ return width;
}
createGridOptions(tableData, onRegisterApiCallback, config) {
- const rows = tableData.rows
- const columnNames = tableData.columns.map(c => c.name)
+ const rows = tableData.rows;
+ const columnNames = tableData.columns.map((c) => c.name);
- const gridData = rows.map(r => {
+ const gridData = rows.map((r) => {
return columnNames.reduce((acc, colName, index) => {
- acc[colName] = r[index]
- return acc
- }, {})
- })
+ acc[colName] = r[index];
+ return acc;
+ }, {});
+ });
const gridOptions = {
data: gridData,
@@ -94,7 +96,7 @@ export default class TableVisualization extends Visualization {
fastWatch: false,
treeRowHeaderAlwaysVisible: false,
- columnDefs: columnNames.map(colName => {
+ columnDefs: columnNames.map((colName) => {
return {
displayName: colName,
name: colName,
@@ -111,7 +113,7 @@ export default class TableVisualization extends Visualization {
`,
minWidth: this.getColumnMinWidth(colName),
width: '*',
- }
+ };
}),
rowEditWaitInterval: -1, /** disable saveRow event */
enableRowHashing: true,
@@ -126,127 +128,131 @@ export default class TableVisualization extends Visualization {
saveTreeView: true,
saveFilter: true,
saveSelection: false,
- }
+ };
- return gridOptions
+ return gridOptions;
}
getGridElemId() {
// angular doesn't allow `-` in scope variable name
- const gridElemId = `${this.targetEl[0].id}_grid`.replace('-', '_')
- return gridElemId
+ const gridElemId = `${this.targetEl[0].id}_grid`.replace('-', '_');
+ return gridElemId;
}
getGridApiId() {
// angular doesn't allow `-` in scope variable name
- const gridApiId = `${this.targetEl[0].id}_gridApi`.replace('-', '_')
- return gridApiId
+ const gridApiId = `${this.targetEl[0].id}_gridApi`.replace('-', '_');
+ return gridApiId;
}
refresh() {
- const gridElemId = this.getGridElemId()
- const gridElem = angular.element(`#${gridElemId}`)
+ const gridElemId = this.getGridElemId();
+ const gridElem = angular.element(`#${gridElemId}`);
if (gridElem) {
- gridElem.css('height', this.targetEl.height() - 10)
+ gridElem.css('height', this.targetEl.height() - 10);
}
}
refreshGrid() {
- const gridElemId = this.getGridElemId()
- const gridElem = angular.element(`#${gridElemId}`)
+ const gridElemId = this.getGridElemId();
+ const gridElem = angular.element(`#${gridElemId}`);
if (gridElem) {
- const scope = this.getScope()
- const gridApiId = this.getGridApiId()
- scope[gridApiId].core.notifyDataChange(this._uiGridConstants.dataChange.ALL)
+ const scope = this.getScope();
+ const gridApiId = this.getGridApiId();
+ scope[gridApiId].core.notifyDataChange(this._uiGridConstants.dataChange.ALL);
}
}
updateColDefType(colDef, type) {
- if (type === colDef.type) { return }
+ if (type === colDef.type) {
+ return;
+ }
- colDef.type = type
- const colName = colDef.name
- const config = this.config
+ colDef.type = type;
+ const colName = colDef.name;
+ const config = this.config;
if (config.tableColumnTypeState.names && config.tableColumnTypeState.names[colName]) {
- config.tableColumnTypeState.names[colName] = type
- this.persistConfigWithGridState(this.config)
+ config.tableColumnTypeState.names[colName] = type;
+ this.persistConfigWithGridState(this.config);
}
}
addColumnMenus(gridOptions) {
- if (!gridOptions || !gridOptions.columnDefs) { return }
+ if (!gridOptions || !gridOptions.columnDefs) {
+ return;
+ }
- const self = this // for closure
+ const self = this; // for closure
// SHOULD use `function() { ... }` syntax for each action to get `this`
- gridOptions.columnDefs.map(colDef => {
+ gridOptions.columnDefs.map((colDef) => {
colDef.menuItems = [
{
title: 'Type: String',
action: function() {
- self.updateColDefType(this.context.col.colDef, TableColumnType.STRING)
+ self.updateColDefType(this.context.col.colDef, TableColumnType.STRING);
},
active: function() {
- return this.context.col.colDef.type === TableColumnType.STRING
+ return this.context.col.colDef.type === TableColumnType.STRING;
},
},
{
title: 'Type: Number',
action: function() {
- self.updateColDefType(this.context.col.colDef, TableColumnType.NUMBER)
+ self.updateColDefType(this.context.col.colDef, TableColumnType.NUMBER);
},
active: function() {
- return this.context.col.colDef.type === TableColumnType.NUMBER
+ return this.context.col.colDef.type === TableColumnType.NUMBER;
},
},
{
title: 'Type: Date',
action: function() {
- self.updateColDefType(this.context.col.colDef, TableColumnType.DATE)
+ self.updateColDefType(this.context.col.colDef, TableColumnType.DATE);
},
active: function() {
- return this.context.col.colDef.type === TableColumnType.DATE
+ return this.context.col.colDef.type === TableColumnType.DATE;
},
},
- ]
- })
+ ];
+ });
}
setDynamicGridOptions(gridOptions, config) {
// parse based on their type definitions
- const parsed = parseTableOption(TABLE_OPTION_SPECS, config.tableOptionValue)
+ const parsed = parseTableOption(TABLE_OPTION_SPECS, config.tableOptionValue);
- const { showAggregationFooter, useFilter, showPagination, } = parsed
+ const {showAggregationFooter, useFilter, showPagination} = parsed;
- gridOptions.showGridFooter = false
- gridOptions.showColumnFooter = showAggregationFooter
- gridOptions.enableFiltering = useFilter
+ gridOptions.showGridFooter = false;
+ gridOptions.showColumnFooter = showAggregationFooter;
+ gridOptions.enableFiltering = useFilter;
- gridOptions.enablePagination = showPagination
- gridOptions.enablePaginationControls = showPagination
+ gridOptions.enablePagination = showPagination;
+ gridOptions.enablePaginationControls = showPagination;
if (showPagination) {
- gridOptions.paginationPageSize = 50
- gridOptions.paginationPageSizes = [25, 50, 100, 250, 1000]
+ gridOptions.paginationPageSize = 50;
+ gridOptions.paginationPageSizes = [25, 50, 100, 250, 1000];
}
// selection can't be rendered dynamically in ui-grid 4.0.4
- gridOptions.enableRowSelection = false
- gridOptions.enableRowHeaderSelection = false
- gridOptions.enableFullRowSelection = false
- gridOptions.enableSelectAll = false
- gridOptions.enableGroupHeaderSelection = false
- gridOptions.enableSelectionBatchEvent = false
+ gridOptions.enableRowSelection = false;
+ gridOptions.enableRowHeaderSelection = false;
+ gridOptions.enableFullRowSelection = false;
+ gridOptions.enableSelectAll = false;
+ gridOptions.enableGroupHeaderSelection = false;
+ gridOptions.enableSelectionBatchEvent = false;
}
- render (tableData) {
- const gridElemId = this.getGridElemId()
- let gridElem = document.getElementById(gridElemId)
+ render(tableData) {
+ const gridElemId = this.getGridElemId();
+ let gridElem = document.getElementById(gridElemId);
- const config = this.config
- const self = this // for closure
+ const config = this.config;
+ const self = this; // for closure
if (!gridElem) {
// create, compile and append grid elem
@@ -261,125 +267,147 @@ export default class TableVisualization extends Visualization {
ui-grid-move-columns
ui-grid-grouping
ui-grid-save-state
- ui-grid-exporter></div>`)
+ ui-grid-exporter></div>`);
- gridElem.css('height', this.targetEl.height() - 10)
- const scope = this.getScope()
- gridElem = this._compile(gridElem)(scope)
- this.targetEl.append(gridElem)
+ gridElem.css('height', this.targetEl.height() - 10);
+ const scope = this.getScope();
+ gridElem = this._compile(gridElem)(scope);
+ this.targetEl.append(gridElem);
// set gridOptions for this elem
- const gridOptions = this.createGridOptions(tableData, onRegisterApiCallback, config)
- this.setDynamicGridOptions(gridOptions, config)
- this.addColumnMenus(gridOptions)
- scope[gridElemId] = gridOptions
+ const gridOptions = this.createGridOptions(tableData, onRegisterApiCallback, config);
+ this.setDynamicGridOptions(gridOptions, config);
+ this.addColumnMenus(gridOptions);
+ scope[gridElemId] = gridOptions;
// set gridApi for this elem
- const gridApiId = this.getGridApiId()
+ const gridApiId = this.getGridApiId();
const onRegisterApiCallback = (gridApi) => {
- scope[gridApiId] = gridApi
+ scope[gridApiId] = gridApi;
// should restore state before registering APIs
// register callbacks for change evens
// should persist `self.config` instead `config` (closure issue)
- gridApi.core.on.columnVisibilityChanged(scope, () => { self.persistConfigWithGridState(self.config) })
- gridApi.colMovable.on.columnPositionChanged(scope, () => { self.persistConfigWithGridState(self.config) })
- gridApi.core.on.sortChanged(scope, () => { self.persistConfigWithGridState(self.config) })
- gridApi.core.on.filterChanged(scope, () => { self.persistConfigWithGridState(self.config) })
- gridApi.grouping.on.aggregationChanged(scope, () => { self.persistConfigWithGridState(self.config) })
- gridApi.grouping.on.groupingChanged(scope, () => { self.persistConfigWithGridState(self.config) })
- gridApi.treeBase.on.rowCollapsed(scope, () => { self.persistConfigWithGridState(self.config) })
- gridApi.treeBase.on.rowExpanded(scope, () => { self.persistConfigWithGridState(self.config) })
- gridApi.colResizable.on.columnSizeChanged(scope, () => { self.persistConfigWithGridState(self.config) })
+ gridApi.core.on.columnVisibilityChanged(scope, () => {
+ self.persistConfigWithGridState(self.config);
+ });
+ gridApi.colMovable.on.columnPositionChanged(scope, () => {
+ self.persistConfigWithGridState(self.config);
+ });
+ gridApi.core.on.sortChanged(scope, () => {
+ self.persistConfigWithGridState(self.config);
+ });
+ gridApi.core.on.filterChanged(scope, () => {
+ self.persistConfigWithGridState(self.config);
+ });
+ gridApi.grouping.on.aggregationChanged(scope, () => {
+ self.persistConfigWithGridState(self.config);
+ });
+ gridApi.grouping.on.groupingChanged(scope, () => {
+ self.persistConfigWithGridState(self.config);
+ });
+ gridApi.treeBase.on.rowCollapsed(scope, () => {
+ self.persistConfigWithGridState(self.config);
+ });
+ gridApi.treeBase.on.rowExpanded(scope, () => {
+ self.persistConfigWithGridState(self.config);
+ });
+ gridApi.colResizable.on.columnSizeChanged(scope, () => {
+ self.persistConfigWithGridState(self.config);
+ });
// pagination doesn't follow usual life-cycle in ui-grid v4.0.4
// gridApi.pagination.on.paginationChanged(scope, () => { self.persistConfigWithGridState(self.config) })
// TBD: do we need to propagate row selection?
// gridApi.selection.on.rowSelectionChanged(scope, () => { self.persistConfigWithGridState(self.config) })
// gridApi.selection.on.rowSelectionChangedBatch(scope, () => { self.persistConfigWithGridState(self.config) })
- }
- gridOptions.onRegisterApi = onRegisterApiCallback
+ };
+ gridOptions.onRegisterApi = onRegisterApiCallback;
} else {
// don't need to update gridOptions.data since it's synchronized by paragraph execution
- const gridOptions = this.getGridOptions()
- this.setDynamicGridOptions(gridOptions, config)
- this.refreshGrid()
+ const gridOptions = this.getGridOptions();
+ this.setDynamicGridOptions(gridOptions, config);
+ this.refreshGrid();
}
- const columnDefs = this.getGridOptions().columnDefs
- updateColumnTypeState(tableData.columns, config, columnDefs)
+ const columnDefs = this.getGridOptions().columnDefs;
+ updateColumnTypeState(tableData.columns, config, columnDefs);
// SHOULD restore grid state after columnDefs are updated
- this.restoreGridState(config.tableGridState)
+ this.restoreGridState(config.tableGridState);
}
restoreGridState(gridState) {
- if (!gridState) { return }
+ if (!gridState) {
+ return;
+ }
// should set isRestoring to avoid that changed* events are triggered while restoring
- this.isRestoring = true
- const gridApi = this.getGridApi()
+ this.isRestoring = true;
+ const gridApi = this.getGridApi();
// restore grid state when gridApi is available
if (!gridApi) {
- setTimeout(() => this.restoreGridState(gridState), 100)
+ setTimeout(() => this.restoreGridState(gridState), 100);
} else {
- gridApi.saveState.restore(this.getScope(), gridState)
- this.isRestoring = false
+ gridApi.saveState.restore(this.getScope(), gridState);
+ this.isRestoring = false;
}
}
- destroy () {
+ destroy() {
}
- getTransformation () {
- return this.passthrough
+ getTransformation() {
+ return this.passthrough;
}
getScope() {
- const scope = this.targetEl.scope()
- return scope
+ const scope = this.targetEl.scope();
+ return scope;
}
getGridOptions() {
- const scope = this.getScope()
- const gridElemId = this.getGridElemId()
- return scope[gridElemId]
+ const scope = this.getScope();
+ const gridElemId = this.getGridElemId();
+ return scope[gridElemId];
}
getGridApi() {
- const scope = this.targetEl.scope()
- const gridApiId = this.getGridApiId()
- return scope[gridApiId]
+ const scope = this.targetEl.scope();
+ const gridApiId = this.getGridApiId();
+ return scope[gridApiId];
}
persistConfigImmediatelyWithGridState(config) {
- this.persistConfigWithGridState(config)
+ this.persistConfigWithGridState(config);
}
persistConfigWithGridState(config) {
- if (this.isRestoring) { return }
+ if (this.isRestoring) {
+ return;
+ }
- const gridApi = this.getGridApi()
- config.tableGridState = gridApi.saveState.save()
- this.emitConfig(config)
+ const gridApi = this.getGridApi();
+ config.tableGridState = gridApi.saveState.save();
+ this.emitConfig(config);
}
persistConfig(config) {
- this.emitConfig(config)
+ this.emitConfig(config);
}
- getSetting (chart) {
- const self = this // for closure in scope
- const configObj = self.config
+ getSetting(chart) {
+ const self = this; // for closure in scope
+ const configObj = self.config;
// emit config if it's updated in `render`
if (configObj.initialized) {
- configObj.initialized = false
- this.persistConfig(configObj) // should persist w/o state
+ configObj.initialized = false;
+ this.persistConfig(configObj); // should persist w/o state
} else if (configObj.tableColumnTypeState &&
configObj.tableColumnTypeState.updated) {
- configObj.tableColumnTypeState.updated = false
- this.persistConfig(configObj) // should persist w/o state
+ configObj.tableColumnTypeState.updated = false;
+ this.persistConfig(configObj); // should persist w/o state
}
return {
@@ -393,27 +421,27 @@ export default class TableVisualization extends Visualization {
isTextareaWidget: isTextareaWidget,
isBtnGroupWidget: isBtnGroupWidget,
tableOptionValueChanged: () => {
- self.persistConfigWithGridState(configObj)
+ self.persistConfigWithGridState(configObj);
},
saveTableOption: () => {
- self.persistConfigWithGridState(configObj)
+ self.persistConfigWithGridState(configObj);
},
resetTableOption: () => {
- resetTableOptionConfig(configObj)
- initializeTableConfig(configObj, TABLE_OPTION_SPECS)
- self.persistConfigWithGridState(configObj)
+ resetTableOptionConfig(configObj);
+ initializeTableConfig(configObj, TABLE_OPTION_SPECS);
+ self.persistConfigWithGridState(configObj);
},
tableWidgetOnKeyDown: (event, optSpec) => {
- const code = event.keyCode || event.which
+ const code = event.keyCode || event.which;
if (code === 13 && isInputWidget(optSpec)) {
- self.persistConfigWithGridState(configObj)
+ self.persistConfigWithGridState(configObj);
} else if (code === 13 && event.shiftKey && isTextareaWidget(optSpec)) {
- self.persistConfigWithGridState(configObj)
+ self.persistConfigWithGridState(configObj);
}
- event.stopPropagation() /** avoid to conflict with paragraph shortcuts */
- }
- }
- }
+ event.stopPropagation(); /** avoid to conflict with paragraph shortcuts */
+ },
+ },
+ };
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/visualization/builtins/visualization-util.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/visualization/builtins/visualization-util.js b/zeppelin-web/src/app/visualization/builtins/visualization-util.js
index cd9cd48..a82a18e 100644
--- a/zeppelin-web/src/app/visualization/builtins/visualization-util.js
+++ b/zeppelin-web/src/app/visualization/builtins/visualization-util.js
@@ -18,7 +18,7 @@ export const Widget = {
TEXTAREA: 'textarea',
OPTION: 'option',
BTN_GROUP: 'btn-group',
-}
+};
export const ValueType = {
INT: 'int',
@@ -26,7 +26,7 @@ export const ValueType = {
BOOLEAN: 'boolean',
STRING: 'string',
JSON: 'JSON',
-}
+};
export const TableColumnType = {
STRING: 'string',
@@ -35,138 +35,170 @@ export const TableColumnType = {
DATE: 'date',
OBJECT: 'object',
NUMBER_STR: 'numberStr',
-}
+};
-export const DefaultTableColumnType = TableColumnType.STRING
+export const DefaultTableColumnType = TableColumnType.STRING;
-export function isInputWidget (spec) { return spec.widget === Widget.INPUT }
-export function isOptionWidget (spec) { return spec.widget === Widget.OPTION }
-export function isCheckboxWidget (spec) { return spec.widget === Widget.CHECKBOX }
-export function isTextareaWidget (spec) { return spec.widget === Widget.TEXTAREA }
-export function isBtnGroupWidget (spec) { return spec.widget === Widget.BTN_GROUP }
+export function isInputWidget(spec) {
+ return spec.widget === Widget.INPUT;
+}
+export function isOptionWidget(spec) {
+ return spec.widget === Widget.OPTION;
+}
+export function isCheckboxWidget(spec) {
+ return spec.widget === Widget.CHECKBOX;
+}
+export function isTextareaWidget(spec) {
+ return spec.widget === Widget.TEXTAREA;
+}
+export function isBtnGroupWidget(spec) {
+ return spec.widget === Widget.BTN_GROUP;
+}
export function resetTableOptionConfig(config) {
- delete config.tableOptionSpecHash
- config.tableOptionSpecHash = {}
- delete config.tableOptionValue
- config.tableOptionValue = {}
- delete config.tableColumnTypeState.names
- config.tableColumnTypeState.names = {}
- config.updated = false
- return config
+ delete config.tableOptionSpecHash;
+ config.tableOptionSpecHash = {};
+ delete config.tableOptionValue;
+ config.tableOptionValue = {};
+ delete config.tableColumnTypeState.names;
+ config.tableColumnTypeState.names = {};
+ config.updated = false;
+ return config;
}
export function initializeTableConfig(config, tableOptionSpecs) {
- if (typeof config.tableOptionValue === 'undefined') { config.tableOptionValue = {} }
- if (typeof config.tableGridState === 'undefined') { config.tableGridState = {} }
- if (typeof config.tableColumnTypeState === 'undefined') { config.tableColumnTypeState = {} }
+ if (typeof config.tableOptionValue === 'undefined') {
+ config.tableOptionValue = {};
+ }
+ if (typeof config.tableGridState === 'undefined') {
+ config.tableGridState = {};
+ }
+ if (typeof config.tableColumnTypeState === 'undefined') {
+ config.tableColumnTypeState = {};
+ }
// should remove `$$hashKey` using angular.toJson
- const newSpecHash = JSON.stringify(JSON.parse(angular.toJson(tableOptionSpecs)))
- const previousSpecHash = config.tableOptionSpecHash
+ const newSpecHash = JSON.stringify(JSON.parse(angular.toJson(tableOptionSpecs)));
+ const previousSpecHash = config.tableOptionSpecHash;
// check whether spec is updated or not
if (typeof previousSpecHash === 'undefined' || (previousSpecHash !== newSpecHash)) {
- resetTableOptionConfig(config)
+ resetTableOptionConfig(config);
- config.tableOptionSpecHash = newSpecHash
- config.initialized = true
+ config.tableOptionSpecHash = newSpecHash;
+ config.initialized = true;
// reset all persisted option values if spec is updated
for (let i = 0; i < tableOptionSpecs.length; i++) {
- const option = tableOptionSpecs[i]
- config.tableOptionValue[option.name] = option.defaultValue
+ const option = tableOptionSpecs[i];
+ config.tableOptionValue[option.name] = option.defaultValue;
}
}
- return config
+ return config;
}
export function parseTableOption(specs, persistedTableOption) {
/** copy original params */
- const parsed = JSON.parse(JSON.stringify(persistedTableOption))
+ const parsed = JSON.parse(JSON.stringify(persistedTableOption));
for (let i = 0; i < specs.length; i++) {
- const s = specs[i]
- const name = s.name
+ const s = specs[i];
+ const name = s.name;
if (s.valueType === ValueType.INT &&
typeof parsed[name] !== 'number') {
- try { parsed[name] = parseInt(parsed[name]) } catch (error) { parsed[name] = s.defaultValue }
+ try {
+ parsed[name] = parseInt(parsed[name]);
+ } catch (error) {
+ parsed[name] = s.defaultValue;
+ }
} else if (s.valueType === ValueType.FLOAT &&
typeof parsed[name] !== 'number') {
- try { parsed[name] = parseFloat(parsed[name]) } catch (error) { parsed[name] = s.defaultValue }
+ try {
+ parsed[name] = parseFloat(parsed[name]);
+ } catch (error) {
+ parsed[name] = s.defaultValue;
+ }
} else if (s.valueType === ValueType.BOOLEAN) {
if (parsed[name] === 'false') {
- parsed[name] = false
+ parsed[name] = false;
} else if (parsed[name] === 'true') {
- parsed[name] = true
+ parsed[name] = true;
} else if (typeof parsed[name] !== 'boolean') {
- parsed[name] = s.defaultValue
+ parsed[name] = s.defaultValue;
}
} else if (s.valueType === ValueType.JSON) {
if (parsed[name] !== null && typeof parsed[name] !== 'object') {
- try { parsed[name] = JSON.parse(parsed[name]) } catch (error) { parsed[name] = s.defaultValue }
+ try {
+ parsed[name] = JSON.parse(parsed[name]);
+ } catch (error) {
+ parsed[name] = s.defaultValue;
+ }
} else if (parsed[name] === null) {
- parsed[name] = s.defaultValue
+ parsed[name] = s.defaultValue;
}
}
}
- return parsed
+ return parsed;
}
export function isColumnNameUpdated(prevColumnNames, newColumnNames) {
- if (typeof prevColumnNames === 'undefined') { return true }
+ if (typeof prevColumnNames === 'undefined') {
+ return true;
+ }
- let columnNameUpdated = false
+ let columnNameUpdated = false;
for (let prevColName in prevColumnNames) {
if (!newColumnNames[prevColName]) {
- return true
+ return true;
}
}
if (!columnNameUpdated) {
for (let newColName in newColumnNames) {
if (!prevColumnNames[newColName]) {
- return true
+ return true;
}
}
}
- return false
+ return false;
}
export function updateColumnTypeState(columns, config, columnDefs) {
- const columnTypeState = config.tableColumnTypeState
+ const columnTypeState = config.tableColumnTypeState;
- if (!columnTypeState) { return }
+ if (!columnTypeState) {
+ return;
+ }
// compare objects because order might be changed
- const prevColumnNames = columnTypeState.names || {}
+ const prevColumnNames = columnTypeState.names || {};
const newColumnNames = columns.reduce((acc, c) => {
- const prevColumnType = prevColumnNames[c.name]
+ const prevColumnType = prevColumnNames[c.name];
// use previous column type if exists
if (prevColumnType) {
- acc[c.name] = prevColumnType
+ acc[c.name] = prevColumnType;
} else {
- acc[c.name] = DefaultTableColumnType
+ acc[c.name] = DefaultTableColumnType;
}
- return acc
- }, {})
+ return acc;
+ }, {});
- let columnNameUpdated = isColumnNameUpdated(prevColumnNames, newColumnNames)
+ let columnNameUpdated = isColumnNameUpdated(prevColumnNames, newColumnNames);
if (columnNameUpdated) {
- columnTypeState.names = newColumnNames
- columnTypeState.updated = true
+ columnTypeState.names = newColumnNames;
+ columnTypeState.updated = true;
}
// update `columnDefs[n].type`
for (let i = 0; i < columnDefs.length; i++) {
- const colName = columnDefs[i].name
- columnDefs[i].type = columnTypeState.names[colName]
+ const colName = columnDefs[i].name;
+ columnDefs[i].type = columnTypeState.names[colName];
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/visualization/visualization.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/visualization/visualization.js b/zeppelin-web/src/app/visualization/visualization.js
index 6b6e36a..f6475cb 100644
--- a/zeppelin-web/src/app/visualization/visualization.js
+++ b/zeppelin-web/src/app/visualization/visualization.js
@@ -16,12 +16,12 @@
* Base class for visualization.
*/
export default class Visualization {
- constructor (targetEl, config) {
- this.targetEl = targetEl
- this.config = config
- this._dirty = false
- this._active = false
- this._emitter = () => {}
+ constructor(targetEl, config) {
+ this.targetEl = targetEl;
+ this.config = config;
+ this._dirty = false;
+ this._active = false;
+ this._emitter = () => {};
}
/**
@@ -29,33 +29,33 @@ export default class Visualization {
* @abstract
* @return {Transformation}
*/
- getTransformation () {
+ getTransformation() {
// override this
- throw new TypeError('Visualization.getTransformation() should be overrided')
+ throw new TypeError('Visualization.getTransformation() should be overrided');
}
/**
* Method will be invoked when data or configuration changed.
* @abstract
*/
- render (tableData) {
+ render(tableData) {
// override this
- throw new TypeError('Visualization.render() should be overrided')
+ throw new TypeError('Visualization.render() should be overrided');
}
/**
* Refresh visualization.
*/
- refresh () {
+ refresh() {
// override this
- console.warn('A chart is missing refresh function, it might not work preperly')
+ console.warn('A chart is missing refresh function, it might not work preperly');
}
/**
* Method will be invoked when visualization need to be destroyed.
* Don't need to destroy this.targetEl.
*/
- destroy () {
+ destroy() {
// override this
}
@@ -65,113 +65,117 @@ export default class Visualization {
* scope : an object to bind to template scope
* }
*/
- getSetting () {
+ getSetting() {
// override this
}
/**
* Activate. Invoked when visualization is selected.
*/
- activate () {
+ activate() {
if (!this._active || this._dirty) {
- this.refresh()
- this._dirty = false
+ this.refresh();
+ this._dirty = false;
}
- this._active = true
+ this._active = true;
}
/**
* Deactivate. Invoked when visualization is de selected.
*/
- deactivate () {
- this._active = false
+ deactivate() {
+ this._active = false;
}
/**
* Is active.
*/
- isActive () {
- return this._active
+ isActive() {
+ return this._active;
}
/**
* When window or paragraph is resized.
*/
- resize () {
+ resize() {
if (this.isActive()) {
- this.refresh()
+ this.refresh();
} else {
- this._dirty = true
+ this._dirty = true;
}
}
/**
* Set new config.
*/
- setConfig (config) {
- this.config = config
+ setConfig(config) {
+ this.config = config;
if (this.isActive()) {
- this.refresh()
+ this.refresh();
} else {
- this._dirty = true
+ this._dirty = true;
}
}
/**
* Emit config. config will sent to server and saved.
*/
- emitConfig (config) {
- this._emitter(config)
+ emitConfig(config) {
+ this._emitter(config);
}
/**
* Render setting.
*/
- renderSetting (targetEl) {
- let setting = this.getSetting()
+ renderSetting(targetEl) {
+ let setting = this.getSetting();
if (!setting) {
- return
+ return;
}
// already readered
if (this._scope) {
- let self = this
- this._scope.$apply(function () {
+ let self = this;
+ this._scope.$apply(function() {
for (let k in setting.scope) {
- self._scope[k] = setting.scope[k]
+ if (setting.scope.hasOwnProperty(k)) {
+ self._scope[k] = setting.scope[k];
+ }
}
for (let k in self._prevSettingScope) {
if (!setting.scope[k]) {
- self._scope[k] = setting.scope[k]
+ self._scope[k] = setting.scope[k];
}
}
- })
- return
+ });
+ return;
} else {
- this._prevSettingScope = setting.scope
+ this._prevSettingScope = setting.scope;
}
- let scope = this._createNewScope()
+ let scope = this._createNewScope();
for (let k in setting.scope) {
- scope[k] = setting.scope[k]
+ if (setting.scope.hasOwnProperty(k)) {
+ scope[k] = setting.scope[k];
+ }
}
- let template = setting.template
+ let template = setting.template;
if (template.split('\n').length === 1 &&
template.endsWith('.html')) { // template is url
- this._templateRequest(template).then(t =>
+ this._templateRequest(template).then((t) =>
_renderSetting(this, targetEl, t, scope)
- )
+ );
} else {
- _renderSetting(this, targetEl, template, scope)
+ _renderSetting(this, targetEl, template, scope);
}
}
}
-function _renderSetting (instance, targetEl, template, scope) {
- instance._targetEl = targetEl
- targetEl.html(template)
- instance._compile(targetEl.contents())(scope)
- instance._scope = scope
+function _renderSetting(instance, targetEl, template, scope) {
+ instance._targetEl = targetEl;
+ targetEl.html(template);
+ instance._compile(targetEl.contents())(scope);
+ instance._scope = scope;
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/array-ordering/array-ordering.service.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/array-ordering/array-ordering.service.js b/zeppelin-web/src/components/array-ordering/array-ordering.service.js
index 6fa1ad9..1f275e6 100644
--- a/zeppelin-web/src/components/array-ordering/array-ordering.service.js
+++ b/zeppelin-web/src/components/array-ordering/array-ordering.service.js
@@ -12,51 +12,51 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').service('arrayOrderingSrv', ArrayOrderingService)
+angular.module('zeppelinWebApp').service('arrayOrderingSrv', ArrayOrderingService);
function ArrayOrderingService(TRASH_FOLDER_ID) {
- 'ngInject'
+ 'ngInject';
- let arrayOrderingSrv = this
+ let arrayOrderingSrv = this;
- this.noteListOrdering = function (note) {
+ this.noteListOrdering = function(note) {
if (note.id === TRASH_FOLDER_ID) {
- return '\uFFFF'
+ return '\uFFFF';
}
- return arrayOrderingSrv.getNoteName(note)
- }
+ return arrayOrderingSrv.getNoteName(note);
+ };
- this.getNoteName = function (note) {
+ this.getNoteName = function(note) {
if (note.name === undefined || note.name.trim() === '') {
- return 'Note ' + note.id
+ return 'Note ' + note.id;
} else {
- return note.name
+ return note.name;
}
- }
+ };
- this.noteComparator = function (v1, v2) {
- let note1 = v1.value || v1
- let note2 = v2.value || v2
+ this.noteComparator = function(v1, v2) {
+ let note1 = v1.value || v1;
+ let note2 = v2.value || v2;
if (note1.id === TRASH_FOLDER_ID) {
- return 1
+ return 1;
}
if (note2.id === TRASH_FOLDER_ID) {
- return -1
+ return -1;
}
if (note1.children === undefined && note2.children !== undefined) {
- return 1
+ return 1;
}
if (note1.children !== undefined && note2.children === undefined) {
- return -1
+ return -1;
}
- let noteName1 = arrayOrderingSrv.getNoteName(note1)
- let noteName2 = arrayOrderingSrv.getNoteName(note2)
+ let noteName1 = arrayOrderingSrv.getNoteName(note1);
+ let noteName2 = arrayOrderingSrv.getNoteName(note2);
- return noteName1.localeCompare(noteName2)
- }
+ return noteName1.localeCompare(noteName2);
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/base-url/base-url.service.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/base-url/base-url.service.js b/zeppelin-web/src/components/base-url/base-url.service.js
index 6ef55b9..845293c 100644
--- a/zeppelin-web/src/components/base-url/base-url.service.js
+++ b/zeppelin-web/src/components/base-url/base-url.service.js
@@ -12,39 +12,39 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').service('baseUrlSrv', BaseUrlService)
+angular.module('zeppelinWebApp').service('baseUrlSrv', BaseUrlService);
function BaseUrlService() {
- this.getPort = function () {
- let port = Number(location.port)
+ this.getPort = function() {
+ let port = Number(location.port);
if (!port) {
- port = 80
+ port = 80;
if (location.protocol === 'https:') {
- port = 443
+ port = 443;
}
}
// Exception for when running locally via grunt
if (port === process.env.WEB_PORT) {
- port = process.env.SERVER_PORT
+ port = process.env.SERVER_PORT;
}
- return port
- }
+ return port;
+ };
- this.getWebsocketUrl = function () {
- let wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:'
+ this.getWebsocketUrl = function() {
+ let wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
return wsProtocol + '//' + location.hostname + ':' + this.getPort() +
- skipTrailingSlash(location.pathname) + '/ws'
- }
+ skipTrailingSlash(location.pathname) + '/ws';
+ };
this.getBase = function() {
- return location.protocol + '//' + location.hostname + ':' + this.getPort() + location.pathname
- }
+ return location.protocol + '//' + location.hostname + ':' + this.getPort() + location.pathname;
+ };
- this.getRestApiBase = function () {
- return skipTrailingSlash(this.getBase()) + '/api'
- }
+ this.getRestApiBase = function() {
+ return skipTrailingSlash(this.getBase()) + '/api';
+ };
- const skipTrailingSlash = function (path) {
- return path.replace(/\/$/, '')
- }
+ const skipTrailingSlash = function(path) {
+ return path.replace(/\/$/, '');
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/login/login.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/login/login.controller.js b/zeppelin-web/src/components/login/login.controller.js
index 9190950..9a42d5f 100644
--- a/zeppelin-web/src/components/login/login.controller.js
+++ b/zeppelin-web/src/components/login/login.controller.js
@@ -12,73 +12,73 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').controller('LoginCtrl', LoginCtrl)
+angular.module('zeppelinWebApp').controller('LoginCtrl', LoginCtrl);
-function LoginCtrl ($scope, $rootScope, $http, $httpParamSerializer, baseUrlSrv, $location, $timeout) {
- 'ngInject'
+function LoginCtrl($scope, $rootScope, $http, $httpParamSerializer, baseUrlSrv, $location, $timeout) {
+ 'ngInject';
- $scope.SigningIn = false
- $scope.loginParams = {}
- $scope.login = function () {
- $scope.SigningIn = true
+ $scope.SigningIn = false;
+ $scope.loginParams = {};
+ $scope.login = function() {
+ $scope.SigningIn = true;
$http({
method: 'POST',
url: baseUrlSrv.getRestApiBase() + '/login',
headers: {
- 'Content-Type': 'application/x-www-form-urlencoded'
+ 'Content-Type': 'application/x-www-form-urlencoded',
},
data: $httpParamSerializer({
'userName': $scope.loginParams.userName,
- 'password': $scope.loginParams.password
- })
- }).then(function successCallback (response) {
- $rootScope.ticket = response.data.body
- angular.element('#loginModal').modal('toggle')
- $rootScope.$broadcast('loginSuccess', true)
- $rootScope.userName = $scope.loginParams.userName
- $scope.SigningIn = false
+ 'password': $scope.loginParams.password,
+ }),
+ }).then(function successCallback(response) {
+ $rootScope.ticket = response.data.body;
+ angular.element('#loginModal').modal('toggle');
+ $rootScope.$broadcast('loginSuccess', true);
+ $rootScope.userName = $scope.loginParams.userName;
+ $scope.SigningIn = false;
// redirect to the page from where the user originally was
if ($location.search() && $location.search()['ref']) {
- $timeout(function () {
- let redirectLocation = $location.search()['ref']
- $location.$$search = {}
- $location.path(redirectLocation)
- }, 100)
+ $timeout(function() {
+ let redirectLocation = $location.search()['ref'];
+ $location.$$search = {};
+ $location.path(redirectLocation);
+ }, 100);
}
- }, function errorCallback (errorResponse) {
- $scope.loginParams.errorText = 'The username and password that you entered don\'t match.'
- $scope.SigningIn = false
- })
- }
+ }, function errorCallback(errorResponse) {
+ $scope.loginParams.errorText = 'The username and password that you entered don\'t match.';
+ $scope.SigningIn = false;
+ });
+ };
- let initValues = function () {
+ let initValues = function() {
$scope.loginParams = {
userName: '',
- password: ''
- }
- }
+ password: '',
+ };
+ };
// handle session logout message received from WebSocket
- $rootScope.$on('session_logout', function (event, data) {
+ $rootScope.$on('session_logout', function(event, data) {
if ($rootScope.userName !== '') {
- $rootScope.userName = ''
- $rootScope.ticket = undefined
+ $rootScope.userName = '';
+ $rootScope.ticket = undefined;
- setTimeout(function () {
- $scope.loginParams = {}
- $scope.loginParams.errorText = data.info
- angular.element('.nav-login-btn').click()
- }, 1000)
- let locationPath = $location.path()
- $location.path('/').search('ref', locationPath)
+ setTimeout(function() {
+ $scope.loginParams = {};
+ $scope.loginParams.errorText = data.info;
+ angular.element('.nav-login-btn').click();
+ }, 1000);
+ let locationPath = $location.path();
+ $location.path('/').search('ref', locationPath);
}
- })
+ });
/*
** $scope.$on functions below
*/
- $scope.$on('initLoginValues', function () {
- initValues()
- })
+ $scope.$on('initLoginValues', function() {
+ initValues();
+ });
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/components/navbar/expand-collapse/expand-collapse.directive.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/navbar/expand-collapse/expand-collapse.directive.js b/zeppelin-web/src/components/navbar/expand-collapse/expand-collapse.directive.js
index e4280e8..58629af 100644
--- a/zeppelin-web/src/components/navbar/expand-collapse/expand-collapse.directive.js
+++ b/zeppelin-web/src/components/navbar/expand-collapse/expand-collapse.directive.js
@@ -12,37 +12,37 @@
* limitations under the License.
*/
-import './expand-collapse.css'
+import './expand-collapse.css';
-angular.module('zeppelinWebApp').directive('expandCollapse', expandCollapseDirective)
+angular.module('zeppelinWebApp').directive('expandCollapse', expandCollapseDirective);
function expandCollapseDirective() {
return {
restrict: 'EA',
- link: function (scope, element, attrs) {
- angular.element(element).click(function (event) {
+ link: function(scope, element, attrs) {
+ angular.element(element).click(function(event) {
if (angular.element(element).next('.expandable:visible').length > 1) {
- angular.element(element).next('.expandable:visible').slideUp('slow')
- angular.element(element).find('i.fa-folder-open').toggleClass('fa-folder fa-folder-open')
+ angular.element(element).next('.expandable:visible').slideUp('slow');
+ angular.element(element).find('i.fa-folder-open').toggleClass('fa-folder fa-folder-open');
} else {
- angular.element(element).next('.expandable').first().slideToggle('200', function () {
+ angular.element(element).next('.expandable').first().slideToggle('200', function() {
// do not toggle trash folder
if (angular.element(element).find('.fa-trash-o').length === 0) {
- angular.element(element).find('i').first().toggleClass('fa-folder fa-folder-open')
+ angular.element(element).find('i').first().toggleClass('fa-folder fa-folder-open');
}
- })
+ });
}
- let target = event.target
+ let target = event.target;
// add note
if (target.classList !== undefined && target.classList.contains('fa-plus') &&
target.tagName.toLowerCase() === 'i') {
- return
+ return;
}
- event.stopPropagation()
- })
- }
- }
+ event.stopPropagation();
+ });
+ },
+ };
}
[05/12] zeppelin git commit: [ZEPPELIN-3245] checkstyle/eslintrc for
zeppelin-web (JavaScript)
Posted by pr...@apache.org.
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/tabledata/advanced-transformation-util.test.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/tabledata/advanced-transformation-util.test.js b/zeppelin-web/src/app/tabledata/advanced-transformation-util.test.js
index 90f569f..84ea441 100644
--- a/zeppelin-web/src/app/tabledata/advanced-transformation-util.test.js
+++ b/zeppelin-web/src/app/tabledata/advanced-transformation-util.test.js
@@ -12,1728 +12,1730 @@
* limitations under the License.
*/
-import * as Util from './advanced-transformation-util.js'
+import * as Util from './advanced-transformation-util.js';
/* eslint-disable max-len */
const MockParameter = {
- 'floatParam': { valueType: 'float', defaultValue: 10, description: '', },
- 'intParam': { valueType: 'int', defaultValue: 50, description: '', },
- 'jsonParam': { valueType: 'JSON', defaultValue: '', description: '', widget: 'textarea', },
- 'stringParam1': { valueType: 'string', defaultValue: '', description: '', },
- 'stringParam2': { valueType: 'string', defaultValue: '', description: '', widget: 'input', },
- 'boolParam': { valueType: 'boolean', defaultValue: false, description: '', widget: 'checkbox', },
- 'optionParam': { valueType: 'string', defaultValue: 'line', description: '', widget: 'option', optionValues: [ 'line', 'smoothedLine', ], },
-}
+ 'floatParam': {valueType: 'float', defaultValue: 10, description: ''},
+ 'intParam': {valueType: 'int', defaultValue: 50, description: ''},
+ 'jsonParam': {valueType: 'JSON', defaultValue: '', description: '', widget: 'textarea'},
+ 'stringParam1': {valueType: 'string', defaultValue: '', description: ''},
+ 'stringParam2': {valueType: 'string', defaultValue: '', description: '', widget: 'input'},
+ 'boolParam': {valueType: 'boolean', defaultValue: false, description: '', widget: 'checkbox'},
+ 'optionParam': {valueType: 'string', defaultValue: 'line', description: '', widget: 'option', optionValues: ['line', 'smoothedLine']},
+};
/* eslint-enable max-len */
const MockAxis1 = {
- 'keyAxis': { dimension: 'multiple', axisType: 'key', },
- 'aggrAxis': { dimension: 'multiple', axisType: 'aggregator', },
- 'groupAxis': { dimension: 'multiple', axisType: 'group', },
-}
+ 'keyAxis': {dimension: 'multiple', axisType: 'key'},
+ 'aggrAxis': {dimension: 'multiple', axisType: 'aggregator'},
+ 'groupAxis': {dimension: 'multiple', axisType: 'group'},
+};
const MockAxis2 = {
- 'singleKeyAxis': { dimension: 'single', axisType: 'key', },
- 'limitedAggrAxis': { dimension: 'multiple', axisType: 'aggregator', maxAxisCount: 2, },
- 'groupAxis': { dimension: 'multiple', axisType: 'group', },
-}
+ 'singleKeyAxis': {dimension: 'single', axisType: 'key'},
+ 'limitedAggrAxis': {dimension: 'multiple', axisType: 'aggregator', maxAxisCount: 2},
+ 'groupAxis': {dimension: 'multiple', axisType: 'group'},
+};
const MockAxis3 = {
- 'customAxis1': { dimension: 'single', axisType: 'unique', },
- 'customAxis2': { dimension: 'multiple', axisType: 'value', },
-}
+ 'customAxis1': {dimension: 'single', axisType: 'unique'},
+ 'customAxis2': {dimension: 'multiple', axisType: 'value'},
+};
const MockAxis4 = {
- 'key1Axis': { dimension: 'multiple', axisType: 'key', },
- 'key2Axis': { dimension: 'multiple', axisType: 'key', },
- 'aggrAxis': { dimension: 'multiple', axisType: 'aggregator', },
- 'groupAxis': { dimension: 'multiple', axisType: 'group', },
-}
+ 'key1Axis': {dimension: 'multiple', axisType: 'key'},
+ 'key2Axis': {dimension: 'multiple', axisType: 'key'},
+ 'aggrAxis': {dimension: 'multiple', axisType: 'aggregator'},
+ 'groupAxis': {dimension: 'multiple', axisType: 'group'},
+};
// test spec for axis, param, widget
const MockSpec = {
charts: {
'object-chart': {
- transform: { method: 'object', },
+ transform: {method: 'object'},
sharedAxis: true,
axis: JSON.parse(JSON.stringify(MockAxis1)),
parameter: MockParameter,
},
'array-chart': {
- transform: { method: 'array', },
+ transform: {method: 'array'},
sharedAxis: true,
axis: JSON.parse(JSON.stringify(MockAxis1)),
parameter: {
- 'arrayChartParam0': { valueType: 'string', defaultValue: '', description: 'param0', },
+ 'arrayChartParam0': {valueType: 'string', defaultValue: '', description: 'param0'},
},
},
'drillDown-chart': {
- transform: { method: 'drill-down', },
+ transform: {method: 'drill-down'},
axis: JSON.parse(JSON.stringify(MockAxis2)),
parameter: {
- 'drillDownChartParam0': { valueType: 'string', defaultValue: '', description: 'param0', },
+ 'drillDownChartParam0': {valueType: 'string', defaultValue: '', description: 'param0'},
},
},
'raw-chart': {
- transform: { method: 'raw', },
+ transform: {method: 'raw'},
axis: JSON.parse(JSON.stringify(MockAxis3)),
parameter: {
- 'rawChartParam0': { valueType: 'string', defaultValue: '', description: 'param0', },
+ 'rawChartParam0': {valueType: 'string', defaultValue: '', description: 'param0'},
},
},
},
-}
+};
// test spec for transformation
const MockSpec2 = {
charts: {
'object-chart': {
- transform: { method: 'object', },
+ transform: {method: 'object'},
sharedAxis: false,
axis: JSON.parse(JSON.stringify(MockAxis1)),
parameter: MockParameter,
},
'array-chart': {
- transform: { method: 'array', },
+ transform: {method: 'array'},
sharedAxis: false,
axis: JSON.parse(JSON.stringify(MockAxis1)),
parameter: {
- 'arrayChartParam0': { valueType: 'string', defaultValue: '', description: 'param0', },
+ 'arrayChartParam0': {valueType: 'string', defaultValue: '', description: 'param0'},
},
},
'drillDown-chart': {
- transform: { method: 'drill-down', },
+ transform: {method: 'drill-down'},
sharedAxis: false,
axis: JSON.parse(JSON.stringify(MockAxis1)),
parameter: {
- 'drillDownChartParam0': { valueType: 'string', defaultValue: '', description: 'param0', },
+ 'drillDownChartParam0': {valueType: 'string', defaultValue: '', description: 'param0'},
},
},
'array2Key-chart': {
- transform: { method: 'array:2-key', },
+ transform: {method: 'array:2-key'},
sharedAxis: false,
axis: JSON.parse(JSON.stringify(MockAxis4)),
parameter: {
- 'drillDownChartParam0': { valueType: 'string', defaultValue: '', description: 'param0', },
+ 'drillDownChartParam0': {valueType: 'string', defaultValue: '', description: 'param0'},
},
},
'raw-chart': {
- transform: { method: 'raw', },
+ transform: {method: 'raw'},
sharedAxis: false,
axis: JSON.parse(JSON.stringify(MockAxis3)),
parameter: {
- 'rawChartParam0': { valueType: 'string', defaultValue: '', description: 'param0', },
+ 'rawChartParam0': {valueType: 'string', defaultValue: '', description: 'param0'},
},
},
},
-}
+};
/* eslint-disable max-len */
const MockTableDataColumn = [
- {'name': 'age', 'index': 0, 'aggr': 'sum', },
- {'name': 'job', 'index': 1, 'aggr': 'sum', },
- {'name': 'marital', 'index': 2, 'aggr': 'sum', },
- {'name': 'education', 'index': 3, 'aggr': 'sum', },
- {'name': 'default', 'index': 4, 'aggr': 'sum', },
- {'name': 'balance', 'index': 5, 'aggr': 'sum', },
- {'name': 'housing', 'index': 6, 'aggr': 'sum', },
- {'name': 'loan', 'index': 7, 'aggr': 'sum', },
- {'name': 'contact', 'index': 8, 'aggr': 'sum', },
- {'name': 'day', 'index': 9, 'aggr': 'sum', },
- {'name': 'month', 'index': 10, 'aggr': 'sum', },
- {'name': 'duration', 'index': 11, 'aggr': 'sum', },
- {'name': 'campaign', 'index': 12, 'aggr': 'sum', },
- {'name': 'pdays', 'index': 13, 'aggr': 'sum', },
- {'name': 'previous', 'index': 14, 'aggr': 'sum', },
- {'name': 'poutcome', 'index': 15, 'aggr': 'sum', },
- {'name': 'y', 'index': 16, 'aggr': 'sum', }
-]
+ {'name': 'age', 'index': 0, 'aggr': 'sum'},
+ {'name': 'job', 'index': 1, 'aggr': 'sum'},
+ {'name': 'marital', 'index': 2, 'aggr': 'sum'},
+ {'name': 'education', 'index': 3, 'aggr': 'sum'},
+ {'name': 'default', 'index': 4, 'aggr': 'sum'},
+ {'name': 'balance', 'index': 5, 'aggr': 'sum'},
+ {'name': 'housing', 'index': 6, 'aggr': 'sum'},
+ {'name': 'loan', 'index': 7, 'aggr': 'sum'},
+ {'name': 'contact', 'index': 8, 'aggr': 'sum'},
+ {'name': 'day', 'index': 9, 'aggr': 'sum'},
+ {'name': 'month', 'index': 10, 'aggr': 'sum'},
+ {'name': 'duration', 'index': 11, 'aggr': 'sum'},
+ {'name': 'campaign', 'index': 12, 'aggr': 'sum'},
+ {'name': 'pdays', 'index': 13, 'aggr': 'sum'},
+ {'name': 'previous', 'index': 14, 'aggr': 'sum'},
+ {'name': 'poutcome', 'index': 15, 'aggr': 'sum'},
+ {'name': 'y', 'index': 16, 'aggr': 'sum'},
+];
const MockTableDataRows1 = [
- [ '44', 'services', 'single', 'tertiary', 'no', '106', 'no', 'no', 'unknown', '12', 'jun', '109', '2', '-1', '0', 'unknown', 'no' ],
- [ '43', 'services', 'married', 'primary', 'no', '-88', 'yes', 'yes', 'cellular', '17', 'apr', '313', '1', '147', '2', 'failure', 'no' ],
- [ '39', 'services', 'married', 'secondary', 'no', '9374', 'yes', 'no', 'unknown', '20', 'may', '273', '1', '-1', '0', 'unknown', 'no' ],
- [ '33', 'services', 'single', 'tertiary', 'no', '4789', 'yes', 'yes', 'cellular', '11', 'may', '220', '1', '339', '4', 'failure', 'no' ],
-]
+ ['44', 'services', 'single', 'tertiary', 'no', '106', 'no', 'no', 'unknown', '12', 'jun', '109', '2', '-1', '0', 'unknown', 'no'],
+ ['43', 'services', 'married', 'primary', 'no', '-88', 'yes', 'yes', 'cellular', '17', 'apr', '313', '1', '147', '2', 'failure', 'no'],
+ ['39', 'services', 'married', 'secondary', 'no', '9374', 'yes', 'no', 'unknown', '20', 'may', '273', '1', '-1', '0', 'unknown', 'no'],
+ ['33', 'services', 'single', 'tertiary', 'no', '4789', 'yes', 'yes', 'cellular', '11', 'may', '220', '1', '339', '4', 'failure', 'no'],
+];
/* eslint-enable max-len */
describe('advanced-transformation-util', () => {
describe('getCurrent* funcs', () => {
it('should set return proper value of the current chart', () => {
- const config = {}
- const spec = JSON.parse(JSON.stringify(MockSpec))
- Util.initializeConfig(config, spec)
- expect(Util.getCurrentChart(config)).toEqual('object-chart')
- expect(Util.getCurrentChartTransform(config)).toEqual({method: 'object'})
+ const config = {};
+ const spec = JSON.parse(JSON.stringify(MockSpec));
+ Util.initializeConfig(config, spec);
+ expect(Util.getCurrentChart(config)).toEqual('object-chart');
+ expect(Util.getCurrentChartTransform(config)).toEqual({method: 'object'});
// use `toBe` to compare reference
- expect(Util.getCurrentChartAxis(config)).toBe(config.axis['object-chart'])
+ expect(Util.getCurrentChartAxis(config)).toBe(config.axis['object-chart']);
// use `toBe` to compare reference
- expect(Util.getCurrentChartParam(config)).toBe(config.parameter['object-chart'])
- })
- })
+ expect(Util.getCurrentChartParam(config)).toBe(config.parameter['object-chart']);
+ });
+ });
describe('useSharedAxis', () => {
it('should set chartChanged for initial drawing', () => {
- const config = {}
- const spec = JSON.parse(JSON.stringify(MockSpec))
- Util.initializeConfig(config, spec)
- expect(Util.useSharedAxis(config, 'object-chart')).toEqual(true)
- expect(Util.useSharedAxis(config, 'array-chart')).toEqual(true)
- expect(Util.useSharedAxis(config, 'drillDown-chart')).toBeUndefined()
- expect(Util.useSharedAxis(config, 'raw-chart')).toBeUndefined()
- })
- })
+ const config = {};
+ const spec = JSON.parse(JSON.stringify(MockSpec));
+ Util.initializeConfig(config, spec);
+ expect(Util.useSharedAxis(config, 'object-chart')).toEqual(true);
+ expect(Util.useSharedAxis(config, 'array-chart')).toEqual(true);
+ expect(Util.useSharedAxis(config, 'drillDown-chart')).toBeUndefined();
+ expect(Util.useSharedAxis(config, 'raw-chart')).toBeUndefined();
+ });
+ });
describe('initializeConfig', () => {
- const config = {}
- const spec = JSON.parse(JSON.stringify(MockSpec))
- Util.initializeConfig(config, spec)
+ const config = {};
+ const spec = JSON.parse(JSON.stringify(MockSpec));
+ Util.initializeConfig(config, spec);
it('should set chartChanged for initial drawing', () => {
- expect(config.chartChanged).toBe(true)
- expect(config.parameterChanged).toBe(false)
- })
+ expect(config.chartChanged).toBe(true);
+ expect(config.parameterChanged).toBe(false);
+ });
it('should set panel toggles ', () => {
- expect(config.panel.columnPanelOpened).toBe(true)
- expect(config.panel.parameterPanelOpened).toBe(false)
- })
+ expect(config.panel.columnPanelOpened).toBe(true);
+ expect(config.panel.parameterPanelOpened).toBe(false);
+ });
it('should set version and initialized', () => {
- expect(config.spec.version).toBeDefined()
- expect(config.spec.initialized).toBe(true)
- })
+ expect(config.spec.version).toBeDefined();
+ expect(config.spec.initialized).toBe(true);
+ });
it('should set chart', () => {
- expect(config.chart.current).toBe('object-chart')
+ expect(config.chart.current).toBe('object-chart');
expect(config.chart.available).toEqual([
'object-chart',
'array-chart',
'drillDown-chart',
'raw-chart',
- ])
- })
+ ]);
+ });
it('should set sharedAxis', () => {
expect(config.sharedAxis).toEqual({
keyAxis: [], aggrAxis: [], groupAxis: [],
- })
+ });
// should use `toBe` to compare object reference
- expect(config.sharedAxis).toBe(config.axis['object-chart'])
+ expect(config.sharedAxis).toBe(config.axis['object-chart']);
// should use `toBe` to compare object reference
- expect(config.sharedAxis).toBe(config.axis['array-chart'])
- })
+ expect(config.sharedAxis).toBe(config.axis['array-chart']);
+ });
it('should set paramSpecs', () => {
- const expected = Util.getSpecs(MockParameter)
- expect(config.paramSpecs['object-chart']).toEqual(expected)
- expect(config.paramSpecs['array-chart'].length).toEqual(1)
- expect(config.paramSpecs['drillDown-chart'].length).toEqual(1)
- expect(config.paramSpecs['raw-chart'].length).toEqual(1)
- })
+ const expected = Util.getSpecs(MockParameter);
+ expect(config.paramSpecs['object-chart']).toEqual(expected);
+ expect(config.paramSpecs['array-chart'].length).toEqual(1);
+ expect(config.paramSpecs['drillDown-chart'].length).toEqual(1);
+ expect(config.paramSpecs['raw-chart'].length).toEqual(1);
+ });
it('should set parameter with default value', () => {
- expect(Object.keys(MockParameter).length).toBeGreaterThan(0) // length > 0
+ expect(Object.keys(MockParameter).length).toBeGreaterThan(0); // length > 0
for (let paramName in MockParameter) {
- expect(config.parameter['object-chart'][paramName])
- .toEqual(MockParameter[paramName].defaultValue)
+ if (MockParameter.hasOwnProperty(paramName)) {
+ expect(config.parameter['object-chart'][paramName])
+ .toEqual(MockParameter[paramName].defaultValue);
+ }
}
- })
+ });
it('should set axisSpecs', () => {
- const expected = Util.getSpecs(MockAxis1)
- expect(config.axisSpecs['object-chart']).toEqual(expected)
- expect(config.axisSpecs['array-chart'].length).toEqual(3)
- expect(config.axisSpecs['drillDown-chart'].length).toEqual(3)
- expect(config.axisSpecs['raw-chart'].length).toEqual(2)
- })
+ const expected = Util.getSpecs(MockAxis1);
+ expect(config.axisSpecs['object-chart']).toEqual(expected);
+ expect(config.axisSpecs['array-chart'].length).toEqual(3);
+ expect(config.axisSpecs['drillDown-chart'].length).toEqual(3);
+ expect(config.axisSpecs['raw-chart'].length).toEqual(2);
+ });
it('should prepare axis depending on dimension', () => {
expect(config.axis['object-chart']).toEqual({
keyAxis: [], aggrAxis: [], groupAxis: [],
- })
+ });
expect(config.axis['array-chart']).toEqual({
keyAxis: [], aggrAxis: [], groupAxis: [],
- })
+ });
// it's ok not to set single dimension axis
- expect(config.axis['drillDown-chart']).toEqual({ limitedAggrAxis: [], groupAxis: [], })
+ expect(config.axis['drillDown-chart']).toEqual({limitedAggrAxis: [], groupAxis: []});
// it's ok not to set single dimension axis
- expect(config.axis['raw-chart']).toEqual({ customAxis2: [], })
- })
- })
+ expect(config.axis['raw-chart']).toEqual({customAxis2: []});
+ });
+ });
describe('axis', () => {
- })
+ });
describe('parameter:widget', () => {
it('isInputWidget', () => {
- expect(Util.isInputWidget(MockParameter.stringParam1)).toBe(true)
- expect(Util.isInputWidget(MockParameter.stringParam2)).toBe(true)
+ expect(Util.isInputWidget(MockParameter.stringParam1)).toBe(true);
+ expect(Util.isInputWidget(MockParameter.stringParam2)).toBe(true);
- expect(Util.isInputWidget(MockParameter.boolParam)).toBe(false)
- expect(Util.isInputWidget(MockParameter.jsonParam)).toBe(false)
- expect(Util.isInputWidget(MockParameter.optionParam)).toBe(false)
- })
+ expect(Util.isInputWidget(MockParameter.boolParam)).toBe(false);
+ expect(Util.isInputWidget(MockParameter.jsonParam)).toBe(false);
+ expect(Util.isInputWidget(MockParameter.optionParam)).toBe(false);
+ });
it('isOptionWidget', () => {
- expect(Util.isOptionWidget(MockParameter.optionParam)).toBe(true)
+ expect(Util.isOptionWidget(MockParameter.optionParam)).toBe(true);
- expect(Util.isOptionWidget(MockParameter.stringParam1)).toBe(false)
- expect(Util.isOptionWidget(MockParameter.stringParam2)).toBe(false)
- expect(Util.isOptionWidget(MockParameter.boolParam)).toBe(false)
- expect(Util.isOptionWidget(MockParameter.jsonParam)).toBe(false)
- })
+ expect(Util.isOptionWidget(MockParameter.stringParam1)).toBe(false);
+ expect(Util.isOptionWidget(MockParameter.stringParam2)).toBe(false);
+ expect(Util.isOptionWidget(MockParameter.boolParam)).toBe(false);
+ expect(Util.isOptionWidget(MockParameter.jsonParam)).toBe(false);
+ });
it('isCheckboxWidget', () => {
- expect(Util.isCheckboxWidget(MockParameter.boolParam)).toBe(true)
+ expect(Util.isCheckboxWidget(MockParameter.boolParam)).toBe(true);
- expect(Util.isCheckboxWidget(MockParameter.stringParam1)).toBe(false)
- expect(Util.isCheckboxWidget(MockParameter.stringParam2)).toBe(false)
- expect(Util.isCheckboxWidget(MockParameter.jsonParam)).toBe(false)
- expect(Util.isCheckboxWidget(MockParameter.optionParam)).toBe(false)
- })
+ expect(Util.isCheckboxWidget(MockParameter.stringParam1)).toBe(false);
+ expect(Util.isCheckboxWidget(MockParameter.stringParam2)).toBe(false);
+ expect(Util.isCheckboxWidget(MockParameter.jsonParam)).toBe(false);
+ expect(Util.isCheckboxWidget(MockParameter.optionParam)).toBe(false);
+ });
it('isTextareaWidget', () => {
- expect(Util.isTextareaWidget(MockParameter.jsonParam)).toBe(true)
+ expect(Util.isTextareaWidget(MockParameter.jsonParam)).toBe(true);
- expect(Util.isTextareaWidget(MockParameter.stringParam1)).toBe(false)
- expect(Util.isTextareaWidget(MockParameter.stringParam2)).toBe(false)
- expect(Util.isTextareaWidget(MockParameter.boolParam)).toBe(false)
- expect(Util.isTextareaWidget(MockParameter.optionParam)).toBe(false)
- })
- })
+ expect(Util.isTextareaWidget(MockParameter.stringParam1)).toBe(false);
+ expect(Util.isTextareaWidget(MockParameter.stringParam2)).toBe(false);
+ expect(Util.isTextareaWidget(MockParameter.boolParam)).toBe(false);
+ expect(Util.isTextareaWidget(MockParameter.optionParam)).toBe(false);
+ });
+ });
describe('parameter:parseParameter', () => {
- const paramSpec = Util.getSpecs(MockParameter)
+ const paramSpec = Util.getSpecs(MockParameter);
it('should parse number', () => {
- const params = { intParam: '3', }
- const parsed = Util.parseParameter(paramSpec, params)
- expect(parsed.intParam).toBe(3)
- })
+ const params = {intParam: '3'};
+ const parsed = Util.parseParameter(paramSpec, params);
+ expect(parsed.intParam).toBe(3);
+ });
it('should parse float', () => {
- const params = { floatParam: '0.10', }
- const parsed = Util.parseParameter(paramSpec, params)
- expect(parsed.floatParam).toBe(0.10)
- })
+ const params = {floatParam: '0.10'};
+ const parsed = Util.parseParameter(paramSpec, params);
+ expect(parsed.floatParam).toBe(0.10);
+ });
it('should parse boolean', () => {
- const params1 = { boolParam: 'true', }
- const parsed1 = Util.parseParameter(paramSpec, params1)
- expect(typeof parsed1.boolParam).toBe('boolean')
- expect(parsed1.boolParam).toBe(true)
+ const params1 = {boolParam: 'true'};
+ const parsed1 = Util.parseParameter(paramSpec, params1);
+ expect(typeof parsed1.boolParam).toBe('boolean');
+ expect(parsed1.boolParam).toBe(true);
- const params2 = { boolParam: 'false', }
- const parsed2 = Util.parseParameter(paramSpec, params2)
- expect(typeof parsed2.boolParam).toBe('boolean')
- expect(parsed2.boolParam).toBe(false)
- })
+ const params2 = {boolParam: 'false'};
+ const parsed2 = Util.parseParameter(paramSpec, params2);
+ expect(typeof parsed2.boolParam).toBe('boolean');
+ expect(parsed2.boolParam).toBe(false);
+ });
it('should parse JSON', () => {
- const params = { jsonParam: '{ "a": 3 }', }
- const parsed = Util.parseParameter(paramSpec, params)
- expect(typeof parsed.jsonParam).toBe('object')
- expect(JSON.stringify(parsed.jsonParam)).toBe('{"a":3}')
- })
+ const params = {jsonParam: '{ "a": 3 }'};
+ const parsed = Util.parseParameter(paramSpec, params);
+ expect(typeof parsed.jsonParam).toBe('object');
+ expect(JSON.stringify(parsed.jsonParam)).toBe('{"a":3}');
+ });
it('should not parse string', () => {
- const params = { stringParam: 'example', }
- const parsed = Util.parseParameter(paramSpec, params)
- expect(typeof parsed.stringParam).toBe('string')
- expect(parsed.stringParam).toBe('example')
- })
- })
+ const params = {stringParam: 'example'};
+ const parsed = Util.parseParameter(paramSpec, params);
+ expect(typeof parsed.stringParam).toBe('string');
+ expect(parsed.stringParam).toBe('example');
+ });
+ });
describe('removeDuplicatedColumnsInMultiDimensionAxis', () => {
- let config = {}
+ let config = {};
beforeEach(() => {
- config = {}
- const spec = JSON.parse(JSON.stringify(MockSpec))
- Util.initializeConfig(config, spec)
- config.chart.current = 'drillDown-chart' // set non-sharedAxis chart
- })
+ config = {};
+ const spec = JSON.parse(JSON.stringify(MockSpec));
+ Util.initializeConfig(config, spec);
+ config.chart.current = 'drillDown-chart'; // set non-sharedAxis chart
+ });
it('should remove duplicated axis names in config when axis is not aggregator', () => {
const addColumn = function(config, col) {
- const axis = Util.getCurrentChartAxis(config)['groupAxis']
- axis.push(col)
- const axisSpecs = Util.getCurrentChartAxisSpecs(config)
- Util.removeDuplicatedColumnsInMultiDimensionAxis(config, axisSpecs[2])
- }
+ const axis = Util.getCurrentChartAxis(config)['groupAxis'];
+ axis.push(col);
+ const axisSpecs = Util.getCurrentChartAxisSpecs(config);
+ Util.removeDuplicatedColumnsInMultiDimensionAxis(config, axisSpecs[2]);
+ };
- addColumn(config, { name: 'columnA', aggr: 'sum', index: 0, })
- addColumn(config, { name: 'columnA', aggr: 'sum', index: 0, })
- addColumn(config, { name: 'columnA', aggr: 'sum', index: 0, })
+ addColumn(config, {name: 'columnA', aggr: 'sum', index: 0});
+ addColumn(config, {name: 'columnA', aggr: 'sum', index: 0});
+ addColumn(config, {name: 'columnA', aggr: 'sum', index: 0});
- expect(Util.getCurrentChartAxis(config)['groupAxis'].length).toEqual(1)
- })
+ expect(Util.getCurrentChartAxis(config)['groupAxis'].length).toEqual(1);
+ });
it('should remove duplicated axis names in config when axis is aggregator', () => {
const addColumn = function(config, value) {
- const axis = Util.getCurrentChartAxis(config)['limitedAggrAxis']
- axis.push(value)
- const axisSpecs = Util.getCurrentChartAxisSpecs(config)
- Util.removeDuplicatedColumnsInMultiDimensionAxis(config, axisSpecs[1])
- }
+ const axis = Util.getCurrentChartAxis(config)['limitedAggrAxis'];
+ axis.push(value);
+ const axisSpecs = Util.getCurrentChartAxisSpecs(config);
+ Util.removeDuplicatedColumnsInMultiDimensionAxis(config, axisSpecs[1]);
+ };
- config.chart.current = 'drillDown-chart' // set non-sharedAxis chart
- addColumn(config, { name: 'columnA', aggr: 'sum', index: 0, })
- addColumn(config, { name: 'columnA', aggr: 'aggr', index: 0, })
- addColumn(config, { name: 'columnA', aggr: 'sum', index: 0, })
+ config.chart.current = 'drillDown-chart'; // set non-sharedAxis chart
+ addColumn(config, {name: 'columnA', aggr: 'sum', index: 0});
+ addColumn(config, {name: 'columnA', aggr: 'aggr', index: 0});
+ addColumn(config, {name: 'columnA', aggr: 'sum', index: 0});
- expect(Util.getCurrentChartAxis(config)['limitedAggrAxis'].length).toEqual(2)
- })
- })
+ expect(Util.getCurrentChartAxis(config)['limitedAggrAxis'].length).toEqual(2);
+ });
+ });
describe('applyMaxAxisCount', () => {
- const config = {}
- const spec = JSON.parse(JSON.stringify(MockSpec))
- Util.initializeConfig(config, spec)
+ const config = {};
+ const spec = JSON.parse(JSON.stringify(MockSpec));
+ Util.initializeConfig(config, spec);
const addColumn = function(config, value) {
- const axis = Util.getCurrentChartAxis(config)['limitedAggrAxis']
- axis.push(value)
- const axisSpecs = Util.getCurrentChartAxisSpecs(config)
- Util.applyMaxAxisCount(config, axisSpecs[1])
- }
+ const axis = Util.getCurrentChartAxis(config)['limitedAggrAxis'];
+ axis.push(value);
+ const axisSpecs = Util.getCurrentChartAxisSpecs(config);
+ Util.applyMaxAxisCount(config, axisSpecs[1]);
+ };
it('should remove duplicated axis names in config', () => {
- config.chart.current = 'drillDown-chart' // set non-sharedAxis chart
+ config.chart.current = 'drillDown-chart'; // set non-sharedAxis chart
- addColumn(config, 'columnA')
- addColumn(config, 'columnB')
- addColumn(config, 'columnC')
- addColumn(config, 'columnD')
+ addColumn(config, 'columnA');
+ addColumn(config, 'columnB');
+ addColumn(config, 'columnC');
+ addColumn(config, 'columnD');
expect(Util.getCurrentChartAxis(config)['limitedAggrAxis']).toEqual([
'columnC', 'columnD',
- ])
- })
- })
+ ]);
+ });
+ });
describe('getColumnsFromAxis', () => {
it('should return proper value for regular axis spec (key, aggr, group)', () => {
- const config = {}
-
- const spec = JSON.parse(JSON.stringify(MockSpec))
- Util.initializeConfig(config, spec)
- const chart = 'object-chart'
- config.chart.current = chart
-
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- axis['keyAxis'].push('columnA')
- axis['keyAxis'].push('columnB')
- axis['aggrAxis'].push('columnC')
- axis['groupAxis'].push('columnD')
- axis['groupAxis'].push('columnE')
- axis['groupAxis'].push('columnF')
-
- const column = Util.getColumnsFromAxis(axisSpecs, axis)
- expect(column.key).toEqual([ 'columnA', 'columnB', ])
- expect(column.aggregator).toEqual([ 'columnC', ])
- expect(column.group).toEqual([ 'columnD', 'columnE', 'columnF', ])
- })
+ const config = {};
+
+ const spec = JSON.parse(JSON.stringify(MockSpec));
+ Util.initializeConfig(config, spec);
+ const chart = 'object-chart';
+ config.chart.current = chart;
+
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ axis['keyAxis'].push('columnA');
+ axis['keyAxis'].push('columnB');
+ axis['aggrAxis'].push('columnC');
+ axis['groupAxis'].push('columnD');
+ axis['groupAxis'].push('columnE');
+ axis['groupAxis'].push('columnF');
+
+ const column = Util.getColumnsFromAxis(axisSpecs, axis);
+ expect(column.key).toEqual(['columnA', 'columnB']);
+ expect(column.aggregator).toEqual(['columnC']);
+ expect(column.group).toEqual(['columnD', 'columnE', 'columnF']);
+ });
it('should return proper value for custom axis spec', () => {
- const config = {}
- const spec = JSON.parse(JSON.stringify(MockSpec))
- Util.initializeConfig(config, spec)
- const chart = 'raw-chart' // for test custom columns
- config.chart.current = chart
-
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- axis['customAxis1'] = ['columnA']
- axis['customAxis2'].push('columnB')
- axis['customAxis2'].push('columnC')
- axis['customAxis2'].push('columnD')
-
- const column = Util.getColumnsFromAxis(axisSpecs, axis)
- expect(column.custom.unique).toEqual([ 'columnA', ])
- expect(column.custom.value).toEqual([ 'columnB', 'columnC', 'columnD', ])
- })
- })
+ const config = {};
+ const spec = JSON.parse(JSON.stringify(MockSpec));
+ Util.initializeConfig(config, spec);
+ const chart = 'raw-chart'; // for test custom columns
+ config.chart.current = chart;
+
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ axis['customAxis1'] = ['columnA'];
+ axis['customAxis2'].push('columnB');
+ axis['customAxis2'].push('columnC');
+ axis['customAxis2'].push('columnD');
+
+ const column = Util.getColumnsFromAxis(axisSpecs, axis);
+ expect(column.custom.unique).toEqual(['columnA']);
+ expect(column.custom.value).toEqual(['columnB', 'columnC', 'columnD']);
+ });
+ });
// it's hard to test all methods for transformation.
// so let's do behavioral (black-box) test instead of
describe('getTransformer', () => {
describe('method: raw', () => {
- let config = {}
- const spec = JSON.parse(JSON.stringify(MockSpec2))
- Util.initializeConfig(config, spec)
+ let config = {};
+ const spec = JSON.parse(JSON.stringify(MockSpec2));
+ Util.initializeConfig(config, spec);
it('should return original rows when transform.method is `raw`', () => {
- const chart = 'raw-chart'
- config.chart.current = chart
+ const chart = 'raw-chart';
+ config.chart.current = chart;
- const rows = [ { 'r1': 1, }, ]
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, rows, axisSpecs, axis).transformer
- const transformed = transformer()
+ const rows = [{'r1': 1}];
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, rows, axisSpecs, axis).transformer;
+ const transformed = transformer();
- expect(transformed).toBe(rows)
- })
- })
+ expect(transformed).toBe(rows);
+ });
+ });
describe('array method', () => {
- let config = {}
- const chart = 'array-chart'
- let ageColumn = null
- let balanceColumn = null
- let educationColumn = null
- let martialColumn = null
- let tableDataRows = []
+ let config = {};
+ const chart = 'array-chart';
+ let ageColumn = null;
+ let balanceColumn = null;
+ let educationColumn = null;
+ let martialColumn = null;
+ let tableDataRows = [];
beforeEach(() => {
- const spec = JSON.parse(JSON.stringify(MockSpec2))
- config = {}
- Util.initializeConfig(config, spec)
- config.chart.current = chart
- tableDataRows = JSON.parse(JSON.stringify(MockTableDataRows1))
- ageColumn = JSON.parse(JSON.stringify(MockTableDataColumn[0]))
- balanceColumn = JSON.parse(JSON.stringify(MockTableDataColumn[5]))
- educationColumn = JSON.parse(JSON.stringify(MockTableDataColumn[3]))
- martialColumn = JSON.parse(JSON.stringify(MockTableDataColumn[2]))
- })
+ const spec = JSON.parse(JSON.stringify(MockSpec2));
+ config = {};
+ Util.initializeConfig(config, spec);
+ config.chart.current = chart;
+ tableDataRows = JSON.parse(JSON.stringify(MockTableDataRows1));
+ ageColumn = JSON.parse(JSON.stringify(MockTableDataColumn[0]));
+ balanceColumn = JSON.parse(JSON.stringify(MockTableDataColumn[5]));
+ educationColumn = JSON.parse(JSON.stringify(MockTableDataColumn[3]));
+ martialColumn = JSON.parse(JSON.stringify(MockTableDataColumn[2]));
+ });
it('should transform properly: 0 key, 0 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
-
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
-
- expect(keyColumnName).toEqual('')
- expect(keyNames).toEqual([ '', ])
- expect(groupNames).toEqual([ 'age(sum)', ])
- expect(selectors).toEqual([ 'age(sum)', ])
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
+
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
+
+ expect(keyColumnName).toEqual('');
+ expect(keyNames).toEqual(['']);
+ expect(groupNames).toEqual(['age(sum)']);
+ expect(selectors).toEqual(['age(sum)']);
expect(rows).toEqual([
- { selector: 'age(sum)', value: [ 159, ], }
- ])
- })
+ {selector: 'age(sum)', value: [159]},
+ ]);
+ });
it('should transform properly: 0 key, 0 group, 1 aggr(count)', () => {
- ageColumn.aggr = 'count'
- config.axis[chart].aggrAxis.push(ageColumn)
+ ageColumn.aggr = 'count';
+ config.axis[chart].aggrAxis.push(ageColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- let { rows, } = transformer()
+ let {rows} = transformer();
expect(rows).toEqual([
- { selector: 'age(count)', value: [ 4, ], }
- ])
- })
+ {selector: 'age(count)', value: [4]},
+ ]);
+ });
it('should transform properly: 0 key, 0 group, 1 aggr(avg)', () => {
- ageColumn.aggr = 'avg'
- config.axis[chart].aggrAxis.push(ageColumn)
+ ageColumn.aggr = 'avg';
+ config.axis[chart].aggrAxis.push(ageColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, } = transformer()
+ const {rows} = transformer();
expect(rows).toEqual([
- { selector: 'age(avg)', value: [ (44 + 43 + 39 + 33) / 4.0, ], }
- ])
- })
+ {selector: 'age(avg)', value: [(44 + 43 + 39 + 33) / 4.0]},
+ ]);
+ });
it('should transform properly: 0 key, 0 group, 1 aggr(max)', () => {
- ageColumn.aggr = 'max'
- config.axis[chart].aggrAxis.push(ageColumn)
+ ageColumn.aggr = 'max';
+ config.axis[chart].aggrAxis.push(ageColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, } = transformer()
+ const {rows} = transformer();
expect(rows).toEqual([
- { selector: 'age(max)', value: [ 44, ], }
- ])
- })
+ {selector: 'age(max)', value: [44]},
+ ]);
+ });
it('should transform properly: 0 key, 0 group, 1 aggr(min)', () => {
- ageColumn.aggr = 'min'
- config.axis[chart].aggrAxis.push(ageColumn)
+ ageColumn.aggr = 'min';
+ config.axis[chart].aggrAxis.push(ageColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, } = transformer()
+ const {rows} = transformer();
expect(rows).toEqual([
- { selector: 'age(min)', value: [ 33, ], }
- ])
- })
+ {selector: 'age(min)', value: [33]},
+ ]);
+ });
it('should transform properly: 0 key, 0 group, 2 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- balanceColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].aggrAxis.push(balanceColumn)
+ ageColumn.aggr = 'sum';
+ balanceColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].aggrAxis.push(balanceColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('')
- expect(keyNames).toEqual([ '', ])
- expect(groupNames).toEqual([ 'age(sum)', 'balance(sum)', ])
- expect(selectors).toEqual([ 'age(sum)', 'balance(sum)', ])
+ expect(keyColumnName).toEqual('');
+ expect(keyNames).toEqual(['']);
+ expect(groupNames).toEqual(['age(sum)', 'balance(sum)']);
+ expect(selectors).toEqual(['age(sum)', 'balance(sum)']);
expect(rows).toEqual([
- { selector: 'age(sum)', value: [ 159, ], },
- { selector: 'balance(sum)', value: [ 14181, ], },
- ])
- })
+ {selector: 'age(sum)', value: [159]},
+ {selector: 'balance(sum)', value: [14181]},
+ ]);
+ });
it('should transform properly: 0 key, 1 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].groupAxis.push(martialColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].groupAxis.push(martialColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('')
- expect(keyNames).toEqual([ 'marital', ])
- expect(groupNames).toEqual([ 'married', 'single', ])
- expect(selectors).toEqual([ 'married', 'single', ])
+ expect(keyColumnName).toEqual('');
+ expect(keyNames).toEqual(['marital']);
+ expect(groupNames).toEqual(['married', 'single']);
+ expect(selectors).toEqual(['married', 'single']);
expect(rows).toEqual([
- { selector: 'married', value: [ 82, ], },
- { selector: 'single', value: [ 77, ], },
- ])
- })
+ {selector: 'married', value: [82]},
+ {selector: 'single', value: [77]},
+ ]);
+ });
it('should transform properly: 0 key, 1 group, 2 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- balanceColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].aggrAxis.push(balanceColumn)
- config.axis[chart].groupAxis.push(martialColumn)
+ ageColumn.aggr = 'sum';
+ balanceColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].aggrAxis.push(balanceColumn);
+ config.axis[chart].groupAxis.push(martialColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('')
- expect(keyNames).toEqual([ 'marital', ])
- expect(groupNames).toEqual([ 'married', 'single', ])
+ expect(keyColumnName).toEqual('');
+ expect(keyNames).toEqual(['marital']);
+ expect(groupNames).toEqual(['married', 'single']);
expect(selectors).toEqual([
'married / age(sum)', 'married / balance(sum)', 'single / age(sum)', 'single / balance(sum)',
- ])
+ ]);
expect(rows).toEqual([
- { selector: 'married / age(sum)', value: [ 82 ] },
- { selector: 'married / balance(sum)', value: [ 9286 ] },
- { selector: 'single / age(sum)', value: [ 77 ] },
- { selector: 'single / balance(sum)', value: [ 4895 ] },
- ])
- })
+ {selector: 'married / age(sum)', value: [82]},
+ {selector: 'married / balance(sum)', value: [9286]},
+ {selector: 'single / age(sum)', value: [77]},
+ {selector: 'single / balance(sum)', value: [4895]},
+ ]);
+ });
it('should transform properly: 0 key, 2 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].groupAxis.push(martialColumn)
- config.axis[chart].groupAxis.push(educationColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].groupAxis.push(martialColumn);
+ config.axis[chart].groupAxis.push(educationColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('')
- expect(keyNames).toEqual([ 'marital.education', ])
- expect(groupNames).toEqual([ 'married.primary', 'married.secondary', 'single.tertiary', ])
- expect(selectors).toEqual([ 'married.primary', 'married.secondary', 'single.tertiary', ])
+ expect(keyColumnName).toEqual('');
+ expect(keyNames).toEqual(['marital.education']);
+ expect(groupNames).toEqual(['married.primary', 'married.secondary', 'single.tertiary']);
+ expect(selectors).toEqual(['married.primary', 'married.secondary', 'single.tertiary']);
expect(rows).toEqual([
- { selector: 'married.primary', value: [ '43' ] },
- { selector: 'married.secondary', value: [ '39' ] },
- { selector: 'single.tertiary', value: [ 77 ] },
- ])
- })
+ {selector: 'married.primary', value: ['43']},
+ {selector: 'married.secondary', value: ['39']},
+ {selector: 'single.tertiary', value: [77]},
+ ]);
+ });
it('should transform properly: 1 key, 0 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].keyAxis.push(martialColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].keyAxis.push(martialColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('marital')
- expect(keyNames).toEqual([ 'married', 'single', ])
- expect(groupNames).toEqual([ 'age(sum)', ])
- expect(selectors).toEqual([ 'age(sum)', ])
+ expect(keyColumnName).toEqual('marital');
+ expect(keyNames).toEqual(['married', 'single']);
+ expect(groupNames).toEqual(['age(sum)']);
+ expect(selectors).toEqual(['age(sum)']);
expect(rows).toEqual([
- { selector: 'age(sum)', value: [ 82, 77, ] },
- ])
- })
+ {selector: 'age(sum)', value: [82, 77]},
+ ]);
+ });
it('should transform properly: 2 key, 0 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].keyAxis.push(martialColumn)
- config.axis[chart].keyAxis.push(educationColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].keyAxis.push(martialColumn);
+ config.axis[chart].keyAxis.push(educationColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('marital.education')
- expect(keyNames).toEqual([ 'married.primary', 'married.secondary', 'single.tertiary', ])
- expect(groupNames).toEqual([ 'age(sum)', ])
- expect(selectors).toEqual([ 'age(sum)', ])
+ expect(keyColumnName).toEqual('marital.education');
+ expect(keyNames).toEqual(['married.primary', 'married.secondary', 'single.tertiary']);
+ expect(groupNames).toEqual(['age(sum)']);
+ expect(selectors).toEqual(['age(sum)']);
expect(rows).toEqual([
- { selector: 'age(sum)', value: [ '43', '39', 77, ] },
- ])
- })
+ {selector: 'age(sum)', value: ['43', '39', 77]},
+ ]);
+ });
it('should transform properly: 1 key, 1 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].keyAxis.push(martialColumn)
- config.axis[chart].groupAxis.push(educationColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].keyAxis.push(martialColumn);
+ config.axis[chart].groupAxis.push(educationColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('marital')
- expect(keyNames).toEqual([ 'married', 'single', ])
- expect(groupNames).toEqual([ 'primary', 'secondary', 'tertiary', ])
- expect(selectors).toEqual([ 'primary', 'secondary', 'tertiary', ])
+ expect(keyColumnName).toEqual('marital');
+ expect(keyNames).toEqual(['married', 'single']);
+ expect(groupNames).toEqual(['primary', 'secondary', 'tertiary']);
+ expect(selectors).toEqual(['primary', 'secondary', 'tertiary']);
expect(rows).toEqual([
- { selector: 'primary', value: [ '43', null, ] },
- { selector: 'secondary', value: [ '39', null, ] },
- { selector: 'tertiary', value: [ null, 77, ] },
- ])
- })
- }) // end: describe('method: array')
+ {selector: 'primary', value: ['43', null]},
+ {selector: 'secondary', value: ['39', null]},
+ {selector: 'tertiary', value: [null, 77]},
+ ]);
+ });
+ }); // end: describe('method: array')
describe('method: object', () => {
- let config = {}
- const chart = 'object-chart'
- let ageColumn = null
- let balanceColumn = null
- let educationColumn = null
- let martialColumn = null
- const tableDataRows = JSON.parse(JSON.stringify(MockTableDataRows1))
+ let config = {};
+ const chart = 'object-chart';
+ let ageColumn = null;
+ let balanceColumn = null;
+ let educationColumn = null;
+ let martialColumn = null;
+ const tableDataRows = JSON.parse(JSON.stringify(MockTableDataRows1));
beforeEach(() => {
- const spec = JSON.parse(JSON.stringify(MockSpec2))
- config = {}
- Util.initializeConfig(config, spec)
- config.chart.current = chart
- ageColumn = JSON.parse(JSON.stringify(MockTableDataColumn[0]))
- balanceColumn = JSON.parse(JSON.stringify(MockTableDataColumn[5]))
- educationColumn = JSON.parse(JSON.stringify(MockTableDataColumn[3]))
- martialColumn = JSON.parse(JSON.stringify(MockTableDataColumn[2]))
- })
+ const spec = JSON.parse(JSON.stringify(MockSpec2));
+ config = {};
+ Util.initializeConfig(config, spec);
+ config.chart.current = chart;
+ ageColumn = JSON.parse(JSON.stringify(MockTableDataColumn[0]));
+ balanceColumn = JSON.parse(JSON.stringify(MockTableDataColumn[5]));
+ educationColumn = JSON.parse(JSON.stringify(MockTableDataColumn[3]));
+ martialColumn = JSON.parse(JSON.stringify(MockTableDataColumn[2]));
+ });
it('should transform properly: 0 key, 0 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('')
- expect(keyNames).toEqual([ '', ])
- expect(groupNames).toEqual([ 'age(sum)', ])
- expect(selectors).toEqual([ 'age(sum)', ])
- expect(rows).toEqual([{ 'age(sum)': 44 + 43 + 39 + 33, }])
- })
+ expect(keyColumnName).toEqual('');
+ expect(keyNames).toEqual(['']);
+ expect(groupNames).toEqual(['age(sum)']);
+ expect(selectors).toEqual(['age(sum)']);
+ expect(rows).toEqual([{'age(sum)': 44 + 43 + 39 + 33}]);
+ });
it('should transform properly: 0 key, 0 group, 1 aggr(count)', () => {
- ageColumn.aggr = 'count'
- config.axis[chart].aggrAxis.push(ageColumn)
+ ageColumn.aggr = 'count';
+ config.axis[chart].aggrAxis.push(ageColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, } = transformer()
- expect(rows).toEqual([{ 'age(count)': 4, }])
- })
+ const {rows} = transformer();
+ expect(rows).toEqual([{'age(count)': 4}]);
+ });
it('should transform properly: 0 key, 0 group, 1 aggr(avg)', () => {
- ageColumn.aggr = 'avg'
- config.axis[chart].aggrAxis.push(ageColumn)
+ ageColumn.aggr = 'avg';
+ config.axis[chart].aggrAxis.push(ageColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, } = transformer()
+ const {rows} = transformer();
expect(rows).toEqual([
- { 'age(avg)': (44 + 43 + 39 + 33) / 4.0, }
- ])
- })
+ {'age(avg)': (44 + 43 + 39 + 33) / 4.0},
+ ]);
+ });
it('should transform properly: 0 key, 0 group, 1 aggr(max)', () => {
- ageColumn.aggr = 'max'
- config.axis[chart].aggrAxis.push(ageColumn)
+ ageColumn.aggr = 'max';
+ config.axis[chart].aggrAxis.push(ageColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, } = transformer()
- expect(rows).toEqual([{ 'age(max)': 44, }])
- })
+ const {rows} = transformer();
+ expect(rows).toEqual([{'age(max)': 44}]);
+ });
it('should transform properly: 0 key, 0 group, 1 aggr(min)', () => {
- ageColumn.aggr = 'min'
- config.axis[chart].aggrAxis.push(ageColumn)
+ ageColumn.aggr = 'min';
+ config.axis[chart].aggrAxis.push(ageColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, } = transformer()
- expect(rows).toEqual([{ 'age(min)': 33, }])
- })
+ const {rows} = transformer();
+ expect(rows).toEqual([{'age(min)': 33}]);
+ });
it('should transform properly: 0 key, 0 group, 2 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- balanceColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].aggrAxis.push(balanceColumn)
+ ageColumn.aggr = 'sum';
+ balanceColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].aggrAxis.push(balanceColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('')
- expect(keyNames).toEqual([ '', ])
- expect(groupNames).toEqual([ 'age(sum)', 'balance(sum)', ])
- expect(selectors).toEqual([ 'age(sum)', 'balance(sum)', ])
- expect(rows).toEqual([{ 'age(sum)': 159, 'balance(sum)': 14181, }])
- })
+ expect(keyColumnName).toEqual('');
+ expect(keyNames).toEqual(['']);
+ expect(groupNames).toEqual(['age(sum)', 'balance(sum)']);
+ expect(selectors).toEqual(['age(sum)', 'balance(sum)']);
+ expect(rows).toEqual([{'age(sum)': 159, 'balance(sum)': 14181}]);
+ });
it('should transform properly: 0 key, 1 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].groupAxis.push(martialColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].groupAxis.push(martialColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('')
- expect(keyNames).toEqual([ 'marital', ])
- expect(groupNames).toEqual([ 'married', 'single', ])
- expect(selectors).toEqual([ 'married', 'single', ])
+ expect(keyColumnName).toEqual('');
+ expect(keyNames).toEqual(['marital']);
+ expect(groupNames).toEqual(['married', 'single']);
+ expect(selectors).toEqual(['married', 'single']);
expect(rows).toEqual([
- { single: 77, married: 82, }
- ])
- })
+ {single: 77, married: 82},
+ ]);
+ });
it('should transform properly: 0 key, 1 group, 2 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- balanceColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].aggrAxis.push(balanceColumn)
- config.axis[chart].groupAxis.push(martialColumn)
+ ageColumn.aggr = 'sum';
+ balanceColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].aggrAxis.push(balanceColumn);
+ config.axis[chart].groupAxis.push(martialColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('')
- expect(keyNames).toEqual([ 'marital', ])
- expect(groupNames).toEqual([ 'married', 'single', ])
+ expect(keyColumnName).toEqual('');
+ expect(keyNames).toEqual(['marital']);
+ expect(groupNames).toEqual(['married', 'single']);
expect(selectors).toEqual([
'married / age(sum)', 'married / balance(sum)', 'single / age(sum)', 'single / balance(sum)',
- ])
+ ]);
expect(rows).toEqual([{
'married / age(sum)': 82,
'single / age(sum)': 77,
'married / balance(sum)': 9286,
'single / balance(sum)': 4895,
- }])
- })
+ }]);
+ });
it('should transform properly: 0 key, 2 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].groupAxis.push(martialColumn)
- config.axis[chart].groupAxis.push(educationColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].groupAxis.push(martialColumn);
+ config.axis[chart].groupAxis.push(educationColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('')
- expect(keyNames).toEqual([ 'marital.education', ])
- expect(groupNames).toEqual([ 'married.primary', 'married.secondary', 'single.tertiary', ])
- expect(selectors).toEqual([ 'married.primary', 'married.secondary', 'single.tertiary', ])
+ expect(keyColumnName).toEqual('');
+ expect(keyNames).toEqual(['marital.education']);
+ expect(groupNames).toEqual(['married.primary', 'married.secondary', 'single.tertiary']);
+ expect(selectors).toEqual(['married.primary', 'married.secondary', 'single.tertiary']);
expect(rows).toEqual([{
'married.primary': '43', 'married.secondary': '39', 'single.tertiary': 77,
- }])
- })
+ }]);
+ });
it('should transform properly: 1 key, 0 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].keyAxis.push(martialColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].keyAxis.push(martialColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('marital')
- expect(keyNames).toEqual([ 'married', 'single', ])
- expect(groupNames).toEqual([ 'age(sum)', ])
- expect(selectors).toEqual([ 'age(sum)', ])
+ expect(keyColumnName).toEqual('marital');
+ expect(keyNames).toEqual(['married', 'single']);
+ expect(groupNames).toEqual(['age(sum)']);
+ expect(selectors).toEqual(['age(sum)']);
expect(rows).toEqual([
- { 'age(sum)': 82, 'marital': 'married', },
- { 'age(sum)': 77, 'marital': 'single', },
- ])
- })
+ {'age(sum)': 82, 'marital': 'married'},
+ {'age(sum)': 77, 'marital': 'single'},
+ ]);
+ });
it('should transform properly: 2 key, 0 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].keyAxis.push(martialColumn)
- config.axis[chart].keyAxis.push(educationColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].keyAxis.push(martialColumn);
+ config.axis[chart].keyAxis.push(educationColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('marital.education')
- expect(keyNames).toEqual([ 'married.primary', 'married.secondary', 'single.tertiary', ])
- expect(groupNames).toEqual([ 'age(sum)', ])
- expect(selectors).toEqual([ 'age(sum)', ])
+ expect(keyColumnName).toEqual('marital.education');
+ expect(keyNames).toEqual(['married.primary', 'married.secondary', 'single.tertiary']);
+ expect(groupNames).toEqual(['age(sum)']);
+ expect(selectors).toEqual(['age(sum)']);
expect(rows).toEqual([
- { 'age(sum)': '43', 'marital.education': 'married.primary' },
- { 'age(sum)': '39', 'marital.education': 'married.secondary' },
- { 'age(sum)': 77, 'marital.education': 'single.tertiary' },
- ])
- })
+ {'age(sum)': '43', 'marital.education': 'married.primary'},
+ {'age(sum)': '39', 'marital.education': 'married.secondary'},
+ {'age(sum)': 77, 'marital.education': 'single.tertiary'},
+ ]);
+ });
it('should transform properly: 1 key, 1 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].keyAxis.push(martialColumn)
- config.axis[chart].groupAxis.push(educationColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].keyAxis.push(martialColumn);
+ config.axis[chart].groupAxis.push(educationColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('marital')
- expect(keyNames).toEqual([ 'married', 'single', ])
- expect(groupNames).toEqual([ 'primary', 'secondary', 'tertiary', ])
- expect(selectors).toEqual([ 'primary', 'secondary', 'tertiary', ])
+ expect(keyColumnName).toEqual('marital');
+ expect(keyNames).toEqual(['married', 'single']);
+ expect(groupNames).toEqual(['primary', 'secondary', 'tertiary']);
+ expect(selectors).toEqual(['primary', 'secondary', 'tertiary']);
expect(rows).toEqual([
- { primary: '43', secondary: '39', marital: 'married' },
- { tertiary: 44 + 33, marital: 'single' },
- ])
- })
- }) // end: describe('method: object')
+ {primary: '43', secondary: '39', marital: 'married'},
+ {tertiary: 44 + 33, marital: 'single'},
+ ]);
+ });
+ }); // end: describe('method: object')
describe('method: drill-down', () => {
- let config = {}
- const chart = 'drillDown-chart'
- let ageColumn = null
- let balanceColumn = null
- let educationColumn = null
- let martialColumn = null
- const tableDataRows = JSON.parse(JSON.stringify(MockTableDataRows1))
+ let config = {};
+ const chart = 'drillDown-chart';
+ let ageColumn = null;
+ let balanceColumn = null;
+ let educationColumn = null;
+ let martialColumn = null;
+ const tableDataRows = JSON.parse(JSON.stringify(MockTableDataRows1));
beforeEach(() => {
- const spec = JSON.parse(JSON.stringify(MockSpec2))
- config = {}
- Util.initializeConfig(config, spec)
- config.chart.current = chart
- ageColumn = JSON.parse(JSON.stringify(MockTableDataColumn[0]))
- balanceColumn = JSON.parse(JSON.stringify(MockTableDataColumn[5]))
- educationColumn = JSON.parse(JSON.stringify(MockTableDataColumn[3]))
- martialColumn = JSON.parse(JSON.stringify(MockTableDataColumn[2]))
- })
+ const spec = JSON.parse(JSON.stringify(MockSpec2));
+ config = {};
+ Util.initializeConfig(config, spec);
+ config.chart.current = chart;
+ ageColumn = JSON.parse(JSON.stringify(MockTableDataColumn[0]));
+ balanceColumn = JSON.parse(JSON.stringify(MockTableDataColumn[5]));
+ educationColumn = JSON.parse(JSON.stringify(MockTableDataColumn[3]));
+ martialColumn = JSON.parse(JSON.stringify(MockTableDataColumn[2]));
+ });
it('should transform properly: 0 key, 0 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('')
- expect(keyNames).toEqual([ '', ])
- expect(groupNames).toEqual([ 'age(sum)', ])
- expect(selectors).toEqual([ 'age(sum)', ])
+ expect(keyColumnName).toEqual('');
+ expect(keyNames).toEqual(['']);
+ expect(groupNames).toEqual(['age(sum)']);
+ expect(selectors).toEqual(['age(sum)']);
expect(rows).toEqual([
- { selector: 'age(sum)', value: 44 + 43 + 39 + 33, drillDown: [ ], },
- ])
- })
+ {selector: 'age(sum)', value: 44 + 43 + 39 + 33, drillDown: []},
+ ]);
+ });
it('should transform properly: 0 key, 0 group, 1 aggr(count)', () => {
- ageColumn.aggr = 'count'
- config.axis[chart].aggrAxis.push(ageColumn)
+ ageColumn.aggr = 'count';
+ config.axis[chart].aggrAxis.push(ageColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, } = transformer()
+ const {rows} = transformer();
expect(rows).toEqual([
- { selector: 'age(count)', value: 4, drillDown: [ ], },
- ])
- })
+ {selector: 'age(count)', value: 4, drillDown: []},
+ ]);
+ });
it('should transform properly: 0 key, 0 group, 1 aggr(avg)', () => {
- ageColumn.aggr = 'avg'
- config.axis[chart].aggrAxis.push(ageColumn)
+ ageColumn.aggr = 'avg';
+ config.axis[chart].aggrAxis.push(ageColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, } = transformer()
+ const {rows} = transformer();
expect(rows).toEqual([
- { selector: 'age(avg)', value: (44 + 43 + 39 + 33) / 4.0, drillDown: [ ], },
- ])
- })
+ {selector: 'age(avg)', value: (44 + 43 + 39 + 33) / 4.0, drillDown: []},
+ ]);
+ });
it('should transform properly: 0 key, 0 group, 1 aggr(max)', () => {
- ageColumn.aggr = 'max'
- config.axis[chart].aggrAxis.push(ageColumn)
+ ageColumn.aggr = 'max';
+ config.axis[chart].aggrAxis.push(ageColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, } = transformer()
+ const {rows} = transformer();
expect(rows).toEqual([
- { selector: 'age(max)', value: 44, drillDown: [ ], },
- ])
- })
+ {selector: 'age(max)', value: 44, drillDown: []},
+ ]);
+ });
it('should transform properly: 0 key, 0 group, 1 aggr(min)', () => {
- ageColumn.aggr = 'min'
- config.axis[chart].aggrAxis.push(ageColumn)
+ ageColumn.aggr = 'min';
+ config.axis[chart].aggrAxis.push(ageColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, } = transformer()
+ const {rows} = transformer();
expect(rows).toEqual([
- { selector: 'age(min)', value: 33, drillDown: [ ], },
- ])
- })
+ {selector: 'age(min)', value: 33, drillDown: []},
+ ]);
+ });
it('should transform properly: 0 key, 0 group, 2 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- balanceColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].aggrAxis.push(balanceColumn)
+ ageColumn.aggr = 'sum';
+ balanceColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].aggrAxis.push(balanceColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('')
- expect(keyNames).toEqual([ '', ])
- expect(groupNames).toEqual([ 'age(sum)', 'balance(sum)', ])
- expect(selectors).toEqual([ 'age(sum)', 'balance(sum)', ])
+ expect(keyColumnName).toEqual('');
+ expect(keyNames).toEqual(['']);
+ expect(groupNames).toEqual(['age(sum)', 'balance(sum)']);
+ expect(selectors).toEqual(['age(sum)', 'balance(sum)']);
expect(rows).toEqual([
- { selector: 'age(sum)', value: 159, drillDown: [ ], },
- { selector: 'balance(sum)', value: 14181, drillDown: [ ], },
- ])
- })
+ {selector: 'age(sum)', value: 159, drillDown: []},
+ {selector: 'balance(sum)', value: 14181, drillDown: []},
+ ]);
+ });
it('should transform properly: 0 key, 1 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].groupAxis.push(martialColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].groupAxis.push(martialColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('')
- expect(keyNames).toEqual([ 'marital', ])
- expect(groupNames).toEqual([ 'married', 'single', ])
- expect(selectors).toEqual([ 'age(sum)', ])
+ expect(keyColumnName).toEqual('');
+ expect(keyNames).toEqual(['marital']);
+ expect(groupNames).toEqual(['married', 'single']);
+ expect(selectors).toEqual(['age(sum)']);
expect(rows).toEqual([
{
selector: 'age(sum)',
value: 159,
drillDown: [
- { group: 'married', value: 82 },
- { group: 'single', value: 77 },
+ {group: 'married', value: 82},
+ {group: 'single', value: 77},
],
},
- ])
- })
+ ]);
+ });
it('should transform properly: 0 key, 1 group, 2 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- balanceColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].aggrAxis.push(balanceColumn)
- config.axis[chart].groupAxis.push(martialColumn)
-
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
-
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
-
- expect(keyColumnName).toEqual('')
- expect(keyNames).toEqual([ 'marital', ])
- expect(groupNames).toEqual([ 'married', 'single', ])
- expect(selectors).toEqual([ 'age(sum)', 'balance(sum)' ])
+ ageColumn.aggr = 'sum';
+ balanceColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].aggrAxis.push(balanceColumn);
+ config.axis[chart].groupAxis.push(martialColumn);
+
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
+
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
+
+ expect(keyColumnName).toEqual('');
+ expect(keyNames).toEqual(['marital']);
+ expect(groupNames).toEqual(['married', 'single']);
+ expect(selectors).toEqual(['age(sum)', 'balance(sum)']);
expect(rows).toEqual([
{
selector: 'age(sum)',
value: 159,
drillDown: [
- { group: 'married', value: 82 },
- { group: 'single', value: 77 },
+ {group: 'married', value: 82},
+ {group: 'single', value: 77},
],
},
{
selector: 'balance(sum)',
value: 14181,
drillDown: [
- { group: 'married', value: 9286 },
- { group: 'single', value: 4895 },
+ {group: 'married', value: 9286},
+ {group: 'single', value: 4895},
],
},
- ])
- })
+ ]);
+ });
it('should transform properly: 0 key, 2 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].groupAxis.push(martialColumn)
- config.axis[chart].groupAxis.push(educationColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].groupAxis.push(martialColumn);
+ config.axis[chart].groupAxis.push(educationColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('')
- expect(keyNames).toEqual([ 'marital.education', ])
- expect(groupNames).toEqual([ 'married.primary', 'married.secondary', 'single.tertiary', ])
- expect(selectors).toEqual([ 'age(sum)', ])
+ expect(keyColumnName).toEqual('');
+ expect(keyNames).toEqual(['marital.education']);
+ expect(groupNames).toEqual(['married.primary', 'married.secondary', 'single.tertiary']);
+ expect(selectors).toEqual(['age(sum)']);
expect(rows).toEqual([
{
selector: 'age(sum)',
value: 159,
drillDown: [
- { group: 'married.primary', value: '43' },
- { group: 'married.secondary', value: '39' },
- { group: 'single.tertiary', value: 77 },
+ {group: 'married.primary', value: '43'},
+ {group: 'married.secondary', value: '39'},
+ {group: 'single.tertiary', value: 77},
],
},
- ])
- })
+ ]);
+ });
it('should transform properly: 1 key, 0 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].keyAxis.push(martialColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].keyAxis.push(martialColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('marital')
- expect(keyNames).toEqual([ 'married', 'single', ])
- expect(groupNames).toEqual([ 'age(sum)', ])
- expect(selectors).toEqual([ 'married', 'single', ])
+ expect(keyColumnName).toEqual('marital');
+ expect(keyNames).toEqual(['married', 'single']);
+ expect(groupNames).toEqual(['age(sum)']);
+ expect(selectors).toEqual(['married', 'single']);
expect(rows).toEqual([
- { selector: 'married', value: 82, drillDown: [ ], },
- { selector: 'single', value: 77, drillDown: [ ], },
- ])
- })
+ {selector: 'married', value: 82, drillDown: []},
+ {selector: 'single', value: 77, drillDown: []},
+ ]);
+ });
it('should transform properly: 2 key, 0 group, 1 aggr(sum)', () => {
- ageColumn.aggr = 'sum'
- config.axis[chart].aggrAxis.push(ageColumn)
- config.axis[chart].keyAxis.push(martialColumn)
- config.axis[chart].keyAxis.push(educationColumn)
+ ageColumn.aggr = 'sum';
+ config.axis[chart].aggrAxis.push(ageColumn);
+ config.axis[chart].keyAxis.push(martialColumn);
+ config.axis[chart].keyAxis.push(educationColumn);
- const axisSpecs = config.axisSpecs[chart]
- const axis = config.axis[chart]
- const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer
+ const axisSpecs = config.axisSpecs[chart];
+ const axis = config.axis[chart];
+ const transformer = Util.getTransformer(config, tableDataRows, axisSpecs, axis).transformer;
- const { rows, keyColumnName, keyNames, groupNames, selectors, } = transformer()
+ const {rows, keyColumnName, keyNames, groupNames, selectors} = transformer();
- expect(keyColumnName).toEqual('marital.education')
- expect(keyNames).toEqual([ 'married.primary', 'married.secondary', 'single.tertiary', ])
- expect(groupNames).toEqual([ 'age(sum)', ])
- expect(selectors).toEqual([ 'married.primary', 'married.secondary', 'single.tertiary', ])
+ expect(keyColumnName).toEqual('marital.education');
+ expect(keyNames).toEqual(['married.primary', 'married.secondary', 'single.tertiary']);
+ expect(groupNames).toEqual(['age(sum)']);
+ expect(selectors).toEqual(['married.primary', 'married.secondary', 'single.tertiary']);
expect(rows).toEqual([
- { selector: 'married.primary', value: '43', drillDown: [ ], },
- { selector: 'married.secondary', value: '39', drillDown: [ ], },
- { selector: 'single.tertiary', value: 77, drillDown: [ ], },
- ])
- })
+ {selector: 'married.primary', value: '43', drillDown: []},
+ {selector: 'marr
<TRUNCATED>
[06/12] zeppelin git commit: [ZEPPELIN-3245] checkstyle/eslintrc for
zeppelin-web (JavaScript)
Posted by pr...@apache.org.
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/search/result-list.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/search/result-list.controller.js b/zeppelin-web/src/app/search/result-list.controller.js
index 05be721..65c10b1 100644
--- a/zeppelin-web/src/app/search/result-list.controller.js
+++ b/zeppelin-web/src/app/search/result-list.controller.js
@@ -12,107 +12,107 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').controller('SearchResultCtrl', SearchResultCtrl)
+angular.module('zeppelinWebApp').controller('SearchResultCtrl', SearchResultCtrl);
-function SearchResultCtrl ($scope, $routeParams, searchService) {
- 'ngInject'
+function SearchResultCtrl($scope, $routeParams, searchService) {
+ 'ngInject';
- $scope.isResult = true
- $scope.searchTerm = $routeParams.searchTerm
- let results = searchService.search({'q': $routeParams.searchTerm}).query()
+ $scope.isResult = true;
+ $scope.searchTerm = $routeParams.searchTerm;
+ let results = searchService.search({'q': $routeParams.searchTerm}).query();
- results.$promise.then(function (result) {
- $scope.notes = result.body.map(function (note) {
+ results.$promise.then(function(result) {
+ $scope.notes = result.body.map(function(note) {
// redirect to notebook when search result is a notebook itself,
// not a paragraph
if (!/\/paragraph\//.test(note.id)) {
- return note
+ return note;
}
note.id = note.id.replace('paragraph/', '?paragraph=') +
- '&term=' + $routeParams.searchTerm
+ '&term=' + $routeParams.searchTerm;
- return note
- })
+ return note;
+ });
if ($scope.notes.length === 0) {
- $scope.isResult = false
+ $scope.isResult = false;
} else {
- $scope.isResult = true
+ $scope.isResult = true;
}
- $scope.$on('$routeChangeStart', function (event, next, current) {
+ $scope.$on('$routeChangeStart', function(event, next, current) {
if (next.originalPath !== '/search/:searchTerm') {
- searchService.searchTerm = ''
+ searchService.searchTerm = '';
}
- })
- })
+ });
+ });
- $scope.page = 0
- $scope.allResults = false
+ $scope.page = 0;
+ $scope.allResults = false;
- $scope.highlightSearchResults = function (note) {
- return function (_editor) {
- function getEditorMode (text) {
+ $scope.highlightSearchResults = function(note) {
+ return function(_editor) {
+ function getEditorMode(text) {
let editorModes = {
'ace/mode/scala': /^%(\w*\.)?spark/,
'ace/mode/python': /^%(\w*\.)?(pyspark|python)/,
'ace/mode/r': /^%(\w*\.)?(r|sparkr|knitr)/,
'ace/mode/sql': /^%(\w*\.)?\wql/,
'ace/mode/markdown': /^%md/,
- 'ace/mode/sh': /^%sh/
- }
+ 'ace/mode/sh': /^%sh/,
+ };
- return Object.keys(editorModes).reduce(function (res, mode) {
- return editorModes[mode].test(text) ? mode : res
- }, 'ace/mode/scala')
+ return Object.keys(editorModes).reduce(function(res, mode) {
+ return editorModes[mode].test(text) ? mode : res;
+ }, 'ace/mode/scala');
}
- let Range = ace.require('ace/range').Range
+ let Range = ace.require('ace/range').Range;
- _editor.setOption('highlightActiveLine', false)
- _editor.$blockScrolling = Infinity
- _editor.setReadOnly(true)
- _editor.renderer.setShowGutter(false)
- _editor.setTheme('ace/theme/chrome')
- _editor.getSession().setMode(getEditorMode(note.text))
+ _editor.setOption('highlightActiveLine', false);
+ _editor.$blockScrolling = Infinity;
+ _editor.setReadOnly(true);
+ _editor.renderer.setShowGutter(false);
+ _editor.setTheme('ace/theme/chrome');
+ _editor.getSession().setMode(getEditorMode(note.text));
- function getIndeces (term) {
- return function (str) {
- let indeces = []
- let i = -1
+ function getIndeces(term) {
+ return function(str) {
+ let indeces = [];
+ let i = -1;
while ((i = str.indexOf(term, i + 1)) >= 0) {
- indeces.push(i)
+ indeces.push(i);
}
- return indeces
- }
+ return indeces;
+ };
}
- let result = ''
+ let result = '';
if (note.header !== '') {
- result = note.header + '\n\n' + note.snippet
+ result = note.header + '\n\n' + note.snippet;
} else {
- result = note.snippet
+ result = note.snippet;
}
let lines = result
.split('\n')
- .map(function (line, row) {
- let match = line.match(/<B>(.+?)<\/B>/)
+ .map(function(line, row) {
+ let match = line.match(/<B>(.+?)<\/B>/);
// return early if nothing to highlight
if (!match) {
- return line
+ return line;
}
- let term = match[1]
+ let term = match[1];
let __line = line
.replace(/<B>/g, '')
- .replace(/<\/B>/g, '')
+ .replace(/<\/B>/g, '');
- let indeces = getIndeces(term)(__line)
+ let indeces = getIndeces(term)(__line);
- indeces.forEach(function (start) {
- let end = start + term.length
+ indeces.forEach(function(start) {
+ let end = start + term.length;
if (note.header !== '' && row === 0) {
_editor
.getSession()
@@ -120,14 +120,14 @@ function SearchResultCtrl ($scope, $routeParams, searchService) {
new Range(row, 0, row, line.length),
'search-results-highlight-header',
'background'
- )
+ );
_editor
.getSession()
.addMarker(
new Range(row, start, row, end),
'search-results-highlight',
'line'
- )
+ );
} else {
_editor
.getSession()
@@ -135,20 +135,22 @@ function SearchResultCtrl ($scope, $routeParams, searchService) {
new Range(row, start, row, end),
'search-results-highlight',
'line'
- )
+ );
}
- })
- return __line
- })
+ });
+ return __line;
+ });
// resize editor based on content length
_editor.setOption(
'maxLines',
- lines.reduce(function (len, line) { return len + line.length }, 0)
- )
-
- _editor.getSession().setValue(lines.join('\n'))
- note.searchResult = lines
- }
- }
+ lines.reduce(function(len, line) {
+ return len + line.length;
+ }, 0)
+ );
+
+ _editor.getSession().setValue(lines.join('\n'));
+ note.searchResult = lines;
+ };
+ };
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/search/search.service.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/search/search.service.js b/zeppelin-web/src/app/search/search.service.js
index fe4b666..248bacd 100644
--- a/zeppelin-web/src/app/search/search.service.js
+++ b/zeppelin-web/src/app/search/search.service.js
@@ -12,22 +12,22 @@
* limitations under the License.
*/
-angular.module('zeppelinWebApp').service('searchService', SearchService)
+angular.module('zeppelinWebApp').service('searchService', SearchService);
-function SearchService ($resource, baseUrlSrv) {
- 'ngInject'
+function SearchService($resource, baseUrlSrv) {
+ 'ngInject';
- this.search = function (term) {
- this.searchTerm = term.q
- console.log('Searching for: %o', term.q)
+ this.search = function(term) {
+ this.searchTerm = term.q;
+ console.log('Searching for: %o', term.q);
if (!term.q) { // TODO(bzz): empty string check
- return
+ return;
}
- let encQuery = window.encodeURIComponent(term.q)
+ let encQuery = window.encodeURIComponent(term.q);
return $resource(baseUrlSrv.getRestApiBase() + '/notebook/search?q=' + encQuery, {}, {
- query: {method: 'GET'}
- })
- }
+ query: {method: 'GET'},
+ });
+ };
- this.searchTerm = ''
+ this.searchTerm = '';
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/spell/index.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/spell/index.js b/zeppelin-web/src/app/spell/index.js
index ac4343c..8ec4753 100644
--- a/zeppelin-web/src/app/spell/index.js
+++ b/zeppelin-web/src/app/spell/index.js
@@ -18,8 +18,8 @@
export {
DefaultDisplayType,
SpellResult,
-} from './spell-result'
+} from './spell-result';
export {
SpellBase,
-} from './spell-base'
+} from './spell-base';
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/spell/spell-base.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/spell/spell-base.js b/zeppelin-web/src/app/spell/spell-base.js
index 0b4216f..16e0553 100644
--- a/zeppelin-web/src/app/spell/spell-base.js
+++ b/zeppelin-web/src/app/spell/spell-base.js
@@ -19,12 +19,12 @@
import {
DefaultDisplayType,
SpellResult,
-} from './spell-result'
+} from './spell-result';
/* eslint-enable no-unused-vars */
export class SpellBase {
- constructor (magic) {
- this.magic = magic
+ constructor(magic) {
+ this.magic = magic;
}
/**
@@ -34,8 +34,8 @@ export class SpellBase {
* @param config {Object}
* @return {SpellResult}
*/
- interpret (paragraphText, config) {
- throw new Error('SpellBase.interpret() should be overrided')
+ interpret(paragraphText, config) {
+ throw new Error('SpellBase.interpret() should be overrided');
}
/**
@@ -43,7 +43,7 @@ export class SpellBase {
* (e.g `%flowchart`)
* @return {string}
*/
- getMagic () {
- return this.magic
+ getMagic() {
+ return this.magic;
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/spell/spell-result.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/spell/spell-result.js b/zeppelin-web/src/app/spell/spell-result.js
index 5ba65c2..52bcdc1 100644
--- a/zeppelin-web/src/app/spell/spell-result.js
+++ b/zeppelin-web/src/app/spell/spell-result.js
@@ -21,8 +21,8 @@ export const DefaultDisplayType = {
HTML: 'HTML',
ANGULAR: 'ANGULAR',
TEXT: 'TEXT',
- NETWORK: 'NETWORK'
-}
+ NETWORK: 'NETWORK',
+};
export const DefaultDisplayMagic = {
'%element': DefaultDisplayType.ELEMENT,
@@ -31,12 +31,12 @@ export const DefaultDisplayMagic = {
'%angular': DefaultDisplayType.ANGULAR,
'%text': DefaultDisplayType.TEXT,
'%network': DefaultDisplayType.NETWORK,
-}
+};
export class DataWithType {
- constructor (data, type, magic, text) {
- this.data = data
- this.type = type
+ constructor(data, type, magic, text) {
+ this.data = data;
+ this.type = type;
/**
* keep for `DefaultDisplayType.ELEMENT` (function data type)
@@ -46,29 +46,29 @@ export class DataWithType {
* since they don't have context where they are created.
*/
- this.magic = magic
- this.text = text
+ this.magic = magic;
+ this.text = text;
}
- static handleDefaultMagic (m) {
+ static handleDefaultMagic(m) {
// let's use default display type instead of magic in case of default
// to keep consistency with backend interpreter
if (DefaultDisplayMagic[m]) {
- return DefaultDisplayMagic[m]
+ return DefaultDisplayMagic[m];
} else {
- return m
+ return m;
}
}
- static createPropagable (dataWithType) {
+ static createPropagable(dataWithType) {
if (!SpellResult.isFunction(dataWithType.data)) {
- return dataWithType
+ return dataWithType;
}
- const data = dataWithType.getText()
- const type = dataWithType.getMagic()
+ const data = dataWithType.getText();
+ const type = dataWithType.getMagic();
- return new DataWithType(data, type)
+ return new DataWithType(data, type);
}
/**
@@ -77,45 +77,45 @@ export class DataWithType {
* @param customDisplayType
* @return {Array<DataWithType>}
*/
- static parseStringData (data, customDisplayMagic) {
- function availableMagic (magic) {
- return magic && (DefaultDisplayMagic[magic] || customDisplayMagic[magic])
+ static parseStringData(data, customDisplayMagic) {
+ function availableMagic(magic) {
+ return magic && (DefaultDisplayMagic[magic] || customDisplayMagic[magic]);
}
- const splited = data.split('\n')
+ const splited = data.split('\n');
- const gensWithTypes = []
- let mergedGens = []
- let previousMagic = DefaultDisplayType.TEXT
+ const gensWithTypes = [];
+ let mergedGens = [];
+ let previousMagic = DefaultDisplayType.TEXT;
// create `DataWithType` whenever see available display type.
for (let i = 0; i < splited.length; i++) {
- const g = splited[i]
- const magic = SpellResult.extractMagic(g)
+ const g = splited[i];
+ const magic = SpellResult.extractMagic(g);
// create `DataWithType` only if see new magic
if (availableMagic(magic) && mergedGens.length > 0) {
- gensWithTypes.push(new DataWithType(mergedGens.join(''), previousMagic))
- mergedGens = []
+ gensWithTypes.push(new DataWithType(mergedGens.join(''), previousMagic));
+ mergedGens = [];
}
// accumulate `data` to mergedGens
if (availableMagic(magic)) {
- const withoutMagic = g.split(magic)[1]
- mergedGens.push(`${withoutMagic}\n`)
- previousMagic = DataWithType.handleDefaultMagic(magic)
+ const withoutMagic = g.split(magic)[1];
+ mergedGens.push(`${withoutMagic}\n`);
+ previousMagic = DataWithType.handleDefaultMagic(magic);
} else {
- mergedGens.push(`${g}\n`)
+ mergedGens.push(`${g}\n`);
}
}
// cleanup the last `DataWithType`
if (mergedGens.length > 0) {
- previousMagic = DataWithType.handleDefaultMagic(previousMagic)
- gensWithTypes.push(new DataWithType(mergedGens.join(''), previousMagic))
+ previousMagic = DataWithType.handleDefaultMagic(previousMagic);
+ gensWithTypes.push(new DataWithType(mergedGens.join(''), previousMagic));
}
- return gensWithTypes
+ return gensWithTypes;
}
/**
@@ -128,44 +128,46 @@ export class DataWithType {
* @param textWithoutMagic
* @return {Promise<Array<DataWithType>>}
*/
- static produceMultipleData (dataWithType, customDisplayType,
+ static produceMultipleData(dataWithType, customDisplayType,
magic, textWithoutMagic) {
- const data = dataWithType.getData()
- const type = dataWithType.getType()
+ const data = dataWithType.getData();
+ const type = dataWithType.getType();
// if the type is specified, just return it
// handle non-specified dataWithTypes only
if (type) {
- return new Promise((resolve) => { resolve([dataWithType]) })
+ return new Promise((resolve) => {
+ resolve([dataWithType]);
+ });
}
- let wrapped
+ let wrapped;
if (SpellResult.isFunction(data)) {
// if data is a function, we consider it as ELEMENT type.
wrapped = new Promise((resolve) => {
const dt = new DataWithType(
- data, DefaultDisplayType.ELEMENT, magic, textWithoutMagic)
- const result = [dt]
- return resolve(result)
- })
+ data, DefaultDisplayType.ELEMENT, magic, textWithoutMagic);
+ const result = [dt];
+ return resolve(result);
+ });
} else if (SpellResult.isPromise(data)) {
// if data is a promise,
- wrapped = data.then(generated => {
+ wrapped = data.then((generated) => {
const result =
- DataWithType.parseStringData(generated, customDisplayType)
- return result
- })
+ DataWithType.parseStringData(generated, customDisplayType);
+ return result;
+ });
} else {
// if data is a object, parse it to multiples
wrapped = new Promise((resolve) => {
const result =
- DataWithType.parseStringData(data, customDisplayType)
- return resolve(result)
- })
+ DataWithType.parseStringData(data, customDisplayType);
+ return resolve(result);
+ });
}
- return wrapped
+ return wrapped;
}
/**
@@ -177,8 +179,8 @@ export class DataWithType {
* will be called in `then()` of this promise.
* @returns {*} `data` which can be object, function or promise.
*/
- getData () {
- return this.data
+ getData() {
+ return this.data;
}
/**
@@ -187,66 +189,66 @@ export class DataWithType {
* by `SpellResult.parseStringData()`
* @returns {string}
*/
- getType () {
- return this.type
+ getType() {
+ return this.type;
}
- getMagic () {
- return this.magic
+ getMagic() {
+ return this.magic;
}
- getText () {
- return this.text
+ getText() {
+ return this.text;
}
}
export class SpellResult {
- constructor (resultData, resultType) {
- this.dataWithTypes = []
- this.add(resultData, resultType)
+ constructor(resultData, resultType) {
+ this.dataWithTypes = [];
+ this.add(resultData, resultType);
}
- static isFunction (data) {
- return (data && typeof data === 'function')
+ static isFunction(data) {
+ return (data && typeof data === 'function');
}
- static isPromise (data) {
- return (data && typeof data.then === 'function')
+ static isPromise(data) {
+ return (data && typeof data.then === 'function');
}
- static isObject (data) {
+ static isObject(data) {
return (data &&
!SpellResult.isFunction(data) &&
- !SpellResult.isPromise(data))
+ !SpellResult.isPromise(data));
}
- static extractMagic (allParagraphText) {
- const pattern = /^\s*%(\S+)\s*/g
+ static extractMagic(allParagraphText) {
+ const pattern = /^\s*%(\S+)\s*/g;
try {
- let match = pattern.exec(allParagraphText)
+ let match = pattern.exec(allParagraphText);
if (match) {
- return `%${match[1].trim()}`
+ return `%${match[1].trim()}`;
}
} catch (error) {
// failed to parse, ignore
}
- return undefined
+ return undefined;
}
- static createPropagable (resultMsg) {
- return resultMsg.map(dt => {
- return DataWithType.createPropagable(dt)
- })
+ static createPropagable(resultMsg) {
+ return resultMsg.map((dt) => {
+ return DataWithType.createPropagable(dt);
+ });
}
- add (resultData, resultType) {
+ add(resultData, resultType) {
if (resultData) {
this.dataWithTypes.push(
- new DataWithType(resultData, resultType))
+ new DataWithType(resultData, resultType));
}
- return this
+ return this;
}
/**
@@ -254,23 +256,23 @@ export class SpellResult {
* @param textWithoutMagic
* @return {Promise<Array<DataWithType>>}
*/
- getAllParsedDataWithTypes (customDisplayType, magic, textWithoutMagic) {
- const promises = this.dataWithTypes.map(dt => {
+ getAllParsedDataWithTypes(customDisplayType, magic, textWithoutMagic) {
+ const promises = this.dataWithTypes.map((dt) => {
return DataWithType.produceMultipleData(
- dt, customDisplayType, magic, textWithoutMagic)
- })
+ dt, customDisplayType, magic, textWithoutMagic);
+ });
// some promises can include an array so we need to flatten them
- const flatten = Promise.all(promises).then(values => {
+ const flatten = Promise.all(promises).then((values) => {
return values.reduce((acc, cur) => {
if (Array.isArray(cur)) {
- return acc.concat(cur)
+ return acc.concat(cur);
} else {
- return acc.concat([cur])
+ return acc.concat([cur]);
}
- })
- })
+ });
+ });
- return flatten
+ return flatten;
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/ea2c9447/zeppelin-web/src/app/tabledata/advanced-transformation-util.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/tabledata/advanced-transformation-util.js b/zeppelin-web/src/app/tabledata/advanced-transformation-util.js
index 0d1c2f6..97c1b2c 100644
--- a/zeppelin-web/src/app/tabledata/advanced-transformation-util.js
+++ b/zeppelin-web/src/app/tabledata/advanced-transformation-util.js
@@ -13,40 +13,40 @@
*/
export function getCurrentChart(config) {
- return config.chart.current
+ return config.chart.current;
}
export function getCurrentChartTransform(config) {
- return config.spec.charts[getCurrentChart(config)].transform
+ return config.spec.charts[getCurrentChart(config)].transform;
}
export function getCurrentChartAxis(config) {
- return config.axis[getCurrentChart(config)]
+ return config.axis[getCurrentChart(config)];
}
export function getCurrentChartParam(config) {
- return config.parameter[getCurrentChart(config)]
+ return config.parameter[getCurrentChart(config)];
}
export function getCurrentChartAxisSpecs(config) {
- return config.axisSpecs[getCurrentChart(config)]
+ return config.axisSpecs[getCurrentChart(config)];
}
export function getCurrentChartParamSpecs(config) {
- return config.paramSpecs[getCurrentChart(config)]
+ return config.paramSpecs[getCurrentChart(config)];
}
export function useSharedAxis(config, chart) {
- return config.spec.charts[chart].sharedAxis
+ return config.spec.charts[chart].sharedAxis;
}
export function serializeSharedAxes(config) {
- const availableCharts = getAvailableChartNames(config.spec.charts)
+ const availableCharts = getAvailableChartNames(config.spec.charts);
for (let i = 0; i < availableCharts.length; i++) {
- const chartName = availableCharts[i]
+ const chartName = availableCharts[i];
if (useSharedAxis(config, chartName)) {
/** use reference :) in case of sharedAxis */
- config.axis[chartName] = config.sharedAxis
+ config.axis[chartName] = config.sharedAxis;
}
}
}
@@ -56,22 +56,22 @@ export const Widget = {
OPTION: 'option',
CHECKBOX: 'checkbox',
TEXTAREA: 'textarea',
-}
+};
export function isInputWidget(paramSpec) {
- return (paramSpec && !paramSpec.widget) || (paramSpec && paramSpec.widget === Widget.INPUT)
+ return (paramSpec && !paramSpec.widget) || (paramSpec && paramSpec.widget === Widget.INPUT);
}
export function isOptionWidget(paramSpec) {
- return paramSpec && paramSpec.widget === Widget.OPTION
+ return paramSpec && paramSpec.widget === Widget.OPTION;
}
export function isCheckboxWidget(paramSpec) {
- return paramSpec && paramSpec.widget === Widget.CHECKBOX
+ return paramSpec && paramSpec.widget === Widget.CHECKBOX;
}
export function isTextareaWidget(paramSpec) {
- return paramSpec && paramSpec.widget === Widget.TEXTAREA
+ return paramSpec && paramSpec.widget === Widget.TEXTAREA;
}
export const ParameterValueType = {
@@ -80,59 +80,71 @@ export const ParameterValueType = {
BOOLEAN: 'boolean',
STRING: 'string',
JSON: 'JSON',
-}
+};
export function parseParameter(paramSpecs, param) {
/** copy original params */
- const parsed = JSON.parse(JSON.stringify(param))
+ const parsed = JSON.parse(JSON.stringify(param));
for (let i = 0; i < paramSpecs.length; i++) {
- const paramSpec = paramSpecs[i]
- const name = paramSpec.name
+ const paramSpec = paramSpecs[i];
+ const name = paramSpec.name;
if (paramSpec.valueType === ParameterValueType.INT &&
typeof parsed[name] !== 'number') {
- try { parsed[name] = parseInt(parsed[name]) } catch (error) { parsed[name] = paramSpec.defaultValue }
+ try {
+ parsed[name] = parseInt(parsed[name]);
+ } catch (error) {
+ parsed[name] = paramSpec.defaultValue;
+ }
} else if (paramSpec.valueType === ParameterValueType.FLOAT &&
typeof parsed[name] !== 'number') {
- try { parsed[name] = parseFloat(parsed[name]) } catch (error) { parsed[name] = paramSpec.defaultValue }
+ try {
+ parsed[name] = parseFloat(parsed[name]);
+ } catch (error) {
+ parsed[name] = paramSpec.defaultValue;
+ }
} else if (paramSpec.valueType === ParameterValueType.BOOLEAN) {
if (parsed[name] === 'false') {
- parsed[name] = false
+ parsed[name] = false;
} else if (parsed[name] === 'true') {
- parsed[name] = true
+ parsed[name] = true;
} else if (typeof parsed[name] !== 'boolean') {
- parsed[name] = paramSpec.defaultValue
+ parsed[name] = paramSpec.defaultValue;
}
} else if (paramSpec.valueType === ParameterValueType.JSON) {
if (parsed[name] !== null && typeof parsed[name] !== 'object') {
- try { parsed[name] = JSON.parse(parsed[name]) } catch (error) { parsed[name] = paramSpec.defaultValue }
+ try {
+ parsed[name] = JSON.parse(parsed[name]);
+ } catch (error) {
+ parsed[name] = paramSpec.defaultValue;
+ }
} else if (parsed[name] === null) {
- parsed[name] = paramSpec.defaultValue
+ parsed[name] = paramSpec.defaultValue;
}
}
}
- return parsed
+ return parsed;
}
export const AxisType = {
AGGREGATOR: 'aggregator',
KEY: 'key',
GROUP: 'group',
-}
+};
export function isAggregatorAxis(axisSpec) {
- return axisSpec && axisSpec.axisType === AxisType.AGGREGATOR
+ return axisSpec && axisSpec.axisType === AxisType.AGGREGATOR;
}
export function isGroupAxis(axisSpec) {
- return axisSpec && axisSpec.axisType === AxisType.GROUP
+ return axisSpec && axisSpec.axisType === AxisType.GROUP;
}
export function isKeyAxis(axisSpec) {
- return axisSpec && axisSpec.axisType === AxisType.KEY
+ return axisSpec && axisSpec.axisType === AxisType.KEY;
}
export function isSingleDimensionAxis(axisSpec) {
- return axisSpec && axisSpec.dimension === 'single'
+ return axisSpec && axisSpec.dimension === 'single';
}
/**
@@ -142,92 +154,112 @@ export function isSingleDimensionAxis(axisSpec) {
* add the `name` field while converting to array to easily manipulate
*/
export function getSpecs(specObject) {
- const specs = []
+ const specs = [];
for (let name in specObject) {
- const singleSpec = specObject[name]
- if (!singleSpec) { continue }
- singleSpec.name = name
- specs.push(singleSpec)
+ if (specObject.hasOwnProperty(name)) {
+ const singleSpec = specObject[name];
+ if (!singleSpec) {
+ continue;
+ }
+ singleSpec.name = name;
+ specs.push(singleSpec);
+ }
}
- return specs
+ return specs;
}
export function getAvailableChartNames(charts) {
- const available = []
+ const available = [];
for (let name in charts) {
- available.push(name)
+ if (charts.hasOwnProperty(name)) {
+ available.push(name);
+ }
}
- return available
+ return available;
}
export function applyMaxAxisCount(config, axisSpec) {
if (isSingleDimensionAxis(axisSpec) || typeof axisSpec.maxAxisCount === 'undefined') {
- return
+ return;
}
- const columns = getCurrentChartAxis(config)[axisSpec.name]
- if (columns.length <= axisSpec.maxAxisCount) { return }
+ const columns = getCurrentChartAxis(config)[axisSpec.name];
+ if (columns.length <= axisSpec.maxAxisCount) {
+ return;
+ }
- const sliced = columns.slice(1)
- getCurrentChartAxis(config)[axisSpec.name] = sliced
+ const sliced = columns.slice(1);
+ getCurrentChartAxis(config)[axisSpec.name] = sliced;
}
export function removeDuplicatedColumnsInMultiDimensionAxis(config, axisSpec) {
- if (isSingleDimensionAxis(axisSpec)) { return config }
+ if (isSingleDimensionAxis(axisSpec)) {
+ return config;
+ }
- const columns = getCurrentChartAxis(config)[axisSpec.name]
+ const columns = getCurrentChartAxis(config)[axisSpec.name];
const uniqObject = columns.reduce((acc, col) => {
- if (!acc[`${col.name}(${col.aggr})`]) { acc[`${col.name}(${col.aggr})`] = col }
- return acc
- }, {})
+ if (!acc[`${col.name}(${col.aggr})`]) {
+ acc[`${col.name}(${col.aggr})`] = col;
+ }
+ return acc;
+ }, {});
- const filtered = []
+ const filtered = [];
for (let name in uniqObject) {
- const col = uniqObject[name]
- filtered.push(col)
+ if (uniqObject.hasOwnProperty(name)) {
+ const col = uniqObject[name];
+ filtered.push(col);
+ }
}
- getCurrentChartAxis(config)[axisSpec.name] = filtered
- return config
+ getCurrentChartAxis(config)[axisSpec.name] = filtered;
+ return config;
}
export function clearAxisConfig(config) {
- delete config.axis /** Object: persisted axis for each chart */
- delete config.sharedAxis
+ delete config.axis; /** Object: persisted axis for each chart */
+ delete config.sharedAxis;
}
export function initAxisConfig(config) {
- if (!config.axis) { config.axis = {} }
- if (!config.sharedAxis) { config.sharedAxis = {} }
+ if (!config.axis) {
+ config.axis = {};
+ }
+ if (!config.sharedAxis) {
+ config.sharedAxis = {};
+ }
- const spec = config.spec
- const availableCharts = getAvailableChartNames(spec.charts)
+ const spec = config.spec;
+ const availableCharts = getAvailableChartNames(spec.charts);
- if (!config.axisSpecs) { config.axisSpecs = {} }
+ if (!config.axisSpecs) {
+ config.axisSpecs = {};
+ }
for (let i = 0; i < availableCharts.length; i++) {
- const chartName = availableCharts[i]
+ const chartName = availableCharts[i];
if (!config.axis[chartName]) {
- config.axis[chartName] = {}
+ config.axis[chartName] = {};
}
- const axisSpecs = getSpecs(spec.charts[chartName].axis)
+ const axisSpecs = getSpecs(spec.charts[chartName].axis);
if (!config.axisSpecs[chartName]) {
- config.axisSpecs[chartName] = axisSpecs
+ config.axisSpecs[chartName] = axisSpecs;
}
/** initialize multi-dimension axes */
for (let i = 0; i < axisSpecs.length; i++) {
- const axisSpec = axisSpecs[i]
+ const axisSpec = axisSpecs[i];
if (isSingleDimensionAxis(axisSpec)) {
- continue
+ continue;
}
/** intentionally nested if-stmt is used because order of conditions matter here */
if (!useSharedAxis(config, chartName)) {
if (!Array.isArray(config.axis[chartName][axisSpec.name])) {
- config.axis[chartName][axisSpec.name] = []
+ config.axis[chartName][axisSpec.name] = [];
}
} else if (useSharedAxis(config, chartName)) {
/**
@@ -235,180 +267,200 @@ export function initAxisConfig(config) {
* all charts using shared axis have the same axis specs
*/
if (!Array.isArray(config.sharedAxis[axisSpec.name])) {
- config.sharedAxis[axisSpec.name] = []
+ config.sharedAxis[axisSpec.name] = [];
}
}
}
}
/** this function should be called after initializing */
- serializeSharedAxes(config)
+ serializeSharedAxes(config);
}
export function resetAxisConfig(config) {
- clearAxisConfig(config)
- initAxisConfig(config)
+ clearAxisConfig(config);
+ initAxisConfig(config);
}
export function clearParameterConfig(config) {
- delete config.parameter /** Object: persisted parameter for each chart */
+ delete config.parameter; /** Object: persisted parameter for each chart */
}
export function initParameterConfig(config) {
- if (!config.parameter) { config.parameter = {} }
+ if (!config.parameter) {
+ config.parameter = {};
+ }
- const spec = config.spec
- const availableCharts = getAvailableChartNames(spec.charts)
+ const spec = config.spec;
+ const availableCharts = getAvailableChartNames(spec.charts);
- if (!config.paramSpecs) { config.paramSpecs = {} }
+ if (!config.paramSpecs) {
+ config.paramSpecs = {};
+ }
for (let i = 0; i < availableCharts.length; i++) {
- const chartName = availableCharts[i]
+ const chartName = availableCharts[i];
- if (!config.parameter[chartName]) { config.parameter[chartName] = {} }
- const paramSpecs = getSpecs(spec.charts[chartName].parameter)
- if (!config.paramSpecs[chartName]) { config.paramSpecs[chartName] = paramSpecs }
+ if (!config.parameter[chartName]) {
+ config.parameter[chartName] = {};
+ }
+ const paramSpecs = getSpecs(spec.charts[chartName].parameter);
+ if (!config.paramSpecs[chartName]) {
+ config.paramSpecs[chartName] = paramSpecs;
+ }
for (let i = 0; i < paramSpecs.length; i++) {
- const paramSpec = paramSpecs[i]
+ const paramSpec = paramSpecs[i];
if (!config.parameter[chartName][paramSpec.name]) {
- config.parameter[chartName][paramSpec.name] = paramSpec.defaultValue
+ config.parameter[chartName][paramSpec.name] = paramSpec.defaultValue;
}
}
}
}
export function resetParameterConfig(config) {
- clearParameterConfig(config)
- initParameterConfig(config)
+ clearParameterConfig(config);
+ initParameterConfig(config);
}
export function getSpecVersion(availableCharts, spec) {
- const axisHash = {}
- const paramHash = {}
+ const axisHash = {};
+ const paramHash = {};
for (let i = 0; i < availableCharts.length; i++) {
- const chartName = availableCharts[i]
- const axisSpecs = getSpecs(spec.charts[chartName].axis)
- axisHash[chartName] = axisSpecs
+ const chartName = availableCharts[i];
+ const axisSpecs = getSpecs(spec.charts[chartName].axis);
+ axisHash[chartName] = axisSpecs;
- const paramSpecs = getSpecs(spec.charts[chartName].parameter)
- paramHash[chartName] = paramSpecs
+ const paramSpecs = getSpecs(spec.charts[chartName].parameter);
+ paramHash[chartName] = paramSpecs;
}
- return { axisVersion: JSON.stringify(axisHash), paramVersion: JSON.stringify(paramHash), }
+ return {axisVersion: JSON.stringify(axisHash), paramVersion: JSON.stringify(paramHash)};
}
export function initializeConfig(config, spec) {
- config.chartChanged = true
- config.parameterChanged = false
+ config.chartChanged = true;
+ config.parameterChanged = false;
- let updated = false
+ let updated = false;
- const availableCharts = getAvailableChartNames(spec.charts)
- const { axisVersion, paramVersion, } = getSpecVersion(availableCharts, spec)
+ const availableCharts = getAvailableChartNames(spec.charts);
+ const {axisVersion, paramVersion} = getSpecVersion(availableCharts, spec);
if (!config.spec || !config.spec.version ||
!config.spec.version.axis ||
config.spec.version.axis !== axisVersion) {
- spec.initialized = true
- updated = true
+ spec.initialized = true;
+ updated = true;
- delete config.chart /** Object: contains current, available chart */
- config.panel = { columnPanelOpened: true, parameterPanelOpened: false, }
+ delete config.chart; /** Object: contains current, available chart */
+ config.panel = {columnPanelOpened: true, parameterPanelOpened: false};
- clearAxisConfig(config)
- delete config.axisSpecs /** Object: persisted axisSpecs for each chart */
+ clearAxisConfig(config);
+ delete config.axisSpecs; /** Object: persisted axisSpecs for each chart */
}
if (!config.spec || !config.spec.version ||
!config.spec.version.parameter ||
config.spec.version.parameter !== paramVersion) {
- updated = true
+ updated = true;
- clearParameterConfig(config)
- delete config.paramSpecs /** Object: persisted paramSpecs for each chart */
+ clearParameterConfig(config);
+ delete config.paramSpecs; /** Object: persisted paramSpecs for each chart */
}
- if (!spec.version) { spec.version = {} }
- spec.version.axis = axisVersion
- spec.version.parameter = paramVersion
+ if (!spec.version) {
+ spec.version = {};
+ }
+ spec.version.axis = axisVersion;
+ spec.version.parameter = paramVersion;
- if (!config.spec || updated) { config.spec = spec }
+ if (!config.spec || updated) {
+ config.spec = spec;
+ }
if (!config.chart) {
- config.chart = {}
- config.chart.current = availableCharts[0]
- config.chart.available = availableCharts
+ config.chart = {};
+ config.chart.current = availableCharts[0];
+ config.chart.available = availableCharts;
}
/** initialize config.axis, config.axisSpecs for each chart */
- initAxisConfig(config)
+ initAxisConfig(config);
/** initialize config.parameter for each chart */
- initParameterConfig(config)
- return config
+ initParameterConfig(config);
+ return config;
}
export function getColumnsForMultipleAxes(axisType, axisSpecs, axis) {
- const axisNames = []
- let column = {}
+ const axisNames = [];
+ let column = {};
for (let i = 0; i < axisSpecs.length; i++) {
- const axisSpec = axisSpecs[i]
+ const axisSpec = axisSpecs[i];
if (axisType === AxisType.KEY && isKeyAxis(axisSpec)) {
- axisNames.push(axisSpec.name)
+ axisNames.push(axisSpec.name);
} else if (axisType === AxisType.GROUP && isGroupAxis(axisSpec)) {
- axisNames.push(axisSpec.name)
+ axisNames.push(axisSpec.name);
} else if (axisType.AGGREGATOR && isAggregatorAxis(axisSpec)) {
- axisNames.push(axisSpec.name)
+ axisNames.push(axisSpec.name);
}
}
for (let axisName of axisNames) {
- const columns = axis[axisName]
- if (typeof axis[axisName] === 'undefined') { continue }
- if (!column[axisName]) { column[axisName] = [] }
- column[axisName] = column[axisName].concat(columns)
+ const columns = axis[axisName];
+ if (typeof axis[axisName] === 'undefined') {
+ continue;
+ }
+ if (!column[axisName]) {
+ column[axisName] = [];
+ }
+ column[axisName] = column[axisName].concat(columns);
}
- return column
+ return column;
}
export function getColumnsFromAxis(axisSpecs, axis) {
- const keyAxisNames = []
- const groupAxisNames = []
- const aggrAxisNames = []
+ const keyAxisNames = [];
+ const groupAxisNames = [];
+ const aggrAxisNames = [];
for (let i = 0; i < axisSpecs.length; i++) {
- const axisSpec = axisSpecs[i]
+ const axisSpec = axisSpecs[i];
if (isKeyAxis(axisSpec)) {
- keyAxisNames.push(axisSpec.name)
+ keyAxisNames.push(axisSpec.name);
} else if (isGroupAxis(axisSpec)) {
- groupAxisNames.push(axisSpec.name)
+ groupAxisNames.push(axisSpec.name);
} else if (isAggregatorAxis(axisSpec)) {
- aggrAxisNames.push(axisSpec.name)
+ aggrAxisNames.push(axisSpec.name);
}
}
- let keyColumns = []
- let groupColumns = []
- let aggregatorColumns = []
- let customColumn = {}
+ let keyColumns = [];
+ let groupColumns = [];
+ let aggregatorColumns = [];
+ let customColumn = {};
for (let axisName in axis) {
- const columns = axis[axisName]
- if (keyAxisNames.includes(axisName)) {
- keyColumns = keyColumns.concat(columns)
- } else if (groupAxisNames.includes(axisName)) {
- groupColumns = groupColumns.concat(columns)
- } else if (aggrAxisNames.includes(axisName)) {
- aggregatorColumns = aggregatorColumns.concat(columns)
- } else {
- const axisType = axisSpecs.filter(s => s.name === axisName)[0].axisType
- if (!customColumn[axisType]) { customColumn[axisType] = [] }
- customColumn[axisType] = customColumn[axisType].concat(columns)
+ if (axis.hasOwnProperty(axisName)) {
+ const columns = axis[axisName];
+ if (keyAxisNames.includes(axisName)) {
+ keyColumns = keyColumns.concat(columns);
+ } else if (groupAxisNames.includes(axisName)) {
+ groupColumns = groupColumns.concat(columns);
+ } else if (aggrAxisNames.includes(axisName)) {
+ aggregatorColumns = aggregatorColumns.concat(columns);
+ } else {
+ const axisType = axisSpecs.filter((s) => s.name === axisName)[0].axisType;
+ if (!customColumn[axisType]) {
+ customColumn[axisType] = [];
+ }
+ customColumn[axisType] = customColumn[axisType].concat(columns);
+ }
}
}
@@ -417,7 +469,7 @@ export function getColumnsFromAxis(axisSpecs, axis) {
group: groupColumns,
aggregator: aggregatorColumns,
custom: customColumn,
- }
+ };
}
export const Aggregator = {
@@ -426,7 +478,7 @@ export const Aggregator = {
AVG: 'avg',
MIN: 'min',
MAX: 'max',
-}
+};
const TransformMethod = {
/**
@@ -449,38 +501,42 @@ const TransformMethod = {
ARRAY: 'array',
ARRAY_2_KEY: 'array:2-key',
DRILL_DOWN: 'drill-down',
-}
+};
/** return function for lazy computation */
export function getTransformer(conf, rows, axisSpecs, axis) {
- let transformer = () => {}
+ let transformer = () => {};
- const transformSpec = getCurrentChartTransform(conf)
- if (!transformSpec) { return transformer }
+ const transformSpec = getCurrentChartTransform(conf);
+ if (!transformSpec) {
+ return transformer;
+ }
- const method = transformSpec.method
+ const method = transformSpec.method;
- const columns = getColumnsFromAxis(axisSpecs, axis)
- const keyColumns = columns.key
- const groupColumns = columns.group
- const aggregatorColumns = columns.aggregator
- const customColumns = columns.custom
+ const columns = getColumnsFromAxis(axisSpecs, axis);
+ const keyColumns = columns.key;
+ const groupColumns = columns.group;
+ const aggregatorColumns = columns.aggregator;
+ const customColumns = columns.custom;
let column = {
key: keyColumns, group: groupColumns, aggregator: aggregatorColumns, custom: customColumns,
- }
+ };
if (method === TransformMethod.RAW) {
- transformer = () => { return rows }
+ transformer = () => {
+ return rows;
+ };
} else if (method === TransformMethod.OBJECT) {
transformer = () => {
- const { cube, schema, keyColumnName, keyNames, groupNameSet, selectorNameWithIndex, } =
- getKGACube(rows, keyColumns, groupColumns, aggregatorColumns)
+ const {cube, schema, keyColumnName, keyNames, groupNameSet, selectorNameWithIndex} =
+ getKGACube(rows, keyColumns, groupColumns, aggregatorColumns);
const {
- transformed, groupNames, sortedSelectors
+ transformed, groupNames, sortedSelectors,
} = getObjectRowsFromKGACube(cube, schema, aggregatorColumns,
- keyColumnName, keyNames, groupNameSet, selectorNameWithIndex)
+ keyColumnName, keyNames, groupNameSet, selectorNameWithIndex);
return {
rows: transformed,
@@ -488,17 +544,17 @@ export function getTransformer(conf, rows, axisSpecs, axis) {
keyNames,
groupNames: groupNames,
selectors: sortedSelectors,
- }
- }
+ };
+ };
} else if (method === TransformMethod.ARRAY) {
transformer = () => {
- const { cube, schema, keyColumnName, keyNames, groupNameSet, selectorNameWithIndex, } =
- getKGACube(rows, keyColumns, groupColumns, aggregatorColumns)
+ const {cube, schema, keyColumnName, keyNames, groupNameSet, selectorNameWithIndex} =
+ getKGACube(rows, keyColumns, groupColumns, aggregatorColumns);
const {
transformed, groupNames, sortedSelectors,
} = getArrayRowsFromKGACube(cube, schema, aggregatorColumns,
- keyColumnName, keyNames, groupNameSet, selectorNameWithIndex)
+ keyColumnName, keyNames, groupNameSet, selectorNameWithIndex);
return {
rows: transformed,
@@ -506,34 +562,40 @@ export function getTransformer(conf, rows, axisSpecs, axis) {
keyNames,
groupNames: groupNames,
selectors: sortedSelectors,
- }
- }
+ };
+ };
} else if (method === TransformMethod.ARRAY_2_KEY) {
- const keyAxisColumn = getColumnsForMultipleAxes(AxisType.KEY, axisSpecs, axis)
- column.key = keyAxisColumn
+ const keyAxisColumn = getColumnsForMultipleAxes(AxisType.KEY, axisSpecs, axis);
+ column.key = keyAxisColumn;
- let key1Columns = []
- let key2Columns = []
+ let key1Columns = [];
+ let key2Columns = [];
// since ARRAY_2_KEY :)
- let i = 0
+ let i = 0;
for (let axisName in keyAxisColumn) {
- if (i === 2) { break }
+ if (i === 2) {
+ break;
+ }
- if (i === 0) { key1Columns = keyAxisColumn[axisName] } else if (i === 1) { key2Columns = keyAxisColumn[axisName] }
- i++
+ if (i === 0) {
+ key1Columns = keyAxisColumn[axisName];
+ } else if (i === 1) {
+ key2Columns = keyAxisColumn[axisName];
+ }
+ i++;
}
- const { cube, schema,
+ const {cube, schema,
key1ColumnName, key1Names, key2ColumnName, key2Names,
groupNameSet, selectorNameWithIndex,
- } = getKKGACube(rows, key1Columns, key2Columns, groupColumns, aggregatorColumns)
+ } = getKKGACube(rows, key1Columns, key2Columns, groupColumns, aggregatorColumns);
const {
transformed, groupNames, sortedSelectors,
key1NameWithIndex, key2NameWithIndex,
} = getArrayRowsFromKKGACube(cube, schema, aggregatorColumns,
- key1Names, key2Names, groupNameSet, selectorNameWithIndex)
+ key1Names, key2Names, groupNameSet, selectorNameWithIndex);
transformer = () => {
return {
@@ -546,17 +608,17 @@ export function getTransformer(conf, rows, axisSpecs, axis) {
key2NameWithIndex: key2NameWithIndex,
groupNames: groupNames,
selectors: sortedSelectors,
- }
- }
+ };
+ };
} else if (method === TransformMethod.DRILL_DOWN) {
transformer = () => {
- const { cube, schema, keyColumnName, keyNames, groupNameSet, selectorNameWithIndex, } =
- getKAGCube(rows, keyColumns, groupColumns, aggregatorColumns)
+ const {cube, schema, keyColumnName, keyNames, groupNameSet, selectorNameWithIndex} =
+ getKAGCube(rows, keyColumns, groupColumns, aggregatorColumns);
const {
transformed, groupNames, sortedSelectors,
} = getDrilldownRowsFromKAGCube(cube, schema, aggregatorColumns,
- keyColumnName, keyNames, groupNameSet, selectorNameWithIndex)
+ keyColumnName, keyNames, groupNameSet, selectorNameWithIndex);
return {
rows: transformed,
@@ -564,48 +626,48 @@ export function getTransformer(conf, rows, axisSpecs, axis) {
keyNames,
groupNames: groupNames,
selectors: sortedSelectors,
- }
- }
+ };
+ };
}
- return { transformer: transformer, column: column, }
+ return {transformer: transformer, column: column};
}
const AggregatorFunctions = {
sum: function(a, b) {
- const varA = (a !== undefined) ? (isNaN(a) ? 1 : parseFloat(a)) : 0
- const varB = (b !== undefined) ? (isNaN(b) ? 1 : parseFloat(b)) : 0
- return varA + varB
+ const varA = (a !== undefined) ? (isNaN(a) ? 1 : parseFloat(a)) : 0;
+ const varB = (b !== undefined) ? (isNaN(b) ? 1 : parseFloat(b)) : 0;
+ return varA + varB;
},
count: function(a, b) {
- const varA = (a !== undefined) ? parseInt(a) : 0
- const varB = (b !== undefined) ? 1 : 0
- return varA + varB
+ const varA = (a !== undefined) ? parseInt(a) : 0;
+ const varB = (b !== undefined) ? 1 : 0;
+ return varA + varB;
},
min: function(a, b) {
- const varA = (a !== undefined) ? (isNaN(a) ? 1 : parseFloat(a)) : 0
- const varB = (b !== undefined) ? (isNaN(b) ? 1 : parseFloat(b)) : 0
- return Math.min(varA, varB)
+ const varA = (a !== undefined) ? (isNaN(a) ? 1 : parseFloat(a)) : 0;
+ const varB = (b !== undefined) ? (isNaN(b) ? 1 : parseFloat(b)) : 0;
+ return Math.min(varA, varB);
},
max: function(a, b) {
- const varA = (a !== undefined) ? (isNaN(a) ? 1 : parseFloat(a)) : 0
- const varB = (b !== undefined) ? (isNaN(b) ? 1 : parseFloat(b)) : 0
- return Math.max(varA, varB)
+ const varA = (a !== undefined) ? (isNaN(a) ? 1 : parseFloat(a)) : 0;
+ const varB = (b !== undefined) ? (isNaN(b) ? 1 : parseFloat(b)) : 0;
+ return Math.max(varA, varB);
},
avg: function(a, b, c) {
- const varA = (a !== undefined) ? (isNaN(a) ? 1 : parseFloat(a)) : 0
- const varB = (b !== undefined) ? (isNaN(b) ? 1 : parseFloat(b)) : 0
- return varA + varB
- }
-}
+ const varA = (a !== undefined) ? (isNaN(a) ? 1 : parseFloat(a)) : 0;
+ const varB = (b !== undefined) ? (isNaN(b) ? 1 : parseFloat(b)) : 0;
+ return varA + varB;
+ },
+};
const AggregatorFunctionDiv = {
sum: false,
min: false,
max: false,
count: false,
- avg: true
-}
+ avg: true,
+};
/** nested cube `(key) -> (group) -> aggregator` */
export function getKGACube(rows, keyColumns, groupColumns, aggrColumns) {
@@ -613,67 +675,75 @@ export function getKGACube(rows, keyColumns, groupColumns, aggrColumns) {
key: keyColumns.length !== 0,
group: groupColumns.length !== 0,
aggregator: aggrColumns.length !== 0,
- }
+ };
- let cube = {}
- const entry = {}
+ let cube = {};
+ const entry = {};
- const keyColumnName = keyColumns.map(c => c.name).join('.')
- const groupNameSet = new Set()
- const keyNameSet = new Set()
- const selectorNameWithIndex = {} /** { selectorName: index } */
- let indexCounter = 0
+ const keyColumnName = keyColumns.map((c) => c.name).join('.');
+ const groupNameSet = new Set();
+ const keyNameSet = new Set();
+ const selectorNameWithIndex = {}; /** { selectorName: index } */
+ let indexCounter = 0;
for (let i = 0; i < rows.length; i++) {
- const row = rows[i]
- let e = entry
- let c = cube
+ const row = rows[i];
+ let e = entry;
+ let c = cube;
// key: add to entry
- let mergedKeyName
+ let mergedKeyName;
if (schema.key) {
- mergedKeyName = keyColumns.map(c => row[c.index]).join('.')
- if (!e[mergedKeyName]) { e[mergedKeyName] = { children: {}, } }
- e = e[mergedKeyName].children
+ mergedKeyName = keyColumns.map((c) => row[c.index]).join('.');
+ if (!e[mergedKeyName]) {
+ e[mergedKeyName] = {children: {}};
+ }
+ e = e[mergedKeyName].children;
// key: add to row
- if (!c[mergedKeyName]) { c[mergedKeyName] = {} }
- c = c[mergedKeyName]
+ if (!c[mergedKeyName]) {
+ c[mergedKeyName] = {};
+ }
+ c = c[mergedKeyName];
- keyNameSet.add(mergedKeyName)
+ keyNameSet.add(mergedKeyName);
}
- let mergedGroupName
+ let mergedGroupName;
if (schema.group) {
- mergedGroupName = groupColumns.map(c => row[c.index]).join('.')
+ mergedGroupName = groupColumns.map((c) => row[c.index]).join('.');
// add group to entry
- if (!e[mergedGroupName]) { e[mergedGroupName] = { children: {}, } }
- e = e[mergedGroupName].children
+ if (!e[mergedGroupName]) {
+ e[mergedGroupName] = {children: {}};
+ }
+ e = e[mergedGroupName].children;
// add group to row
- if (!c[mergedGroupName]) { c[mergedGroupName] = {} }
- c = c[mergedGroupName]
- groupNameSet.add(mergedGroupName)
+ if (!c[mergedGroupName]) {
+ c[mergedGroupName] = {};
+ }
+ c = c[mergedGroupName];
+ groupNameSet.add(mergedGroupName);
}
for (let a = 0; a < aggrColumns.length; a++) {
- const aggrColumn = aggrColumns[a]
- const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`
+ const aggrColumn = aggrColumns[a];
+ const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`;
// update groupNameSet
if (!mergedGroupName) {
- groupNameSet.add(aggrName) /** aggr column name will be used as group name if group is empty */
+ groupNameSet.add(aggrName); /** aggr column name will be used as group name if group is empty */
}
// update selectorNameWithIndex
- const selector = getSelectorName(mergedGroupName, aggrColumns.length, aggrName)
+ const selector = getSelectorName(mergedGroupName, aggrColumns.length, aggrName);
if (typeof selectorNameWithIndex[selector] === 'undefined' /** value might be 0 */) {
- selectorNameWithIndex[selector] = indexCounter
- indexCounter = indexCounter + 1
+ selectorNameWithIndex[selector] = indexCounter;
+ indexCounter = indexCounter + 1;
}
// add aggregator to entry
if (!e[aggrName]) {
- e[aggrName] = { type: 'aggregator', order: aggrColumn, index: aggrColumn.index, }
+ e[aggrName] = {type: 'aggregator', order: aggrColumn, index: aggrColumn.index};
}
// add aggregatorName to row
@@ -682,26 +752,26 @@ export function getKGACube(rows, keyColumns, groupColumns, aggrColumns) {
aggr: aggrColumn.aggr,
value: (aggrColumn.aggr !== 'count') ? row[aggrColumn.index] : 1,
count: 1,
- }
+ };
} else {
const value = AggregatorFunctions[aggrColumn.aggr](
- c[aggrName].value, row[aggrColumn.index], c[aggrName].count + 1)
+ c[aggrName].value, row[aggrColumn.index], c[aggrName].count + 1);
const count = (AggregatorFunctionDiv[aggrColumn.aggr])
- ? c[aggrName].count + 1 : c[aggrName].count
+ ? c[aggrName].count + 1 : c[aggrName].count;
- c[aggrName].value = value
- c[aggrName].count = count
+ c[aggrName].value = value;
+ c[aggrName].count = count;
}
} /** end loop for aggrColumns */
}
- let keyNames = null
+ let keyNames = null;
if (!schema.key) {
- const mergedGroupColumnName = groupColumns.map(c => c.name).join('.')
- cube = { [mergedGroupColumnName]: cube, }
- keyNames = [ mergedGroupColumnName, ]
+ const mergedGroupColumnName = groupColumns.map((c) => c.name).join('.');
+ cube = {[mergedGroupColumnName]: cube};
+ keyNames = [mergedGroupColumnName];
} else {
- keyNames = Object.keys(cube).sort() /** keys should be sorted */
+ keyNames = Object.keys(cube).sort(); /** keys should be sorted */
}
return {
@@ -711,7 +781,7 @@ export function getKGACube(rows, keyColumns, groupColumns, aggrColumns) {
keyNames: keyNames,
groupNameSet: groupNameSet,
selectorNameWithIndex: selectorNameWithIndex,
- }
+ };
}
/** nested cube `(key) -> aggregator -> (group)` for drill-down support */
@@ -720,98 +790,100 @@ export function getKAGCube(rows, keyColumns, groupColumns, aggrColumns) {
key: keyColumns.length !== 0,
group: groupColumns.length !== 0,
aggregator: aggrColumns.length !== 0,
- }
+ };
- let cube = {}
+ let cube = {};
- const keyColumnName = keyColumns.map(c => c.name).join('.')
- const groupNameSet = new Set()
- const keyNameSet = new Set()
- const selectorNameWithIndex = {} /** { selectorName: index } */
- let indexCounter = 0
+ const keyColumnName = keyColumns.map((c) => c.name).join('.');
+ const groupNameSet = new Set();
+ const keyNameSet = new Set();
+ const selectorNameWithIndex = {}; /** { selectorName: index } */
+ let indexCounter = 0;
for (let i = 0; i < rows.length; i++) {
- const row = rows[i]
- let c = cube
+ const row = rows[i];
+ let c = cube;
// key: add to entry
- let mergedKeyName
+ let mergedKeyName;
if (schema.key) {
- mergedKeyName = keyColumns.map(c => row[c.index]).join('.')
+ mergedKeyName = keyColumns.map((c) => row[c.index]).join('.');
// key: add to row
- if (!c[mergedKeyName]) { c[mergedKeyName] = {} }
- c = c[mergedKeyName]
+ if (!c[mergedKeyName]) {
+ c[mergedKeyName] = {};
+ }
+ c = c[mergedKeyName];
- keyNameSet.add(mergedKeyName)
+ keyNameSet.add(mergedKeyName);
}
- let mergedGroupName
+ let mergedGroupName;
if (schema.group) {
- mergedGroupName = groupColumns.map(c => row[c.index]).join('.')
- groupNameSet.add(mergedGroupName)
+ mergedGroupName = groupColumns.map((c) => row[c.index]).join('.');
+ groupNameSet.add(mergedGroupName);
}
for (let a = 0; a < aggrColumns.length; a++) {
- const aggrColumn = aggrColumns[a]
- const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`
+ const aggrColumn = aggrColumns[a];
+ const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`;
// update groupNameSet
if (!mergedGroupName) {
- groupNameSet.add(aggrName) /** aggr column name will be used as group name if group is empty */
+ groupNameSet.add(aggrName); /** aggr column name will be used as group name if group is empty */
}
// update selectorNameWithIndex
- const selector = getSelectorName(mergedKeyName, aggrColumns.length, aggrName)
+ const selector = getSelectorName(mergedKeyName, aggrColumns.length, aggrName);
if (typeof selectorNameWithIndex[selector] === 'undefined' /** value might be 0 */) {
- selectorNameWithIndex[selector] = indexCounter
- indexCounter = indexCounter + 1
+ selectorNameWithIndex[selector] = indexCounter;
+ indexCounter = indexCounter + 1;
}
// add aggregatorName to row
if (!c[aggrName]) {
- const value = (aggrColumn.aggr !== 'count') ? row[aggrColumn.index] : 1
- const count = 1
+ const value = (aggrColumn.aggr !== 'count') ? row[aggrColumn.index] : 1;
+ const count = 1;
- c[aggrName] = { aggr: aggrColumn.aggr, value: value, count: count, children: {}, }
+ c[aggrName] = {aggr: aggrColumn.aggr, value: value, count: count, children: {}};
} else {
const value = AggregatorFunctions[aggrColumn.aggr](
- c[aggrName].value, row[aggrColumn.index], c[aggrName].count + 1)
+ c[aggrName].value, row[aggrColumn.index], c[aggrName].count + 1);
const count = (AggregatorFunctionDiv[aggrColumn.aggr])
- ? c[aggrName].count + 1 : c[aggrName].count
+ ? c[aggrName].count + 1 : c[aggrName].count;
- c[aggrName].value = value
- c[aggrName].count = count
+ c[aggrName].value = value;
+ c[aggrName].count = count;
}
// add aggregated group (for drill-down) to row iff group is enabled
if (mergedGroupName) {
if (!c[aggrName].children[mergedGroupName]) {
- const value = (aggrColumn.aggr !== 'count') ? row[aggrColumn.index] : 1
- const count = 1
+ const value = (aggrColumn.aggr !== 'count') ? row[aggrColumn.index] : 1;
+ const count = 1;
- c[aggrName].children[mergedGroupName] = { value: value, count: count, }
+ c[aggrName].children[mergedGroupName] = {value: value, count: count};
} else {
- const drillDownedValue = c[aggrName].children[mergedGroupName].value
- const drillDownedCount = c[aggrName].children[mergedGroupName].count
+ const drillDownedValue = c[aggrName].children[mergedGroupName].value;
+ const drillDownedCount = c[aggrName].children[mergedGroupName].count;
const value = AggregatorFunctions[aggrColumn.aggr](
- drillDownedValue, row[aggrColumn.index], drillDownedCount + 1)
+ drillDownedValue, row[aggrColumn.index], drillDownedCount + 1);
const count = (AggregatorFunctionDiv[aggrColumn.aggr])
- ? drillDownedCount + 1 : drillDownedCount
+ ? drillDownedCount + 1 : drillDownedCount;
- c[aggrName].children[mergedGroupName].value = value
- c[aggrName].children[mergedGroupName].count = count
+ c[aggrName].children[mergedGroupName].value = value;
+ c[aggrName].children[mergedGroupName].count = count;
}
}
} /** end loop for aggrColumns */
}
- let keyNames = null
+ let keyNames = null;
if (!schema.key) {
- const mergedGroupColumnName = groupColumns.map(c => c.name).join('.')
- cube = { [mergedGroupColumnName]: cube, }
- keyNames = [ mergedGroupColumnName, ]
+ const mergedGroupColumnName = groupColumns.map((c) => c.name).join('.');
+ cube = {[mergedGroupColumnName]: cube};
+ keyNames = [mergedGroupColumnName];
} else {
- keyNames = Object.keys(cube).sort() /** keys should be sorted */
+ keyNames = Object.keys(cube).sort(); /** keys should be sorted */
}
return {
@@ -821,7 +893,7 @@ export function getKAGCube(rows, keyColumns, groupColumns, aggrColumns) {
keyNames: keyNames,
groupNameSet: groupNameSet,
selectorNameWithIndex: selectorNameWithIndex,
- }
+ };
}
/** nested cube `(key1) -> (key2) -> (group) -> aggregator` */
export function getKKGACube(rows, key1Columns, key2Columns, groupColumns, aggrColumns) {
@@ -830,82 +902,98 @@ export function getKKGACube(rows, key1Columns, key2Columns, groupColumns, aggrCo
key2: key2Columns.length !== 0,
group: groupColumns.length !== 0,
aggregator: aggrColumns.length !== 0,
- }
+ };
- let cube = {}
- const entry = {}
+ let cube = {};
+ const entry = {};
- const key1ColumnName = key1Columns.map(c => c.name).join('.')
- const key1NameSet = {}
- const key2ColumnName = key2Columns.map(c => c.name).join('.')
- const key2NameSet = {}
- const groupNameSet = new Set()
- const selectorNameWithIndex = {} /** { selectorName: index } */
- let indexCounter = 0
+ const key1ColumnName = key1Columns.map((c) => c.name).join('.');
+ const key1NameSet = {};
+ const key2ColumnName = key2Columns.map((c) => c.name).join('.');
+ const key2NameSet = {};
+ const groupNameSet = new Set();
+ const selectorNameWithIndex = {}; /** { selectorName: index } */
+ let indexCounter = 0;
for (let i = 0; i < rows.length; i++) {
- const row = rows[i]
- let e = entry
- let c = cube
+ const row = rows[i];
+ let e = entry;
+ let c = cube;
// key1: add to entry
- let mergedKey1Name
+ let mergedKey1Name;
if (schema.key1) {
- mergedKey1Name = key1Columns.map(c => row[c.index]).join('.')
- if (!e[mergedKey1Name]) { e[mergedKey1Name] = { children: {}, } }
- e = e[mergedKey1Name].children
+ mergedKey1Name = key1Columns.map((c) => row[c.index]).join('.');
+ if (!e[mergedKey1Name]) {
+ e[mergedKey1Name] = {children: {}};
+ }
+ e = e[mergedKey1Name].children;
// key1: add to row
- if (!c[mergedKey1Name]) { c[mergedKey1Name] = {} }
- c = c[mergedKey1Name]
+ if (!c[mergedKey1Name]) {
+ c[mergedKey1Name] = {};
+ }
+ c = c[mergedKey1Name];
- if (!key1NameSet[mergedKey1Name]) { key1NameSet[mergedKey1Name] = true }
+ if (!key1NameSet[mergedKey1Name]) {
+ key1NameSet[mergedKey1Name] = true;
+ }
}
// key2: add to entry
- let mergedKey2Name
+ let mergedKey2Name;
if (schema.key2) {
- mergedKey2Name = key2Columns.map(c => row[c.index]).join('.')
- if (!e[mergedKey2Name]) { e[mergedKey2Name] = { children: {}, } }
- e = e[mergedKey2Name].children
+ mergedKey2Name = key2Columns.map((c) => row[c.index]).join('.');
+ if (!e[mergedKey2Name]) {
+ e[mergedKey2Name] = {children: {}};
+ }
+ e = e[mergedKey2Name].children;
// key2: add to row
- if (!c[mergedKey2Name]) { c[mergedKey2Name] = {} }
- c = c[mergedKey2Name]
+ if (!c[mergedKey2Name]) {
+ c[mergedKey2Name] = {};
+ }
+ c = c[mergedKey2Name];
- if (!key2NameSet[mergedKey2Name]) { key2NameSet[mergedKey2Name] = true }
+ if (!key2NameSet[mergedKey2Name]) {
+ key2NameSet[mergedKey2Name] = true;
+ }
}
- let mergedGroupName
+ let mergedGroupName;
if (schema.group) {
- mergedGroupName = groupColumns.map(c => row[c.index]).join('.')
+ mergedGroupName = groupColumns.map((c) => row[c.index]).join('.');
// add group to entry
- if (!e[mergedGroupName]) { e[mergedGroupName] = { children: {}, } }
- e = e[mergedGroupName].children
+ if (!e[mergedGroupName]) {
+ e[mergedGroupName] = {children: {}};
+ }
+ e = e[mergedGroupName].children;
// add group to row
- if (!c[mergedGroupName]) { c[mergedGroupName] = {} }
- c = c[mergedGroupName]
- groupNameSet.add(mergedGroupName)
+ if (!c[mergedGroupName]) {
+ c[mergedGroupName] = {};
+ }
+ c = c[mergedGroupName];
+ groupNameSet.add(mergedGroupName);
}
for (let a = 0; a < aggrColumns.length; a++) {
- const aggrColumn = aggrColumns[a]
- const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`
+ const aggrColumn = aggrColumns[a];
+ const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`;
// update groupNameSet
if (!mergedGroupName) {
- groupNameSet.add(aggrName) /** aggr column name will be used as group name if group is empty */
+ groupNameSet.add(aggrName); /** aggr column name will be used as group name if group is empty */
}
// update selectorNameWithIndex
- const selector = getSelectorName(mergedGroupName, aggrColumns.length, aggrName)
+ const selector = getSelectorName(mergedGroupName, aggrColumns.length, aggrName);
if (typeof selectorNameWithIndex[selector] === 'undefined' /** value might be 0 */) {
- selectorNameWithIndex[selector] = indexCounter
- indexCounter = indexCounter + 1
+ selectorNameWithIndex[selector] = indexCounter;
+ indexCounter = indexCounter + 1;
}
// add aggregator to entry
if (!e[aggrName]) {
- e[aggrName] = { type: 'aggregator', order: aggrColumn, index: aggrColumn.index, }
+ e[aggrName] = {type: 'aggregator', order: aggrColumn, index: aggrColumn.index};
}
// add aggregatorName to row
@@ -914,21 +1002,21 @@ export function getKKGACube(rows, key1Columns, key2Columns, groupColumns, aggrCo
aggr: aggrColumn.aggr,
value: (aggrColumn.aggr !== 'count') ? row[aggrColumn.index] : 1,
count: 1,
- }
+ };
} else {
const value = AggregatorFunctions[aggrColumn.aggr](
- c[aggrName].value, row[aggrColumn.index], c[aggrName].count + 1)
+ c[aggrName].value, row[aggrColumn.index], c[aggrName].count + 1);
const count = (AggregatorFunctionDiv[aggrColumn.aggr])
- ? c[aggrName].count + 1 : c[aggrName].count
+ ? c[aggrName].count + 1 : c[aggrName].count;
- c[aggrName].value = value
- c[aggrName].count = count
+ c[aggrName].value = value;
+ c[aggrName].count = count;
}
} /** end loop for aggrColumns */
}
- let key1Names = Object.keys(key1NameSet).sort() /** keys should be sorted */
- let key2Names = Object.keys(key2NameSet).sort() /** keys should be sorted */
+ let key1Names = Object.keys(key1NameSet).sort(); /** keys should be sorted */
+ let key2Names = Object.keys(key2NameSet).sort(); /** keys should be sorted */
return {
cube: cube,
@@ -939,59 +1027,61 @@ export function getKKGACube(rows, key1Columns, key2Columns, groupColumns, aggrCo
key2Names: key2Names,
groupNameSet: groupNameSet,
selectorNameWithIndex: selectorNameWithIndex,
- }
+ };
}
export function getSelectorName(mergedGroupName, aggrColumnLength, aggrColumnName) {
if (!mergedGroupName) {
- return aggrColumnName
+ return aggrColumnName;
} else {
return (aggrColumnLength > 1)
- ? `${mergedGroupName} / ${aggrColumnName}` : mergedGroupName
+ ? `${mergedGroupName} / ${aggrColumnName}` : mergedGroupName;
}
}
export function getCubeValue(obj, aggregator, aggrColumnName) {
- let value = null /** default is null */
+ let value = null; /** default is null */
try {
/** if AVG or COUNT, calculate it now, previously we can't because we were doing accumulation */
if (aggregator === Aggregator.AVG) {
- value = obj[aggrColumnName].value / obj[aggrColumnName].count
+ value = obj[aggrColumnName].value / obj[aggrColumnName].count;
} else if (aggregator === Aggregator.COUNT) {
- value = obj[aggrColumnName].value
+ value = obj[aggrColumnName].value;
} else {
- value = obj[aggrColumnName].value
+ value = obj[aggrColumnName].value;
}
- if (typeof value === 'undefined') { value = null }
+ if (typeof value === 'undefined') {
+ value = null;
+ }
} catch (error) { /** iognore */ }
- return value
+ return value;
}
export function getNameWithIndex(names) {
- const nameWithIndex = {}
+ const nameWithIndex = {};
for (let i = 0; i < names.length; i++) {
- const name = names[i]
- nameWithIndex[name] = i
+ const name = names[i];
+ nameWithIndex[name] = i;
}
- return nameWithIndex
+ return nameWithIndex;
}
export function getArrayRowsFromKKGACube(cube, schema, aggregatorColumns,
key1Names, key2Names, groupNameSet, selectorNameWithIndex) {
- const sortedSelectors = Object.keys(selectorNameWithIndex).sort()
- const sortedSelectorNameWithIndex = getNameWithIndex(sortedSelectors)
+ const sortedSelectors = Object.keys(selectorNameWithIndex).sort();
+ const sortedSelectorNameWithIndex = getNameWithIndex(sortedSelectors);
- const selectorRows = new Array(sortedSelectors.length)
- const key1NameWithIndex = getNameWithIndex(key1Names)
- const key2NameWithIndex = getNameWithIndex(key2Names)
+ const selectorRows = new Array(sortedSelectors.length);
+ const key1NameWithIndex = getNameWithIndex(key1Names);
+ const key2NameWithIndex = getNameWithIndex(key2Names);
fillSelectorRows(schema, cube, selectorRows,
aggregatorColumns, sortedSelectorNameWithIndex,
- key1Names, key2Names, key1NameWithIndex, key2NameWithIndex)
+ key1Names, key2Names, key1NameWithIndex, key2NameWithIndex);
return {
key1NameWithIndex: key1NameWithIndex,
@@ -999,7 +1089,7 @@ export function getArrayRowsFromKKGACube(cube, schema, aggregatorColumns,
transformed: selectorRows,
groupNames: Array.from(groupNameSet).sort(),
sortedSelectors: sortedSelectors,
- }
+ };
}
/** truly mutable style func. will return nothing */
@@ -1009,90 +1099,94 @@ export function fillSelectorRows(schema, cube, selectorRows,
function fill(grouped, mergedGroupName, key1Name, key2Name) {
// should iterate aggrColumns in the most nested loop to utilize memory locality
for (let aggrColumn of aggrColumns) {
- const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`
- const value = getCubeValue(grouped, aggrColumn.aggr, aggrName)
- const selector = getSelectorName(mergedGroupName, aggrColumns.length, aggrName)
- const selectorIndex = selectorNameWithIndex[selector]
+ const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`;
+ const value = getCubeValue(grouped, aggrColumn.aggr, aggrName);
+ const selector = getSelectorName(mergedGroupName, aggrColumns.length, aggrName);
+ const selectorIndex = selectorNameWithIndex[selector];
if (typeof selectorRows[selectorIndex] === 'undefined') {
- selectorRows[selectorIndex] = { selector: selector, value: [], }
+ selectorRows[selectorIndex] = {selector: selector, value: []};
}
- const row = { aggregated: value, }
+ const row = {aggregated: value};
- if (typeof key1Name !== 'undefined') { row.key1 = key1Name }
- if (typeof key2Name !== 'undefined') { row.key2 = key2Name }
+ if (typeof key1Name !== 'undefined') {
+ row.key1 = key1Name;
+ }
+ if (typeof key2Name !== 'undefined') {
+ row.key2 = key2Name;
+ }
- selectorRows[selectorIndex].value.push(row)
+ selectorRows[selectorIndex].value.push(row);
}
}
function iterateGroupNames(keyed, key1Name, key2Name) {
if (!schema.group) {
- fill(keyed, undefined, key1Name, key2Name)
+ fill(keyed, undefined, key1Name, key2Name);
} else {
// assuming sparse distribution (usual case)
// otherwise we need to iterate using `groupNameSet`
- const availableGroupNames = Object.keys(keyed)
+ const availableGroupNames = Object.keys(keyed);
for (let groupName of availableGroupNames) {
- const grouped = keyed[groupName]
- fill(grouped, groupName, key1Name, key2Name)
+ const grouped = keyed[groupName];
+ fill(grouped, groupName, key1Name, key2Name);
}
}
}
if (schema.key1 && schema.key2) {
for (let key1Name of key1Names) {
- const key1ed = cube[key1Name]
+ const key1ed = cube[key1Name];
// assuming sparse distribution (usual case)
// otherwise we need to iterate using `key2Names`
- const availableKey2Names = Object.keys(key1ed)
+ const availableKey2Names = Object.keys(key1ed);
for (let key2Name of availableKey2Names) {
- const keyed = key1ed[key2Name]
- iterateGroupNames(keyed, key1Name, key2Name)
+ const keyed = key1ed[key2Name];
+ iterateGroupNames(keyed, key1Name, key2Name);
}
}
} else if (schema.key1 && !schema.key2) {
for (let key1Name of key1Names) {
- const keyed = cube[key1Name]
- iterateGroupNames(keyed, key1Name, undefined)
+ const keyed = cube[key1Name];
+ iterateGroupNames(keyed, key1Name, undefined);
}
} else if (!schema.key1 && schema.key2) {
for (let key2Name of key2Names) {
- const keyed = cube[key2Name]
- iterateGroupNames(keyed, undefined, key2Name)
+ const keyed = cube[key2Name];
+ iterateGroupNames(keyed, undefined, key2Name);
}
} else {
- iterateGroupNames(cube, undefined, undefined)
+ iterateGroupNames(cube, undefined, undefined);
}
}
export function getArrayRowsFromKGACube(cube, schema, aggregatorColumns,
keyColumnName, keyNames, groupNameSet,
selectorNameWithIndex) {
- const sortedSelectors = Object.keys(selectorNameWithIndex).sort()
- const sortedSelectorNameWithIndex = getNameWithIndex(sortedSelectors)
+ const sortedSelectors = Object.keys(selectorNameWithIndex).sort();
+ const sortedSelectorNameWithIndex = getNameWithIndex(sortedSelectors);
- const keyArrowRows = new Array(sortedSelectors.length)
- const keyNameWithIndex = getNameWithIndex(keyNames)
+ const keyArrowRows = new Array(sortedSelectors.length);
+ const keyNameWithIndex = getNameWithIndex(keyNames);
for (let i = 0; i < keyNames.length; i++) {
- const key = keyNames[i]
+ const key = keyNames[i];
- const obj = cube[key]
+ const obj = cube[key];
fillArrayRow(schema, aggregatorColumns, obj,
groupNameSet, sortedSelectorNameWithIndex,
- key, keyNames, keyArrowRows, keyNameWithIndex)
+ key, keyNames, keyArrowRows, keyNameWithIndex);
}
return {
transformed: keyArrowRows,
groupNames: Array.from(groupNameSet).sort(),
sortedSelectors: sortedSelectors,
- }
+ };
}
/** truly mutable style func. will return nothing, just modify `keyArrayRows` */
@@ -1100,34 +1194,34 @@ export function fillArrayRow(schema, aggrColumns, obj,
groupNameSet, selectorNameWithIndex,
keyName, keyNames, keyArrayRows, keyNameWithIndex) {
function fill(target, mergedGroupName, aggr, aggrName) {
- const value = getCubeValue(target, aggr, aggrName)
- const selector = getSelectorName(mergedGroupName, aggrColumns.length, aggrName)
- const selectorIndex = selectorNameWithIndex[selector]
- const keyIndex = keyNameWithIndex[keyName]
+ const value = getCubeValue(target, aggr, aggrName);
+ const selector = getSelectorName(mergedGroupName, aggrColumns.length, aggrName);
+ const selectorIndex = selectorNameWithIndex[selector];
+ const keyIndex = keyNameWithIndex[keyName];
if (typeof keyArrayRows[selectorIndex] === 'undefined') {
keyArrayRows[selectorIndex] = {
- selector: selector, value: new Array(keyNames.length)
- }
+ selector: selector, value: new Array(keyNames.length),
+ };
}
- keyArrayRows[selectorIndex].value[keyIndex] = value
+ keyArrayRows[selectorIndex].value[keyIndex] = value;
}
/** when group is empty */
if (!schema.group) {
for (let i = 0; i < aggrColumns.length; i++) {
- const aggrColumn = aggrColumns[i]
- const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`
- fill(obj, undefined, aggrColumn.aggr, aggrName)
+ const aggrColumn = aggrColumns[i];
+ const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`;
+ fill(obj, undefined, aggrColumn.aggr, aggrName);
}
} else {
for (let i = 0; i < aggrColumns.length; i++) {
- const aggrColumn = aggrColumns[i]
- const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`
+ const aggrColumn = aggrColumns[i];
+ const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`;
for (let groupName of groupNameSet) {
- const grouped = obj[groupName]
- fill(grouped, groupName, aggrColumn.aggr, aggrName)
+ const grouped = obj[groupName];
+ fill(grouped, groupName, aggrColumn.aggr, aggrName);
}
}
}
@@ -1137,81 +1231,83 @@ export function getObjectRowsFromKGACube(cube, schema, aggregatorColumns,
keyColumnName, keyNames, groupNameSet,
selectorNameWithIndex) {
const rows = keyNames.reduce((acc, key) => {
- const obj = cube[key]
- const row = getObjectRow(schema, aggregatorColumns, obj, groupNameSet)
+ const obj = cube[key];
+ const row = getObjectRow(schema, aggregatorColumns, obj, groupNameSet);
- if (schema.key) { row[keyColumnName] = key }
- acc.push(row)
+ if (schema.key) {
+ row[keyColumnName] = key;
+ }
+ acc.push(row);
- return acc
- }, [])
+ return acc;
+ }, []);
return {
transformed: rows,
sortedSelectors: Object.keys(selectorNameWithIndex).sort(),
groupNames: Array.from(groupNameSet).sort(),
- }
+ };
}
export function getObjectRow(schema, aggrColumns, obj, groupNameSet) {
- const row = {}
+ const row = {};
function fill(row, target, mergedGroupName, aggr, aggrName) {
- const value = getCubeValue(target, aggr, aggrName)
- const selector = getSelectorName(mergedGroupName, aggrColumns.length, aggrName)
- row[selector] = value
+ const value = getCubeValue(target, aggr, aggrName);
+ const selector = getSelectorName(mergedGroupName, aggrColumns.length, aggrName);
+ row[selector] = value;
}
/** when group is empty */
if (!schema.group) {
for (let i = 0; i < aggrColumns.length; i++) {
- const aggrColumn = aggrColumns[i]
- const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`
+ const aggrColumn = aggrColumns[i];
+ const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`;
- fill(row, obj, undefined, aggrColumn.aggr, aggrName)
+ fill(row, obj, undefined, aggrColumn.aggr, aggrName);
}
- return row
+ return row;
}
/** when group is specified */
for (let i = 0; i < aggrColumns.length; i++) {
- const aggrColumn = aggrColumns[i]
- const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`
+ const aggrColumn = aggrColumns[i];
+ const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`;
for (let groupName of groupNameSet) {
- const grouped = obj[groupName]
+ const grouped = obj[groupName];
if (grouped) {
- fill(row, grouped, groupName, aggrColumn.aggr, aggrName)
+ fill(row, grouped, groupName, aggrColumn.aggr, aggrName);
}
}
}
- return row
+ return row;
}
export function getDrilldownRowsFromKAGCube(cube, schema, aggregatorColumns,
keyColumnName, keyNames, groupNameSet, selectorNameWithIndex) {
- const sortedSelectors = Object.keys(selectorNameWithIndex).sort()
- const sortedSelectorNameWithIndex = getNameWithIndex(sortedSelectors)
+ const sortedSelectors = Object.keys(selectorNameWithIndex).sort();
+ const sortedSelectorNameWithIndex = getNameWithIndex(sortedSelectors);
- const rows = new Array(sortedSelectors.length)
+ const rows = new Array(sortedSelectors.length);
- const groupNames = Array.from(groupNameSet).sort()
+ const groupNames = Array.from(groupNameSet).sort();
- keyNames.map(key => {
- const obj = cube[key]
+ keyNames.map((key) => {
+ const obj = cube[key];
fillDrillDownRow(schema, obj, rows, key,
- sortedSelectorNameWithIndex, aggregatorColumns, groupNames)
- })
+ sortedSelectorNameWithIndex, aggregatorColumns, groupNames);
+ });
return {
transformed: rows,
groupNames: groupNames,
sortedSelectors: sortedSelectors,
sortedSelectorNameWithIndex: sortedSelectorNameWithIndex,
- }
+ };
}
/** truly mutable style func. will return nothing, just modify `rows` */
@@ -1219,27 +1315,27 @@ export function fillDrillDownRow(schema, obj, rows, key,
selectorNameWithIndex, aggrColumns, groupNames) {
/** when group is empty */
for (let i = 0; i < aggrColumns.length; i++) {
- const row = {}
- const aggrColumn = aggrColumns[i]
- const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`
+ const row = {};
+ const aggrColumn = aggrColumns[i];
+ const aggrName = `${aggrColumn.name}(${aggrColumn.aggr})`;
- const value = getCubeValue(obj, aggrColumn.aggr, aggrName)
- const selector = getSelectorName((schema.key) ? key : undefined, aggrColumns.length, aggrName)
+ const value = getCubeValue(obj, aggrColumn.aggr, aggrName);
+ const selector = getSelectorName((schema.key) ? key : undefined, aggrColumns.length, aggrName);
- const selectorIndex = selectorNameWithIndex[selector]
- row.value = value
- row.drillDown = []
- row.selector = selector
+ const selectorIndex = selectorNameWithIndex[selector];
+ row.value = value;
+ row.drillDown = [];
+ row.selector = selector;
if (schema.group) {
- row.drillDown = []
+ row.drillDown = [];
for (let groupName of groupNames) {
- const value = getCubeValue(obj[aggrName].children, aggrColumn.aggr, groupName)
- row.drillDown.push({ group: groupName, value: value, })
+ const value = getCubeValue(obj[aggrName].children, aggrColumn.aggr, groupName);
+ row.drillDown.push({group: groupName, value: value});
}
}
- rows[selectorIndex] = row
+ rows[selectorIndex] = row;
}
}