You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by ah...@apache.org on 2017/04/20 04:52:45 UTC

[6/8] zeppelin git commit: [ZEPPELIN-1940] lint rule set is NOT applied at all.

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/19b0f30f/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 1322419..e481e9b 100644
--- a/zeppelin-web/src/app/notebook/notebook.controller.js
+++ b/zeppelin-web/src/app/notebook/notebook.controller.js
@@ -12,25 +12,25 @@
  * limitations under the License.
  */
 
-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, noteActionSrv, noteVarShareService, TRASH_FOLDER_ID,
                       heliumService) {
-  'ngInject';
+  'ngInject'
 
-  ngToast.dismiss();
+  ngToast.dismiss()
 
-  $scope.note = null;
-  $scope.moment = moment;
-  $scope.editorToggled = false;
-  $scope.tableToggled = false;
-  $scope.viewOnly = false;
-  $scope.showSetting = false;
-  $scope.looknfeelOption = ['default', 'simple', 'report'];
+  $scope.note = null
+  $scope.moment = moment
+  $scope.editorToggled = false
+  $scope.tableToggled = false
+  $scope.viewOnly = false
+  $scope.showSetting = false
+  $scope.looknfeelOption = ['default', 'simple', 'report']
   $scope.cronOption = [
     {name: 'None', value: undefined},
     {name: '1m', value: '0 0/1 * * * ?'},
@@ -40,50 +40,50 @@ function NotebookCtrl($scope, $route, $routeParams, $location, $rootScope,
     {name: '6h', value: '0 0 0/6 * * ?'},
     {name: '12h', value: '0 0 0/12 * * ?'},
     {name: '1d', value: '0 0 0 * * ?'}
-  ];
+  ]
 
-  $scope.interpreterSettings = [];
-  $scope.interpreterBindings = [];
-  $scope.isNoteDirty = null;
-  $scope.saveTimer = null;
+  $scope.interpreterSettings = []
+  $scope.interpreterBindings = []
+  $scope.isNoteDirty = null
+  $scope.saveTimer = null
 
-  var connectedOnce = false;
-  var isRevisionPath = function(path) {
-    var 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.$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 (var o in $scope.cronOption) {
+    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() {
-    var zeppelinVersion = $rootScope.zeppelinVersion;
-    var url = 'https://zeppelin.apache.org/docs/' + zeppelinVersion + '/security/notebook_authorization.html';
-    var content = 'Only authenticated user can set the permission.' +
+  $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,
@@ -92,187 +92,189 @@ 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 */
-  var 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);
-    var currentRoute = $route.current;
+    websocketMsgSrv.listRevisionHistory($routeParams.noteId)
+    let currentRoute = $route.current
     if (currentRoute) {
       setTimeout(
-        function() {
-          var routeParams = currentRoute.params;
-          var $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
-            var 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 (var i = 0; i < $scope.note.paragraphs.length; i++) {
-      var paragraphId = $scope.note.paragraphs[i].id;
+    for (let i = 0; i < $scope.note.paragraphs.length; i++) {
+      let paragraphId = $scope.note.paragraphs[i].id
       if (jQuery.contains(angular.element('#' + paragraphId + '_container')[0], clickEvent.target)) {
-        $scope.$broadcast('focusParagraph', paragraphId, 0, true);
-        break;
+        $scope.$broadcast('focusParagraph', paragraphId, 0, true)
+        break
       }
     }
-  };
+  }
 
   // register mouseevent handler for focus paragraph
-  document.addEventListener('click', $scope.focusParagraphOnClick);
+  document.addEventListener('click', $scope.focusParagraphOnClick)
 
-  $scope.keyboardShortcut = function(keyEvent) {
+  $scope.keyboardShortcut = function (keyEvent) {
     // handle keyevent
     if (!$scope.viewOnly && !$scope.revisionView) {
-      $scope.$broadcast('keyEvent', keyEvent);
+      $scope.$broadcast('keyEvent', keyEvent)
     }
-  };
+  }
 
   // register mouseevent handler for focus paragraph
-  document.addEventListener('keydown', $scope.keyboardShortcut);
+  document.addEventListener('keydown', $scope.keyboardShortcut)
 
-  $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) {
-    noteActionSrv.moveNoteToTrash(noteId, true);
-  };
+  $scope.moveNoteToTrash = function (noteId) {
+    noteActionSrv.moveNoteToTrash(noteId, true)
+  }
 
   // Remove the note permanently if it's in the trash
-  $scope.removeNote = function(noteId) {
-    noteActionSrv.removeNote(noteId, true);
-  };
-
-  $scope.isTrash = function(note) {
-    return note ? note.name.split('/')[0] === TRASH_FOLDER_ID : false;
-  };
-
-  //Export notebook
-  $scope.exportNote = function() {
-    var jsonContent = JSON.stringify($scope.note);
-    saveAsService.saveAs(jsonContent, $scope.note.name, 'json');
-  };
-
-  //Clone note
-  $scope.cloneNote = function(noteId) {
+  $scope.removeNote = function (noteId) {
+    noteActionSrv.removeNote(noteId, true)
+  }
+
+  $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')
+  }
+
+  // Clone note
+  $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.$on('listRevisionHistory', function(event, data) {
-    console.log('received list of revisions %o', data);
-    $scope.noteRevisions = data.revisionList;
+  $scope.$on('listRevisionHistory', function (event, data) {
+    console.log('received list of revisions %o', data)
+    $scope.noteRevisions = data.revisionList
     $scope.noteRevisions.splice(0, 0, {
       id: 'Head',
       message: 'Head'
-    });
+    })
     if ($routeParams.revisionId) {
-      var 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});
+        verticalPosition: 'top',
+        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 => {
             return {
@@ -281,439 +283,439 @@ function NotebookCtrl($scope, $route, $routeParams, $location, $rootScope,
               paragraph: p.text,
               config: p.config,
               params: p.settings.params
-            };
-          });
-          websocketMsgSrv.runAllParagraphs(noteId, paragraphs);
+            }
+          })
+          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) {
-    noteActionSrv.clearAllParagraphOutput(noteId);
-  };
+  $scope.clearAllParagraphOutput = function (noteId) {
+    noteActionSrv.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;
-    }
-  };
-
-  $scope.startSaveTimer = function() {
-    $scope.killSaveTimer();
-    $scope.isNoteDirty = true;
-    //console.log('startSaveTimer called ' + $scope.note.id);
-    $scope.saveTimer = $timeout(function() {
-      $scope.saveNote();
-    }, 10000);
-  };
-
-  angular.element(window).on('beforeunload', function(e) {
-    $scope.killSaveTimer();
-    $scope.saveNote();
-  });
-
-  $scope.setLookAndFeel = function(looknfeel) {
-    $scope.note.config.looknfeel = looknfeel;
+      $timeout.cancel($scope.saveTimer)
+      $scope.saveTimer = null
+    }
+  }
+
+  $scope.startSaveTimer = function () {
+    $scope.killSaveTimer()
+    $scope.isNoteDirty = true
+    // console.log('startSaveTimer called ' + $scope.note.id);
+    $scope.saveTimer = $timeout(function () {
+      $scope.saveNote()
+    }, 10000)
+  }
+
+  angular.element(window).on('beforeunload', function (e) {
+    $scope.killSaveTimer()
+    $scope.saveNote()
+  })
+
+  $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)
     }
-  };
+  }
 
-  var 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);
-  };
-
-  var cleanParagraphExcept = function(paragraphId, note) {
-    var noteCopy = {};
-    noteCopy.id = note.id;
-    noteCopy.name = note.name;
-    noteCopy.config = note.config;
-    noteCopy.info = note.info;
-    noteCopy.paragraphs = [];
-    for (var i = 0; i < note.paragraphs.length; i++) {
+      $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
+  }
 
-  var addPara = function(paragraph, index) {
-    $scope.note.paragraphs.splice(index, 0, paragraph);
-    _.each($scope.note.paragraphs, function(para) {
+  let addPara = function (paragraph, index) {
+    $scope.note.paragraphs.splice(index, 0, paragraph)
+    _.each($scope.note.paragraphs, function (para) {
       if (para.id === paragraph.id) {
-        para.focus = true;
-        $scope.$broadcast('focusParagraph', para.id, 0, false);
+        para.focus = true
+        $scope.$broadcast('focusParagraph', para.id, 0, false)
       }
-    });
-  };
+    })
+  }
 
-  var removePara = function(paragraphId) {
-    var 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) {
-      return;
+      return
     }
-    addPara(paragraph, index);
-  });
+    addPara(paragraph, index)
+  })
 
-  $scope.$on('removeParagraph', function(event, paragraphId) {
+  $scope.$on('removeParagraph', function (event, paragraphId) {
     if ($scope.paragraphUrl) {
-      return;
+      return
     }
-    removePara(paragraphId);
-  });
+    removePara(paragraphId)
+  })
 
-  $scope.$on('moveParagraph', function(event, paragraphId, newIdx) {
-    var removedPara = removePara(paragraphId);
+  $scope.$on('moveParagraph', function (event, paragraphId, newIdx) {
+    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()
+  })
 
-  var 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
 
-    var selected = false;
-    var key;
-    var setting;
+    let selected = false
+    let key
+    let setting
 
     for (key in $scope.interpreterBindings) {
-      setting = $scope.interpreterBindings[key];
+      setting = $scope.interpreterBindings[key]
       if (setting.selected) {
-        selected = true;
-        break;
+        selected = true
+        break
       }
     }
 
     if (!selected) {
       // make default selection
-      var selectedIntp = {};
+      let selectedIntp = {}
       for (key in $scope.interpreterBindings) {
-        setting = $scope.interpreterBindings[key];
+        setting = $scope.interpreterBindings[key]
         if (!selectedIntp[setting.name]) {
-          setting.selected = true;
-          selectedIntp[setting.name] = true;
+          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.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() {
-    var selectedSettingIds = [];
-    for (var no in $scope.interpreterBindings) {
-      var setting = $scope.interpreterBindings[no];
+  $scope.saveSetting = function () {
+    let selectedSettingIds = []
+    for (let no in $scope.interpreterBindings) {
+      let setting = $scope.interpreterBindings[no]
       if (setting.selected) {
-        selectedSettingIds.push(setting.id);
+        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) {
-      var 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.openSetting();
-      $scope.closePermissions();
-      angular.element('html, body').animate({ scrollTop: 0 }, 'slow');
+      $scope.openSetting()
+      $scope.closePermissions()
+      angular.element('html, body').animate({ scrollTop: 0 }, 'slow')
     }
-  };
+  }
 
-  var 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
+  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
 
-      var selectJson = {
+      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) {
-            var results = [];
+          processResults: function (data, params) {
+            let results = []
 
             if (data.body.users.length !== 0) {
-              var users = [];
-              for (var len = 0; len < data.body.users.length; len++) {
+              let users = []
+              for (let len = 0; len < data.body.users.length; len++) {
                 users.push({
                   'id': data.body.users[len],
                   'text': data.body.users[len]
-                });
+                })
               }
               results.push({
                 'text': 'Users :',
                 'children': users
-              });
+              })
             }
             if (data.body.roles.length !== 0) {
-              var roles = [];
-              for (var len = 0; len < data.body.roles.length; len++) {
+              let roles = []
+              for (let len = 0; len < data.body.roles.length; len++) {
                 roles.push({
                   'id': data.body.roles[len],
                   'text': data.body.roles[len]
-                });
+                })
               }
               results.push({
                 'text': 'Roles :',
                 'children': roles
-              });
+              })
             }
             return {
               results: results,
               pagination: {
                 more: false
               }
-            };
+            }
           },
           cache: false
         },
         width: ' ',
         tags: true,
         minimumInputLength: 3
-      };
+      }
 
-      $scope.setIamOwner();
-      angular.element('#selectOwners').select2(selectJson);
-      angular.element('#selectReaders').select2(selectJson);
-      angular.element('#selectWriters').select2(selectJson);
+      $scope.setIamOwner()
+      angular.element('#selectOwners').select2(selectJson)
+      angular.element('#selectReaders').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.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.writers = angular.element('#selectWriters').val()
+    angular.element('.permissionsForm select').find('option:not([is-select2="false"])').remove()
   }
 
   $scope.restartInterpreter = function(interpreter) {
-    var thisConfirm = BootstrapDialog.confirm({
+    const thisConfirm = BootstrapDialog.confirm({
       closable: false,
       closeByBackdrop: false,
       closeByKeyboard: false,
@@ -721,51 +723,51 @@ function NotebookCtrl($scope, $route, $routeParams, $location, $rootScope,
       message: 'Do you want to restart ' + interpreter.name + ' interpreter?',
       callback: function(result) {
         if (result) {
-          var payload  = {
+          let payload = {
             '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) {
-              var 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;
+              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
         }
       }
-    });
-  };
+    })
+  }
 
-  $scope.savePermissions = function() {
-    convertPermissionsToArray();
+  $scope.savePermissions = function () {
+    convertPermissionsToArray()
     $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);
+      $scope.permissions, {withCredentials: true})
+    .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' + 'Writers  : ' + $scope.permissions.writers
-        });
-        $scope.showPermissions = false;
-      });
-    }).
-    error(function(data, status, headers, config) {
-      console.log('Error %o %o', status, data.message);
+        })
+        $scope.showPermissions = false
+      })
+    })
+    .error(function (data, status, headers, config) {
+      console.log('Error %o %o', status, data.message)
       BootstrapDialog.show({
         closable: false,
         closeByBackdrop: false,
@@ -775,249 +777,249 @@ 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'
-              });
+              })
             }
           },
           {
             label: 'Cancel',
-            action: function(dialog) {
-              dialog.close();
-              $location.path('/');
+            action: function (dialog) {
+              dialog.close()
+              $location.path('/')
             }
           }
         ]
-      });
-    });
-  };
+      })
+    })
+  }
 
-  $scope.togglePermissions = function() {
-    var principal = $rootScope.ticket.principal;
-    $scope.isAnonymous = principal === 'anonymous' ? true : false;
+  $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('#selectWriters').select2({});
+        $scope.closePermissions()
+        angular.element('#selectOwners').select2({})
+        angular.element('#selectReaders').select2({})
+        angular.element('#selectWriters').select2({})
       } else {
-        $scope.openPermissions();
-        $scope.closeSetting();
+        $scope.openPermissions()
+        $scope.closeSetting()
       }
     }
-  };
+  }
 
-  $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() {
-    var 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) {
-          var 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)
           }
         }
-      });
+      })
     }
-  };
+  }
 
-  var isSettingDirty = function() {
+  const isSettingDirty = function () {
     if (angular.equals($scope.interpreterBindings, $scope.interpreterBindingsOrig)) {
-      return false;
+      return false
     } else {
-      return true;
+      return true
     }
-  };
+  }
 
-  var 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.$on functions below
    */
 
-  $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) {
-    var newIndex = -1;
-    for (var i = 0; i < $scope.note.paragraphs.length; i++) {
+  $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.
-    var 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) {
-    var newIndex = -1;
-    for (var i = 0; i < $scope.note.paragraphs.length; i++) {
+  $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.
-    var 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) {
-    var focus = false;
-    for (var i = $scope.note.paragraphs.length - 1; i >= 0; i--) {
+  $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) {
-    var focus = false;
-    for (var i = 0; i < $scope.note.paragraphs.length; i++) {
+  $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) {
-    var newIndex = -1;
-    for (var i = 0; i < $scope.note.paragraphs.length; i++) {
+  $scope.$on('insertParagraph', function (event, paragraphId, position) {
+    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
+        // 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;
-    }
-
-    initializeLookAndFeel();
-
-    //open interpreter binding setting when there're none selected
-    getInterpreterBindings();
-    getPermissions();
-    var isPersonalized = $scope.note.config.personalizedMode;
-    isPersonalized = isPersonalized === undefined ?  'false' : isPersonalized;
-    $scope.note.config.personalizedMode = isPersonalized;
-  });
-
-  $scope.$on('$destroy', function() {
-    angular.element(window).off('beforeunload');
-    $scope.killSaveTimer();
-    $scope.saveNote();
-
-    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);
-  });
+      $scope.note = cleanParagraphExcept($scope.paragraphUrl, $scope.note)
+      $scope.$broadcast('$unBindKeyEvent', $scope.$unBindKeyEvent)
+      $rootScope.$broadcast('setIframe', $scope.asIframe)
+      initializeLookAndFeel()
+      return
+    }
+
+    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('$destroy', function () {
+    angular.element(window).off('beforeunload')
+    $scope.killSaveTimer()
+    $scope.saveNote()
+
+    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)
+  })
 }

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/19b0f30f/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 6df6893..f393d2c 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'));
-
-  var scope;
-
-  var websocketMsgSrvMock = {
-    getNote: function() {},
-    listRevisionHistory: function() {},
-    getInterpreterBindings: function() {},
-    updateNote: function() {},
-    renameNote: function() {}
-  };
-
-  var baseUrlSrvMock = {
-    getRestApiBase: function() {
-      return 'http://localhost:8080';
+describe('Controller: NotebookCtrl', function () {
+  beforeEach(angular.mock.module('zeppelinWebApp'))
+
+  let scope
+
+  let websocketMsgSrvMock = {
+    getNote: function () {},
+    listRevisionHistory: function () {},
+    getInterpreterBindings: function () {},
+    updateNote: function () {},
+    renameNote: function () {}
+  }
+
+  let baseUrlSrvMock = {
+    getRestApiBase: function () {
+      return 'http://localhost:8080'
     }
-  };
+  }
 
-  var noteMock = {
+  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
-    });
-  }));
+    })
+  }))
 
-  beforeEach(function() {
-    scope.note = noteMock;
-  });
+  beforeEach(function () {
+    scope.note = noteMock
+  })
 
-  var functions = ['getCronOptionNameFromValue', 'removeNote', 'runAllParagraphs', 'saveNote', 'toggleAllEditor',
+  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() {
-    var none = scope.getCronOptionNameFromValue();
-    var oneMin = scope.getCronOptionNameFromValue('0 0/1 * * * ?');
-    var fiveMin = scope.getCronOptionNameFromValue('0 0/5 * * * ?');
-    var oneHour = scope.getCronOptionNameFromValue('0 0 0/1 * * ?');
-    var threeHours = scope.getCronOptionNameFromValue('0 0 0/3 * * ?');
-    var sixHours = scope.getCronOptionNameFromValue('0 0 0/6 * * ?');
-    var twelveHours =  scope.getCronOptionNameFromValue('0 0 0/12 * * ?');
-    var 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');
-    var 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)
+  })
+})