You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by co...@apache.org on 2016/07/19 06:03:04 UTC
zeppelin git commit: [Zeppelin-1167] Group $scope.$on functions
Repository: zeppelin
Updated Branches:
refs/heads/master dbe5e6c12 -> 9289bb8db
[Zeppelin-1167] Group $scope.$on functions
### What is this PR for?
This is a small refactoring PR for zeppelin-web.
This is moving all the code's `$scope.$on` functions together at the end of each controller file.
### What type of PR is it?
Refactoring
### What is the Jira issue?
https://issues.apache.org/jira/browse/ZEPPELIN-1167
### How should this be tested?
No test is needed, the code was just moved around
### Questions:
* Does the licenses files need update? No
* Is there breaking changes for older versions? No
* Does this needs documentation? No
Author: Damien CORNEAU <co...@gmail.com>
Closes #1178 from corneadoug/ZEPPELIN-1167 and squashes the following commits:
a282dc5 [Damien CORNEAU] Fix indentation in result-list controller
7cd9146 [Damien CORNEAU] group .on functions at the end of the controllers
Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/9289bb8d
Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/9289bb8d
Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/9289bb8d
Branch: refs/heads/master
Commit: 9289bb8dbc5d940dc0ee73d9843161c6f7d45353
Parents: dbe5e6c
Author: Damien CORNEAU <co...@gmail.com>
Authored: Wed Jul 13 16:52:01 2016 +0900
Committer: Damien CORNEAU <co...@gmail.com>
Committed: Tue Jul 19 15:02:47 2016 +0900
----------------------------------------------------------------------
zeppelin-web/src/app/home/home.controller.js | 38 +-
.../src/app/jobmanager/jobmanager.controller.js | 58 +-
.../src/app/notebook/notebook.controller.js | 258 +++----
.../notebook/paragraph/paragraph.controller.js | 726 ++++++++++---------
.../src/app/search/result-list.controller.js | 232 +++---
.../src/components/login/login.controller.js | 11 +-
.../src/components/navbar/navbar.controller.js | 28 +-
.../notenameImport.controller.js | 4 +
8 files changed, 691 insertions(+), 664 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/9289bb8d/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 b733f53..1a23f9c 100644
--- a/zeppelin-web/src/app/home/home.controller.js
+++ b/zeppelin-web/src/app/home/home.controller.js
@@ -35,6 +35,27 @@ angular.module('zeppelinWebApp').controller('HomeCtrl', function($scope, noteboo
initHome();
+ $scope.reloadNotebookList = function() {
+ websocketMsgSrv.reloadAllNotesFromRepo();
+ $scope.isReloadingNotes = true;
+ };
+
+ $scope.toggleFolderNode = function(node) {
+ node.hidden = !node.hidden;
+ };
+
+ 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('setNoteContent', function(event, note) {
if (note) {
vm.note = note;
@@ -53,21 +74,4 @@ angular.module('zeppelinWebApp').controller('HomeCtrl', function($scope, noteboo
}
});
- $scope.$on('setNoteMenu', function(event, notes) {
- $scope.isReloadingNotes = false;
- });
-
- $scope.reloadNotebookList = function() {
- websocketMsgSrv.reloadAllNotesFromRepo();
- $scope.isReloadingNotes = true;
- };
-
- $scope.toggleFolderNode = function(node) {
- node.hidden = !node.hidden;
- };
-
- angular.element('#loginModal').on('hidden.bs.modal', function(e) {
- $rootScope.$broadcast('initLoginValues');
- });
-
});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/9289bb8d/zeppelin-web/src/app/jobmanager/jobmanager.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/jobmanager/jobmanager.controller.js b/zeppelin-web/src/app/jobmanager/jobmanager.controller.js
index 410f7c2..8102293 100644
--- a/zeppelin-web/src/app/jobmanager/jobmanager.controller.js
+++ b/zeppelin-web/src/app/jobmanager/jobmanager.controller.js
@@ -18,6 +18,37 @@ angular.module('zeppelinWebApp')
.controller('JobmanagerCtrl',
function($scope, websocketMsgSrv, $interval) {
+ $scope.filterValueToName = function(filterValue) {
+ var index = _.findIndex($scope.ACTIVE_INTERPRETERS, {value: filterValue});
+
+ if ($scope.ACTIVE_INTERPRETERS[index].name !== undefined) {
+ return $scope.ACTIVE_INTERPRETERS[index].name;
+ } else {
+ return 'undefined';
+ }
+ };
+
+ $scope.init = function() {
+ $scope.jobInfomations = [];
+ $scope.JobInfomationsByFilter = $scope.jobInfomations;
+
+ websocketMsgSrv.getNotebookJobsList();
+ var refreshObj = $interval(function() {
+ if ($scope.lastJobServerUnixTime !== undefined) {
+ websocketMsgSrv.getUpdateNotebookJobsList($scope.lastJobServerUnixTime);
+ }
+ }, 1000);
+
+ $scope.$on('$destroy', function() {
+ $interval.cancel(refreshObj);
+ websocketMsgSrv.unsubscribeJobManager();
+ });
+ };
+
+ /*
+ ** $scope.$on functions below
+ */
+
$scope.$on('setNotebookJobs', function(event, responseData) {
$scope.lastJobServerUnixTime = responseData.lastResponseUnixTime;
$scope.jobInfomations = responseData.jobs;
@@ -62,31 +93,4 @@ angular.module('zeppelinWebApp')
}
});
});
-
- $scope.filterValueToName = function(filterValue) {
- var index = _.findIndex($scope.ACTIVE_INTERPRETERS, {value: filterValue});
-
- if ($scope.ACTIVE_INTERPRETERS[index].name !== undefined) {
- return $scope.ACTIVE_INTERPRETERS[index].name;
- } else {
- return 'undefined';
- }
- };
-
- $scope.init = function() {
- $scope.jobInfomations = [];
- $scope.JobInfomationsByFilter = $scope.jobInfomations;
-
- websocketMsgSrv.getNotebookJobsList();
- var refreshObj = $interval(function() {
- if ($scope.lastJobServerUnixTime !== undefined) {
- websocketMsgSrv.getUpdateNotebookJobsList($scope.lastJobServerUnixTime);
- }
- }, 1000);
-
- $scope.$on('$destroy', function() {
- $interval.cancel(refreshObj);
- websocketMsgSrv.unsubscribeJobManager();
- });
- };
});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/9289bb8d/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 f33bfac..7d58e46 100644
--- a/zeppelin-web/src/app/notebook/notebook.controller.js
+++ b/zeppelin-web/src/app/notebook/notebook.controller.js
@@ -55,13 +55,6 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $ro
var searchText = [];
$scope.role = '';
- $scope.$on('setConnectedStatus', function(event, param) {
- if (connectedOnce && param) {
- initNotebook();
- }
- connectedOnce = true;
- });
-
$scope.getCronOptionNameFromValue = function(value) {
if (!value) {
return '';
@@ -288,15 +281,6 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $ro
$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);
- });
-
$scope.setLookAndFeel = function(looknfeel) {
$scope.note.config.looknfeel = looknfeel;
$scope.setConfig();
@@ -335,29 +319,6 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $ro
}
};
- /** update the current note */
- $scope.$on('setNoteContent', function(event, note) {
- if (note === undefined) {
- $location.path('/');
- }
-
- $scope.paragraphUrl = $routeParams.paragraphId;
- $scope.asIframe = $routeParams.asIframe;
- if ($scope.paragraphUrl) {
- note = cleanParagraphExcept($scope.paragraphUrl, note);
- $rootScope.$broadcast('setIframe', $scope.asIframe);
- }
-
- if ($scope.note === null) {
- $scope.note = note;
- } else {
- updateNote(note);
- }
- initializeLookAndFeel();
- //open interpreter binding setting when there're none selected
- getInterpreterBindings(getInterpreterBindingsCallBack);
- });
-
var initializeLookAndFeel = function() {
if (!$scope.note.config.looknfeel) {
$scope.note.config.looknfeel = 'default';
@@ -388,94 +349,6 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $ro
return noteCopy;
};
- // create new paragraph on current position
- $scope.$on('insertParagraph', function(event, paragraphId, position) {
- var newIndex = -1;
- for (var 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;
- } else {
- newIndex = i + 1;
- }
- break;
- }
- }
-
- if (newIndex < 0 || newIndex > $scope.note.paragraphs.length) {
- return;
- }
- websocketMsgSrv.insertParagraph(newIndex);
- });
-
- $scope.$on('moveParagraphUp', function(event, paragraphId) {
- var newIndex = -1;
- for (var i = 0; i < $scope.note.paragraphs.length; i++) {
- if ($scope.note.paragraphs[i].id === paragraphId) {
- newIndex = i - 1;
- break;
- }
- }
- if (newIndex < 0 || newIndex >= $scope.note.paragraphs.length) {
- return;
- }
- // save dirtyText of moving paragraphs.
- var prevParagraphId = $scope.note.paragraphs[newIndex].id;
- angular.element('#' + paragraphId + '_paragraphColumn_main').scope().saveParagraph();
- angular.element('#' + prevParagraphId + '_paragraphColumn_main').scope().saveParagraph();
- websocketMsgSrv.moveParagraph(paragraphId, newIndex);
- });
-
- $scope.$on('moveParagraphDown', function(event, paragraphId) {
- var newIndex = -1;
- for (var i = 0; i < $scope.note.paragraphs.length; i++) {
- if ($scope.note.paragraphs[i].id === paragraphId) {
- newIndex = i + 1;
- break;
- }
- }
-
- if (newIndex < 0 || newIndex >= $scope.note.paragraphs.length) {
- return;
- }
- // save dirtyText of moving paragraphs.
- var nextParagraphId = $scope.note.paragraphs[newIndex].id;
- angular.element('#' + paragraphId + '_paragraphColumn_main').scope().saveParagraph();
- angular.element('#' + nextParagraphId + '_paragraphColumn_main').scope().saveParagraph();
- websocketMsgSrv.moveParagraph(paragraphId, newIndex);
- });
-
- $scope.$on('moveFocusToPreviousParagraph', function(event, currentParagraphId) {
- var focus = false;
- for (var i = $scope.note.paragraphs.length - 1; i >= 0; i--) {
- if (focus === false) {
- if ($scope.note.paragraphs[i].id === currentParagraphId) {
- focus = true;
- continue;
- }
- } else {
- $scope.$broadcast('focusParagraph', $scope.note.paragraphs[i].id, -1);
- break;
- }
- }
- });
-
- $scope.$on('moveFocusToNextParagraph', function(event, currentParagraphId) {
- var focus = false;
- for (var i = 0; i < $scope.note.paragraphs.length; i++) {
- if (focus === false) {
- if ($scope.note.paragraphs[i].id === currentParagraphId) {
- focus = true;
- continue;
- }
- } else {
- $scope.$broadcast('focusParagraph', $scope.note.paragraphs[i].id, 0);
- break;
- }
- }
- });
-
var updateNote = function(note) {
/** update Note name */
if (note.name !== $scope.note.name) {
@@ -887,11 +760,13 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $ro
$scope.search('owners');
});
}, 350));
+
$scope.$watch('permissions.readers', _.debounce(function(readers) {
$scope.$apply(function() {
$scope.search('readers');
});
}, 350));
+
$scope.$watch('permissions.writers', _.debounce(function(readers) {
$scope.$apply(function() {
$scope.search('writers');
@@ -972,4 +847,133 @@ angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $ro
angular.element('.ace_autocomplete').hide();
});
+ /*
+ ** $scope.$on functions below
+ */
+
+ $scope.$on('setConnectedStatus', function(event, param) {
+ if (connectedOnce && param) {
+ initNotebook();
+ }
+ connectedOnce = true;
+ });
+
+ $scope.$on('moveParagraphUp', function(event, paragraphId) {
+ var newIndex = -1;
+ for (var i = 0; i < $scope.note.paragraphs.length; i++) {
+ if ($scope.note.paragraphs[i].id === paragraphId) {
+ newIndex = i - 1;
+ break;
+ }
+ }
+ if (newIndex < 0 || newIndex >= $scope.note.paragraphs.length) {
+ return;
+ }
+ // save dirtyText of moving paragraphs.
+ var prevParagraphId = $scope.note.paragraphs[newIndex].id;
+ angular.element('#' + paragraphId + '_paragraphColumn_main').scope().saveParagraph();
+ angular.element('#' + prevParagraphId + '_paragraphColumn_main').scope().saveParagraph();
+ websocketMsgSrv.moveParagraph(paragraphId, newIndex);
+ });
+
+ $scope.$on('moveParagraphDown', function(event, paragraphId) {
+ var newIndex = -1;
+ for (var i = 0; i < $scope.note.paragraphs.length; i++) {
+ if ($scope.note.paragraphs[i].id === paragraphId) {
+ newIndex = i + 1;
+ break;
+ }
+ }
+
+ if (newIndex < 0 || newIndex >= $scope.note.paragraphs.length) {
+ return;
+ }
+ // save dirtyText of moving paragraphs.
+ var nextParagraphId = $scope.note.paragraphs[newIndex].id;
+ angular.element('#' + paragraphId + '_paragraphColumn_main').scope().saveParagraph();
+ angular.element('#' + nextParagraphId + '_paragraphColumn_main').scope().saveParagraph();
+ websocketMsgSrv.moveParagraph(paragraphId, newIndex);
+ });
+
+ $scope.$on('moveFocusToPreviousParagraph', function(event, currentParagraphId) {
+ var focus = false;
+ for (var i = $scope.note.paragraphs.length - 1; i >= 0; i--) {
+ if (focus === false) {
+ if ($scope.note.paragraphs[i].id === currentParagraphId) {
+ focus = true;
+ continue;
+ }
+ } else {
+ $scope.$broadcast('focusParagraph', $scope.note.paragraphs[i].id, -1);
+ break;
+ }
+ }
+ });
+
+ $scope.$on('moveFocusToNextParagraph', function(event, currentParagraphId) {
+ var focus = false;
+ for (var i = 0; i < $scope.note.paragraphs.length; i++) {
+ if (focus === false) {
+ if ($scope.note.paragraphs[i].id === currentParagraphId) {
+ focus = true;
+ continue;
+ }
+ } else {
+ $scope.$broadcast('focusParagraph', $scope.note.paragraphs[i].id, 0);
+ break;
+ }
+ }
+ });
+
+ $scope.$on('insertParagraph', function(event, paragraphId, position) {
+ var newIndex = -1;
+ for (var 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;
+ } else {
+ newIndex = i + 1;
+ }
+ break;
+ }
+ }
+
+ if (newIndex < 0 || newIndex > $scope.note.paragraphs.length) {
+ return;
+ }
+ websocketMsgSrv.insertParagraph(newIndex);
+ });
+
+ $scope.$on('setNoteContent', function(event, note) {
+ if (note === undefined) {
+ $location.path('/');
+ }
+
+ $scope.paragraphUrl = $routeParams.paragraphId;
+ $scope.asIframe = $routeParams.asIframe;
+ if ($scope.paragraphUrl) {
+ note = cleanParagraphExcept($scope.paragraphUrl, note);
+ $rootScope.$broadcast('setIframe', $scope.asIframe);
+ }
+
+ if ($scope.note === null) {
+ $scope.note = note;
+ } else {
+ updateNote(note);
+ }
+ initializeLookAndFeel();
+ //open interpreter binding setting when there're none selected
+ getInterpreterBindings(getInterpreterBindingsCallBack);
+ });
+
+ $scope.$on('$destroy', function() {
+ angular.element(window).off('beforeunload');
+ $scope.killSaveTimer();
+ $scope.saveNote();
+
+ document.removeEventListener('click', $scope.focusParagraphOnClick);
+ document.removeEventListener('keydown', $scope.keyboardShortcut);
+ });
+
});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/9289bb8d/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 8bb7731..fcf609e 100644
--- a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js
+++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js
@@ -208,115 +208,6 @@ angular.module('zeppelinWebApp').controller('ParagraphCtrl', function($scope, $r
}
};
- $scope.$on('angularObjectUpdate', function(event, data) {
- var noteId = $route.current.pathParams.noteId;
- if (!data.noteId || data.noteId === noteId) {
- var scope;
- var registry;
-
- if (!data.paragraphId || data.paragraphId === $scope.paragraph.id) {
- scope = paragraphScope;
- registry = angularObjectRegistry;
- } else {
- var app = _.find($scope.apps, {id: data.paragraphId});
- if (app) {
- scope = getAppScope(app);
- registry = getAppRegistry(app);
- } else {
- // no matching app in this paragraph
- return;
- }
- }
- var varName = data.angularObject.name;
-
- if (angular.equals(data.angularObject.object, scope[varName])) {
- // return when update has no change
- return;
- }
-
- if (!registry[varName]) {
- registry[varName] = {
- interpreterGroupId: data.interpreterGroupId,
- noteId: data.noteId,
- paragraphId: data.paragraphId
- };
- } else {
- registry[varName].noteId = registry[varName].noteId || data.noteId;
- registry[varName].paragraphId = registry[varName].paragraphId || data.paragraphId;
- }
-
- 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]);
- if (registry[varName].skipEmit) {
- registry[varName].skipEmit = false;
- return;
- }
- websocketMsgSrv.updateAngularObject(
- registry[varName].noteId,
- registry[varName].paragraphId,
- varName,
- newValue,
- registry[varName].interpreterGroupId);
- });
- }
- console.log('angular object (paragraph) created %o', varName);
- scope[varName] = data.angularObject.object;
-
- // create proxy for AngularFunction
- if (varName.startsWith(ANGULAR_FUNCTION_OBJECT_NAME_PREFIX)) {
- var funcName = varName.substring((ANGULAR_FUNCTION_OBJECT_NAME_PREFIX).length);
- scope[funcName] = function() {
- scope[varName] = arguments;
- console.log('angular function (paragraph) invoked %o', arguments);
- };
-
- console.log('angular function (paragraph) created %o', scope[funcName]);
- }
- }
- });
-
- $scope.$on('angularObjectRemove', function(event, data) {
- var noteId = $route.current.pathParams.noteId;
- if (!data.noteId || data.noteId === noteId) {
- var scope;
- var registry;
-
- if (!data.paragraphId || data.paragraphId === $scope.paragraph.id) {
- scope = paragraphScope;
- registry = angularObjectRegistry;
- } else {
- var app = _.find($scope.apps, {id: data.paragraphId});
- if (app) {
- scope = getAppScope(app);
- registry = getAppRegistry(app);
- } else {
- // no matching app in this paragraph
- return;
- }
- }
-
- var varName = data.name;
-
- // clear watcher
- if (registry[varName]) {
- registry[varName].clearWatcher();
- registry[varName] = undefined;
- }
-
- // remove scope variable
- scope[varName] = undefined;
-
- // remove proxy for AngularFunction
- if (varName.startsWith(ANGULAR_FUNCTION_OBJECT_NAME_PREFIX)) {
- var funcName = varName.substring((ANGULAR_FUNCTION_OBJECT_NAME_PREFIX).length);
- scope[funcName] = undefined;
- }
- }
- });
-
var initializeDefault = function() {
var config = $scope.paragraph.config;
@@ -383,137 +274,6 @@ angular.module('zeppelinWebApp').controller('ParagraphCtrl', function($scope, $r
return !object;
};
- // TODO: this may have impact on performance when there are many paragraphs in a note.
- $scope.$on('updateParagraph', function(event, data) {
- if (data.paragraph.id === $scope.paragraph.id &&
- (data.paragraph.dateCreated !== $scope.paragraph.dateCreated ||
- data.paragraph.dateFinished !== $scope.paragraph.dateFinished ||
- data.paragraph.dateStarted !== $scope.paragraph.dateStarted ||
- data.paragraph.dateUpdated !== $scope.paragraph.dateUpdated ||
- data.paragraph.status !== $scope.paragraph.status ||
- data.paragraph.jobName !== $scope.paragraph.jobName ||
- data.paragraph.title !== $scope.paragraph.title ||
- isEmpty(data.paragraph.result) !== isEmpty($scope.paragraph.result) ||
- data.paragraph.errorMessage !== $scope.paragraph.errorMessage ||
- !angular.equals(data.paragraph.settings, $scope.paragraph.settings) ||
- !angular.equals(data.paragraph.config, $scope.paragraph.config))
- ) {
-
- var oldType = $scope.getResultType();
- var newType = $scope.getResultType(data.paragraph);
- var oldGraphMode = $scope.getGraphMode();
- var newGraphMode = $scope.getGraphMode(data.paragraph);
- var oldActiveApp = _.get($scope.paragraph.config, 'helium.activeApp');
- var newActiveApp = _.get(data.paragraph.config, 'helium.activeApp');
-
- var statusChanged = (data.paragraph.status !== $scope.paragraph.status);
-
- var resultRefreshed = (data.paragraph.dateFinished !== $scope.paragraph.dateFinished) ||
- isEmpty(data.paragraph.result) !== isEmpty($scope.paragraph.result) ||
- data.paragraph.status === 'ERROR' || (data.paragraph.status === 'FINISHED' && statusChanged) ||
- (!newActiveApp && oldActiveApp !== newActiveApp);
-
- //console.log("updateParagraph oldData %o, newData %o. type %o -> %o, mode %o -> %o", $scope.paragraph, data, oldType, newType, oldGraphMode, newGraphMode);
-
- if ($scope.paragraph.text !== data.paragraph.text) {
- if ($scope.dirtyText) { // check if editor has local update
- if ($scope.dirtyText === data.paragraph.text) { // when local update is the same from remote, clear local update
- $scope.paragraph.text = data.paragraph.text;
- $scope.dirtyText = undefined;
- $scope.originalText = angular.copy(data.paragraph.text);
- } else { // if there're local update, keep it.
- $scope.paragraph.text = $scope.dirtyText;
- }
- } else {
- $scope.paragraph.text = data.paragraph.text;
- $scope.originalText = angular.copy(data.paragraph.text);
- }
- }
-
- /** push the rest */
- $scope.paragraph.aborted = data.paragraph.aborted;
- $scope.paragraph.user = data.paragraph.user;
- $scope.paragraph.dateUpdated = data.paragraph.dateUpdated;
- $scope.paragraph.dateCreated = data.paragraph.dateCreated;
- $scope.paragraph.dateFinished = data.paragraph.dateFinished;
- $scope.paragraph.dateStarted = data.paragraph.dateStarted;
- $scope.paragraph.errorMessage = data.paragraph.errorMessage;
- $scope.paragraph.jobName = data.paragraph.jobName;
- $scope.paragraph.title = data.paragraph.title;
- $scope.paragraph.lineNumbers = data.paragraph.lineNumbers;
- $scope.paragraph.status = data.paragraph.status;
- $scope.paragraph.result = data.paragraph.result;
- $scope.paragraph.settings = data.paragraph.settings;
-
- if (!$scope.asIframe) {
- $scope.paragraph.config = data.paragraph.config;
- initializeDefault();
- } else {
- data.paragraph.config.editorHide = true;
- data.paragraph.config.tableHide = false;
- $scope.paragraph.config = data.paragraph.config;
- }
-
- if (newType === 'TABLE') {
- $scope.loadTableData($scope.paragraph.result);
- if (oldType !== 'TABLE' || resultRefreshed) {
- clearUnknownColsFromGraphOption();
- selectDefaultColsForGraphOption();
- }
- /** User changed the chart type? */
- if (oldGraphMode !== newGraphMode) {
- $scope.setGraphMode(newGraphMode, false, false);
- } else {
- $scope.setGraphMode(newGraphMode, false, true);
- }
- } else if (newType === 'HTML' && resultRefreshed) {
- $scope.renderHtml();
- } else if (newType === 'ANGULAR' && resultRefreshed) {
- $scope.renderAngular();
- } else if (newType === 'TEXT' && resultRefreshed) {
- $scope.renderText();
- }
-
- getApplicationStates();
- getSuggestions();
-
- if (newActiveApp && newActiveApp !== oldActiveApp) {
- var app = _.find($scope.apps, {id: newActiveApp});
- renderApp(app);
- }
-
- if (statusChanged || resultRefreshed) {
- // when last paragraph runs, zeppelin automatically appends new paragraph.
- // this broadcast will focus to the newly inserted paragraph
- var paragraphs = angular.element('div[id$="_paragraphColumn_main"]');
- if (paragraphs.length >= 2 && paragraphs[paragraphs.length - 2].id.startsWith($scope.paragraph.id)) {
- // rendering output can took some time. So delay scrolling event firing for sometime.
- setTimeout(function() {
- $rootScope.$broadcast('scrollToCursor');
- }, 500);
- }
- }
- }
-
- });
-
- $scope.$on('appendParagraphOutput', function(event, data) {
- if ($scope.paragraph.id === data.paragraphId) {
- if ($scope.flushStreamingOutput) {
- $scope.clearTextOutput();
- $scope.flushStreamingOutput = false;
- }
- $scope.appendTextOutput(data.data);
- }
- });
-
- $scope.$on('updateParagraphOutput', function(event, data) {
- if ($scope.paragraph.id === data.paragraphId) {
- $scope.clearTextOutput();
- $scope.appendTextOutput(data.data);
- }
- });
-
$scope.isRunning = function() {
if ($scope.paragraph.status === 'RUNNING' || $scope.paragraph.status === 'PENDING') {
return true;
@@ -1060,129 +820,18 @@ angular.module('zeppelinWebApp').controller('ParagraphCtrl', function($scope, $r
$scope.editor.navigateLineEnd();
};
- $scope.$on('updateProgress', function(event, data) {
- if (data.id === $scope.paragraph.id) {
- $scope.currentProgress = data.progress;
+ $scope.getResultType = function(paragraph) {
+ var pdata = (paragraph) ? paragraph : $scope.paragraph;
+ if (pdata.result && pdata.result.type) {
+ return pdata.result.type;
+ } else {
+ return 'TEXT';
}
- });
+ };
- $scope.$on('keyEvent', function(event, keyEvent) {
- if ($scope.paragraphFocused) {
-
- var paragraphId = $scope.paragraph.id;
- var keyCode = keyEvent.keyCode;
- var noShortcutDefined = false;
- var 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);
- } else if (editorHide && (keyCode === 40 || (keyCode === 78 && keyEvent.ctrlKey && !keyEvent.altKey))) { // down
- // move focus to next paragraph
- $scope.$emit('moveFocusToNextParagraph', paragraphId);
- } else if (keyEvent.shiftKey && keyCode === 13) { // Shift + Enter
- $scope.run();
- } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 67) { // Ctrl + Alt + c
- $scope.cancelParagraph();
- } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 68) { // Ctrl + Alt + d
- $scope.removeParagraph();
- } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 75) { // Ctrl + Alt + k
- $scope.moveUp();
- } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 74) { // Ctrl + Alt + j
- $scope.moveDown();
- } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 65) { // Ctrl + Alt + a
- $scope.insertNew('above');
- } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 66) { // Ctrl + Alt + b
- $scope.insertNew('below');
- } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 79) { // Ctrl + Alt + o
- $scope.toggleOutput();
- } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 82) { // Ctrl + Alt + r
- $scope.toggleEnableDisable();
- } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 69) { // Ctrl + Alt + e
- $scope.toggleEditor();
- } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 77) { // Ctrl + Alt + m
- if ($scope.paragraph.config.lineNumbers) {
- $scope.hideLineNumbers();
- } else {
- $scope.showLineNumbers();
- }
- } else if (keyEvent.ctrlKey && keyEvent.shiftKey && keyCode === 189) { // Ctrl + Shift + -
- $scope.changeColWidth(Math.max(1, $scope.paragraph.config.colWidth - 1));
- } else if (keyEvent.ctrlKey && keyEvent.shiftKey && keyCode === 187) { // Ctrl + Shift + =
- $scope.changeColWidth(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();
- } else {
- $scope.showTitle();
- }
- } else {
- noShortcutDefined = true;
- }
-
- if (!noShortcutDefined) {
- keyEvent.preventDefault();
- }
- }
- });
-
- $scope.$on('focusParagraph', function(event, paragraphId, cursorPos, mouseEvent) {
- if ($scope.paragraph.id === paragraphId) {
- // focus editor
- if (!$scope.paragraph.config.editorHide) {
- if (!mouseEvent) {
- $scope.editor.focus();
- // move cursor to the first row (or the last row)
- var row;
- if (cursorPos >= 0) {
- row = cursorPos;
- $scope.editor.gotoLine(row, 0);
- } else {
- row = $scope.editor.session.getLength();
- $scope.editor.gotoLine(row, 0);
- }
- $scope.scrollToCursor($scope.paragraph.id, 0);
- }
- }
- $scope.handleFocus(true);
- } else {
- $scope.editor.blur();
- $scope.handleFocus(false);
- }
- });
-
- $scope.$on('runParagraph', function(event) {
- $scope.runParagraph($scope.editor.getValue());
- });
-
- $scope.$on('openEditor', function(event) {
- $scope.openEditor();
- });
-
- $scope.$on('closeEditor', function(event) {
- $scope.closeEditor();
- });
-
- $scope.$on('openTable', function(event) {
- $scope.openTable();
- });
-
- $scope.$on('closeTable', function(event) {
- $scope.closeTable();
- });
-
- $scope.getResultType = function(paragraph) {
- var pdata = (paragraph) ? paragraph : $scope.paragraph;
- if (pdata.result && pdata.result.type) {
- return pdata.result.type;
- } else {
- return 'TEXT';
- }
- };
-
- $scope.getBase64ImageSrc = function(base64Data) {
- return 'data:image/png;base64,' + base64Data;
- };
+ $scope.getBase64ImageSrc = function(base64Data) {
+ return 'data:image/png;base64,' + base64Data;
+ };
$scope.getGraphMode = function(paragraph) {
var pdata = (paragraph) ? paragraph : $scope.paragraph;
@@ -2340,6 +1989,10 @@ angular.module('zeppelinWebApp').controller('ParagraphCtrl', function($scope, $r
$timeout(retryRenderer);
};
+ /*
+ ** $scope.$on functions below
+ */
+
$scope.$on('appendAppOutput', function(event, data) {
if ($scope.paragraph.id === data.paragraphId) {
var app = _.find($scope.apps, {id: data.appId});
@@ -2402,4 +2055,355 @@ angular.module('zeppelinWebApp').controller('ParagraphCtrl', function($scope, $r
}
}
});
+
+ $scope.$on('angularObjectUpdate', function(event, data) {
+ var noteId = $route.current.pathParams.noteId;
+ if (!data.noteId || data.noteId === noteId) {
+ var scope;
+ var registry;
+
+ if (!data.paragraphId || data.paragraphId === $scope.paragraph.id) {
+ scope = paragraphScope;
+ registry = angularObjectRegistry;
+ } else {
+ var app = _.find($scope.apps, {id: data.paragraphId});
+ if (app) {
+ scope = getAppScope(app);
+ registry = getAppRegistry(app);
+ } else {
+ // no matching app in this paragraph
+ return;
+ }
+ }
+ var varName = data.angularObject.name;
+
+ if (angular.equals(data.angularObject.object, scope[varName])) {
+ // return when update has no change
+ return;
+ }
+
+ if (!registry[varName]) {
+ registry[varName] = {
+ interpreterGroupId: data.interpreterGroupId,
+ noteId: data.noteId,
+ paragraphId: data.paragraphId
+ };
+ } else {
+ registry[varName].noteId = registry[varName].noteId || data.noteId;
+ registry[varName].paragraphId = registry[varName].paragraphId || data.paragraphId;
+ }
+
+ 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]);
+ if (registry[varName].skipEmit) {
+ registry[varName].skipEmit = false;
+ return;
+ }
+ websocketMsgSrv.updateAngularObject(
+ registry[varName].noteId,
+ registry[varName].paragraphId,
+ varName,
+ newValue,
+ registry[varName].interpreterGroupId);
+ });
+ }
+ console.log('angular object (paragraph) created %o', varName);
+ scope[varName] = data.angularObject.object;
+
+ // create proxy for AngularFunction
+ if (varName.startsWith(ANGULAR_FUNCTION_OBJECT_NAME_PREFIX)) {
+ var funcName = varName.substring((ANGULAR_FUNCTION_OBJECT_NAME_PREFIX).length);
+ scope[funcName] = function() {
+ scope[varName] = arguments;
+ console.log('angular function (paragraph) invoked %o', arguments);
+ };
+
+ console.log('angular function (paragraph) created %o', scope[funcName]);
+ }
+ }
+ });
+
+ $scope.$on('angularObjectRemove', function(event, data) {
+ var noteId = $route.current.pathParams.noteId;
+ if (!data.noteId || data.noteId === noteId) {
+ var scope;
+ var registry;
+
+ if (!data.paragraphId || data.paragraphId === $scope.paragraph.id) {
+ scope = paragraphScope;
+ registry = angularObjectRegistry;
+ } else {
+ var app = _.find($scope.apps, {id: data.paragraphId});
+ if (app) {
+ scope = getAppScope(app);
+ registry = getAppRegistry(app);
+ } else {
+ // no matching app in this paragraph
+ return;
+ }
+ }
+
+ var varName = data.name;
+
+ // clear watcher
+ if (registry[varName]) {
+ registry[varName].clearWatcher();
+ registry[varName] = undefined;
+ }
+
+ // remove scope variable
+ scope[varName] = undefined;
+
+ // remove proxy for AngularFunction
+ if (varName.startsWith(ANGULAR_FUNCTION_OBJECT_NAME_PREFIX)) {
+ var funcName = varName.substring((ANGULAR_FUNCTION_OBJECT_NAME_PREFIX).length);
+ scope[funcName] = undefined;
+ }
+ }
+ });
+
+ $scope.$on('updateParagraph', function(event, data) {
+ if (data.paragraph.id === $scope.paragraph.id &&
+ (data.paragraph.dateCreated !== $scope.paragraph.dateCreated ||
+ data.paragraph.dateFinished !== $scope.paragraph.dateFinished ||
+ data.paragraph.dateStarted !== $scope.paragraph.dateStarted ||
+ data.paragraph.dateUpdated !== $scope.paragraph.dateUpdated ||
+ data.paragraph.status !== $scope.paragraph.status ||
+ data.paragraph.jobName !== $scope.paragraph.jobName ||
+ data.paragraph.title !== $scope.paragraph.title ||
+ isEmpty(data.paragraph.result) !== isEmpty($scope.paragraph.result) ||
+ data.paragraph.errorMessage !== $scope.paragraph.errorMessage ||
+ !angular.equals(data.paragraph.settings, $scope.paragraph.settings) ||
+ !angular.equals(data.paragraph.config, $scope.paragraph.config))
+ ) {
+
+ var oldType = $scope.getResultType();
+ var newType = $scope.getResultType(data.paragraph);
+ var oldGraphMode = $scope.getGraphMode();
+ var newGraphMode = $scope.getGraphMode(data.paragraph);
+ var oldActiveApp = _.get($scope.paragraph.config, 'helium.activeApp');
+ var newActiveApp = _.get(data.paragraph.config, 'helium.activeApp');
+
+ var statusChanged = (data.paragraph.status !== $scope.paragraph.status);
+
+ var resultRefreshed = (data.paragraph.dateFinished !== $scope.paragraph.dateFinished) ||
+ isEmpty(data.paragraph.result) !== isEmpty($scope.paragraph.result) ||
+ data.paragraph.status === 'ERROR' || (data.paragraph.status === 'FINISHED' && statusChanged) ||
+ (!newActiveApp && oldActiveApp !== newActiveApp);
+
+ //console.log("updateParagraph oldData %o, newData %o. type %o -> %o, mode %o -> %o", $scope.paragraph, data, oldType, newType, oldGraphMode, newGraphMode);
+
+ if ($scope.paragraph.text !== data.paragraph.text) {
+ if ($scope.dirtyText) { // check if editor has local update
+ if ($scope.dirtyText === data.paragraph.text) { // when local update is the same from remote, clear local update
+ $scope.paragraph.text = data.paragraph.text;
+ $scope.dirtyText = undefined;
+ $scope.originalText = angular.copy(data.paragraph.text);
+ } else { // if there're local update, keep it.
+ $scope.paragraph.text = $scope.dirtyText;
+ }
+ } else {
+ $scope.paragraph.text = data.paragraph.text;
+ $scope.originalText = angular.copy(data.paragraph.text);
+ }
+ }
+
+ /** push the rest */
+ $scope.paragraph.aborted = data.paragraph.aborted;
+ $scope.paragraph.user = data.paragraph.user;
+ $scope.paragraph.dateUpdated = data.paragraph.dateUpdated;
+ $scope.paragraph.dateCreated = data.paragraph.dateCreated;
+ $scope.paragraph.dateFinished = data.paragraph.dateFinished;
+ $scope.paragraph.dateStarted = data.paragraph.dateStarted;
+ $scope.paragraph.errorMessage = data.paragraph.errorMessage;
+ $scope.paragraph.jobName = data.paragraph.jobName;
+ $scope.paragraph.title = data.paragraph.title;
+ $scope.paragraph.lineNumbers = data.paragraph.lineNumbers;
+ $scope.paragraph.status = data.paragraph.status;
+ $scope.paragraph.result = data.paragraph.result;
+ $scope.paragraph.settings = data.paragraph.settings;
+
+ if (!$scope.asIframe) {
+ $scope.paragraph.config = data.paragraph.config;
+ initializeDefault();
+ } else {
+ data.paragraph.config.editorHide = true;
+ data.paragraph.config.tableHide = false;
+ $scope.paragraph.config = data.paragraph.config;
+ }
+
+ if (newType === 'TABLE') {
+ $scope.loadTableData($scope.paragraph.result);
+ if (oldType !== 'TABLE' || resultRefreshed) {
+ clearUnknownColsFromGraphOption();
+ selectDefaultColsForGraphOption();
+ }
+ /** User changed the chart type? */
+ if (oldGraphMode !== newGraphMode) {
+ $scope.setGraphMode(newGraphMode, false, false);
+ } else {
+ $scope.setGraphMode(newGraphMode, false, true);
+ }
+ } else if (newType === 'HTML' && resultRefreshed) {
+ $scope.renderHtml();
+ } else if (newType === 'ANGULAR' && resultRefreshed) {
+ $scope.renderAngular();
+ } else if (newType === 'TEXT' && resultRefreshed) {
+ $scope.renderText();
+ }
+
+ getApplicationStates();
+ getSuggestions();
+
+ if (newActiveApp && newActiveApp !== oldActiveApp) {
+ var app = _.find($scope.apps, {id: newActiveApp});
+ renderApp(app);
+ }
+
+ if (statusChanged || resultRefreshed) {
+ // when last paragraph runs, zeppelin automatically appends new paragraph.
+ // this broadcast will focus to the newly inserted paragraph
+ var paragraphs = angular.element('div[id$="_paragraphColumn_main"]');
+ if (paragraphs.length >= 2 && paragraphs[paragraphs.length - 2].id.startsWith($scope.paragraph.id)) {
+ // rendering output can took some time. So delay scrolling event firing for sometime.
+ setTimeout(function() {
+ $rootScope.$broadcast('scrollToCursor');
+ }, 500);
+ }
+ }
+ }
+
+ });
+
+ $scope.$on('appendParagraphOutput', function(event, data) {
+ if ($scope.paragraph.id === data.paragraphId) {
+ if ($scope.flushStreamingOutput) {
+ $scope.clearTextOutput();
+ $scope.flushStreamingOutput = false;
+ }
+ $scope.appendTextOutput(data.data);
+ }
+ });
+
+ $scope.$on('updateParagraphOutput', function(event, data) {
+ if ($scope.paragraph.id === data.paragraphId) {
+ $scope.clearTextOutput();
+ $scope.appendTextOutput(data.data);
+ }
+ });
+
+ $scope.$on('updateProgress', function(event, data) {
+ if (data.id === $scope.paragraph.id) {
+ $scope.currentProgress = data.progress;
+ }
+ });
+
+ $scope.$on('keyEvent', function(event, keyEvent) {
+ if ($scope.paragraphFocused) {
+
+ var paragraphId = $scope.paragraph.id;
+ var keyCode = keyEvent.keyCode;
+ var noShortcutDefined = false;
+ var 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);
+ } else if (editorHide && (keyCode === 40 || (keyCode === 78 && keyEvent.ctrlKey && !keyEvent.altKey))) { // down
+ // move focus to next paragraph
+ $scope.$emit('moveFocusToNextParagraph', paragraphId);
+ } else if (keyEvent.shiftKey && keyCode === 13) { // Shift + Enter
+ $scope.run();
+ } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 67) { // Ctrl + Alt + c
+ $scope.cancelParagraph();
+ } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 68) { // Ctrl + Alt + d
+ $scope.removeParagraph();
+ } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 75) { // Ctrl + Alt + k
+ $scope.moveUp();
+ } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 74) { // Ctrl + Alt + j
+ $scope.moveDown();
+ } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 65) { // Ctrl + Alt + a
+ $scope.insertNew('above');
+ } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 66) { // Ctrl + Alt + b
+ $scope.insertNew('below');
+ } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 79) { // Ctrl + Alt + o
+ $scope.toggleOutput();
+ } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 82) { // Ctrl + Alt + r
+ $scope.toggleEnableDisable();
+ } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 69) { // Ctrl + Alt + e
+ $scope.toggleEditor();
+ } else if (keyEvent.ctrlKey && keyEvent.altKey && keyCode === 77) { // Ctrl + Alt + m
+ if ($scope.paragraph.config.lineNumbers) {
+ $scope.hideLineNumbers();
+ } else {
+ $scope.showLineNumbers();
+ }
+ } else if (keyEvent.ctrlKey && keyEvent.shiftKey && keyCode === 189) { // Ctrl + Shift + -
+ $scope.changeColWidth(Math.max(1, $scope.paragraph.config.colWidth - 1));
+ } else if (keyEvent.ctrlKey && keyEvent.shiftKey && keyCode === 187) { // Ctrl + Shift + =
+ $scope.changeColWidth(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();
+ } else {
+ $scope.showTitle();
+ }
+ } else {
+ noShortcutDefined = true;
+ }
+
+ if (!noShortcutDefined) {
+ keyEvent.preventDefault();
+ }
+ }
+ });
+
+ $scope.$on('focusParagraph', function(event, paragraphId, cursorPos, mouseEvent) {
+ if ($scope.paragraph.id === paragraphId) {
+ // focus editor
+ if (!$scope.paragraph.config.editorHide) {
+ if (!mouseEvent) {
+ $scope.editor.focus();
+ // move cursor to the first row (or the last row)
+ var row;
+ if (cursorPos >= 0) {
+ row = cursorPos;
+ $scope.editor.gotoLine(row, 0);
+ } else {
+ row = $scope.editor.session.getLength();
+ $scope.editor.gotoLine(row, 0);
+ }
+ $scope.scrollToCursor($scope.paragraph.id, 0);
+ }
+ }
+ $scope.handleFocus(true);
+ } else {
+ $scope.editor.blur();
+ $scope.handleFocus(false);
+ }
+ });
+
+ $scope.$on('runParagraph', function(event) {
+ $scope.runParagraph($scope.editor.getValue());
+ });
+
+ $scope.$on('openEditor', function(event) {
+ $scope.openEditor();
+ });
+
+ $scope.$on('closeEditor', function(event) {
+ $scope.closeEditor();
+ });
+
+ $scope.$on('openTable', function(event) {
+ $scope.openTable();
+ });
+
+ $scope.$on('closeTable', function(event) {
+ $scope.closeTable();
+ });
+
});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/9289bb8d/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 1cda335..807f4dc 100644
--- a/zeppelin-web/src/app/search/result-list.controller.js
+++ b/zeppelin-web/src/app/search/result-list.controller.js
@@ -23,136 +23,134 @@ angular
var results = searchService.search({'q': $routeParams.searchTerm}).query();
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;
- }
+ $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;
+ }
- note.id = note.id.replace('paragraph/', '?paragraph=') +
- '&term=' +
- $routeParams.searchTerm;
+ note.id = note.id.replace('paragraph/', '?paragraph=') +
+ '&term=' + $routeParams.searchTerm;
- return note;
- });
- if ($scope.notes.length === 0) {
- $scope.isResult = false;
- } else {
- $scope.isResult = true;
- }
-
- $scope.$on('$routeChangeStart', function(event, next, current) {
- if (next.originalPath !== '/search/:searchTerm') {
- searchService.searchTerm = '';
+ return note;
+ });
+ if ($scope.notes.length === 0) {
+ $scope.isResult = false;
+ } else {
+ $scope.isResult = true;
}
+
+ $scope.$on('$routeChangeStart', function(event, next, current) {
+ if (next.originalPath !== '/search/:searchTerm') {
+ searchService.searchTerm = '';
+ }
+ });
});
- });
$scope.page = 0;
$scope.allResults = false;
$scope.highlightSearchResults = function(note) {
- return function(_editor) {
- function getEditorMode(text) {
- var 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/
- };
-
- return Object.keys(editorModes).reduce(function(res, mode) {
- return editorModes[mode].test(text) ? mode : res;
- }, 'ace/mode/scala');
- }
-
- var 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));
-
- function getIndeces(term) {
- return function(str) {
- var indeces = [];
- var i = -1;
- while ((i = str.indexOf(term, i + 1)) >= 0) {
- indeces.push(i);
- }
- return indeces;
- };
- }
-
- var result = '';
- if (note.header !== '') {
- result = note.header + '\n\n' + note.snippet;
- } else {
- result = note.snippet;
- }
-
- var lines = result
- .split('\n')
- .map(function(line, row) {
-
- var match = line.match(/<B>(.+?)<\/B>/);
-
- // return early if nothing to highlight
- if (!match) {
- return line;
- }
-
- var term = match[1];
- var __line = line
- .replace(/<B>/g, '')
- .replace(/<\/B>/g, '');
-
- var indeces = getIndeces(term)(__line);
-
- indeces.forEach(function(start) {
- var end = start + term.length;
- if (note.header !== '' && row === 0) {
- _editor
- .getSession()
- .addMarker(
- 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()
- .addMarker(
- new Range(row, start, row, end),
- 'search-results-highlight',
- 'line'
- );
+ return function(_editor) {
+ function getEditorMode(text) {
+ var 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/
+ };
+
+ return Object.keys(editorModes).reduce(function(res, mode) {
+ return editorModes[mode].test(text) ? mode : res;
+ }, 'ace/mode/scala');
+ }
+
+ var 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));
+
+ function getIndeces(term) {
+ return function(str) {
+ var indeces = [];
+ var i = -1;
+ while ((i = str.indexOf(term, i + 1)) >= 0) {
+ indeces.push(i);
+ }
+ return indeces;
+ };
+ }
+
+ var result = '';
+ if (note.header !== '') {
+ result = note.header + '\n\n' + note.snippet;
+ } else {
+ result = note.snippet;
+ }
+
+ var lines = result
+ .split('\n')
+ .map(function(line, row) {
+
+ var match = line.match(/<B>(.+?)<\/B>/);
+
+ // return early if nothing to highlight
+ if (!match) {
+ return line;
}
+
+ var term = match[1];
+ var __line = line
+ .replace(/<B>/g, '')
+ .replace(/<\/B>/g, '');
+
+ var indeces = getIndeces(term)(__line);
+
+ indeces.forEach(function(start) {
+ var end = start + term.length;
+ if (note.header !== '' && row === 0) {
+ _editor
+ .getSession()
+ .addMarker(
+ 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()
+ .addMarker(
+ 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)
- );
+ // 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'));
+ _editor.getSession().setValue(lines.join('\n'));
+ };
};
- };
-
});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/9289bb8d/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 2f3f10c..e47ca50 100644
--- a/zeppelin-web/src/components/login/login.controller.js
+++ b/zeppelin-web/src/components/login/login.controller.js
@@ -40,14 +40,19 @@ angular.module('zeppelinWebApp').controller('LoginCtrl',
};
- $scope.$on('initLoginValues', function() {
- initValues();
- });
var initValues = function() {
$scope.loginParams = {
userName: '',
password: ''
};
};
+
+ /*
+ ** $scope.$on functions below
+ */
+
+ $scope.$on('initLoginValues', function() {
+ initValues();
+ });
}
);
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/9289bb8d/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 50d50ab..c8da491 100644
--- a/zeppelin-web/src/components/navbar/navbar.controller.js
+++ b/zeppelin-web/src/components/navbar/navbar.controller.js
@@ -40,18 +40,6 @@ angular.module('zeppelinWebApp')
$scope.query.q = '';
});
- $scope.$on('setNoteMenu', function(event, notes) {
- notebookListDataFactory.setNotes(notes);
- });
-
- $scope.$on('setConnectedStatus', function(event, param) {
- vm.connected = param;
- });
-
- $scope.$on('loginSuccess', function(event, param) {
- loadNotes();
- });
-
$scope.logout = function() {
var logoutURL = baseUrlSrv.getRestApiBase() + '/login/logout';
@@ -108,4 +96,20 @@ angular.module('zeppelinWebApp')
getZeppelinVersion();
vm.loadNotes();
+ /*
+ ** $scope.$on functions below
+ */
+
+ $scope.$on('setNoteMenu', function(event, notes) {
+ notebookListDataFactory.setNotes(notes);
+ });
+
+ $scope.$on('setConnectedStatus', function(event, param) {
+ vm.connected = param;
+ });
+
+ $scope.$on('loginSuccess', function(event, param) {
+ loadNotes();
+ });
+
});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/9289bb8d/zeppelin-web/src/components/noteName-import/notenameImport.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/noteName-import/notenameImport.controller.js b/zeppelin-web/src/components/noteName-import/notenameImport.controller.js
index 766064f..dea3dd3 100644
--- a/zeppelin-web/src/components/noteName-import/notenameImport.controller.js
+++ b/zeppelin-web/src/components/noteName-import/notenameImport.controller.js
@@ -102,6 +102,10 @@ angular.module('zeppelinWebApp').controller('NoteImportCtrl', function($scope, $
$scope.$apply();
};
+ /*
+ ** $scope.$on functions below
+ */
+
$scope.$on('setNoteMenu', function(event, notes) {
vm.resetFlags();
angular.element('#noteImportModal').modal('hide');