zeppelin-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From m...@apache.org
Subject [09/14] incubator-zeppelin git commit: Zeppelin-web Spring Cleaning
Date Thu, 02 Jul 2015 06:55:26 GMT
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/scripts/controllers/paragraph.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/scripts/controllers/paragraph.js b/zeppelin-web/app/scripts/controllers/paragraph.js
deleted file mode 100644
index 7cf211e..0000000
--- a/zeppelin-web/app/scripts/controllers/paragraph.js
+++ /dev/null
@@ -1,1620 +0,0 @@
-/* global $:false, jQuery:false, ace:false, confirm:false, d3:false, nv:false*/
-/*jshint loopfunc: true, unused:false */
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-'use strict';
-
-/**
- * @ngdoc function
- * @name zeppelinWebApp.controller:ParagraphCtrl
- * @description
- * # ParagraphCtrl
- * Controller of the paragraph, manage everything related to the paragraph
- *
- * @author anthonycorbacho
- */
-angular.module('zeppelinWebApp')
-        .controller('ParagraphCtrl', function($scope, $rootScope, $route, $window, $element, $routeParams, $location, $timeout, $compile) {
-
-  $scope.paragraph = null;
-  $scope.editor = null;
-  var editorMode = {scala: 'ace/mode/scala', sql: 'ace/mode/sql', markdown: 'ace/mode/markdown'};
-
-  // Controller init
-  $scope.init = function(newParagraph) {
-    $scope.paragraph = newParagraph;
-    $scope.chart = {};
-    $scope.colWidthOption = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ];
-    $scope.showTitleEditor = false;
-    $scope.paragraphFocused = false;
-
-    if (!$scope.paragraph.config) {
-      $scope.paragraph.config = {};
-    }
-
-    initializeDefault();
-
-    if (!$scope.lastData) {
-      $scope.lastData = {};
-    }
-
-    if ($scope.getResultType() === 'TABLE') {
-      $scope.lastData.settings = angular.copy($scope.paragraph.settings);
-      $scope.lastData.config = angular.copy($scope.paragraph.config);
-      $scope.loadTableData($scope.paragraph.result);
-      $scope.setGraphMode($scope.getGraphMode(), false, false);
-    } else if ($scope.getResultType() === 'HTML') {
-      $scope.renderHtml();
-    } else if ($scope.getResultType() === 'ANGULAR') {
-      $scope.renderAngular();
-    }
-  };
-
-  $scope.renderHtml = function() {
-    var retryRenderer = function() {
-      if ($('#p'+$scope.paragraph.id+'_html').length) {
-        try {
-          $('#p'+$scope.paragraph.id+'_html').html($scope.paragraph.result.msg);
-
-          $('#p'+$scope.paragraph.id+'_html').find('pre code').each(function(i, e) { hljs.highlightBlock(e) });
-        } catch(err) {
-          console.log('HTML rendering error %o', err);
-        }
-      } else {
-        $timeout(retryRenderer,10);
-      }
-    };
-    $timeout(retryRenderer);
-
-  };
-
-  $scope.renderAngular = function() {
-    var retryRenderer = function() {
-      if (angular.element('#p'+$scope.paragraph.id+'_angular').length) {
-        try {
-          angular.element('#p'+$scope.paragraph.id+'_angular').html($scope.paragraph.result.msg);
-
-          $compile(angular.element('#p'+$scope.paragraph.id+'_angular').contents())($rootScope.compiledScope);
-        } catch(err) {
-          console.log('ANGULAR rendering error %o', err);
-        }
-      } else {
-        $timeout(retryRenderer,10);
-      }
-    };
-    $timeout(retryRenderer);
-
-  };
-
-
-  var initializeDefault = function() {
-    var config = $scope.paragraph.config;
-
-    if (!config.colWidth) {
-      config.colWidth = 12;
-    }
-
-    if (!config.graph) {
-      config.graph = {};
-    }
-
-    if (!config.graph.mode) {
-      config.graph.mode = 'table';
-    }
-
-    if (!config.graph.height) {
-      config.graph.height = 300;
-    }
-
-    if (!config.graph.optionOpen) {
-      config.graph.optionOpen = false;
-    }
-
-    if (!config.graph.keys) {
-      config.graph.keys = [];
-    }
-
-    if (!config.graph.values) {
-      config.graph.values = [];
-    }
-
-    if (!config.graph.groups) {
-      config.graph.groups = [];
-    }
-
-    if (!config.graph.scatter) {
-      config.graph.scatter = {};
-    }
-  };
-
-  $scope.getIframeDimensions = function () {
-    if ($scope.asIframe) {
-      var paragraphid = '#' + $routeParams.paragraphId + '_container';
-      var height = $(paragraphid).height();
-      return height;
-    }
-    return 0;
-  };
-
-  $scope.$watch($scope.getIframeDimensions, function (newValue, oldValue) {
-    if ($scope.asIframe && newValue) {
-      var message = {};
-      message.height = newValue;
-      message.url = $location.$$absUrl;
-      $window.parent.postMessage(angular.toJson(message), '*');
-    }
-  });
-
-  // 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.status !== $scope.paragraph.status ||
-             data.paragraph.jobName !== $scope.paragraph.jobName ||
-             data.paragraph.title !== $scope.paragraph.title ||
-             data.paragraph.errorMessage !== $scope.paragraph.errorMessage ||
-             !angular.equals(data.paragraph.settings, $scope.lastData.settings) ||
-             !angular.equals(data.paragraph.config, $scope.lastData.config)
-         )
-       ) {
-      // store original data for comparison
-      $scope.lastData.settings = angular.copy(data.paragraph.settings);
-      $scope.lastData.config = angular.copy(data.paragraph.config);
-
-      var oldType = $scope.getResultType();
-      var newType = $scope.getResultType(data.paragraph);
-      var oldGraphMode = $scope.getGraphMode();
-      var newGraphMode = $scope.getGraphMode(data.paragraph);
-      var resultRefreshed = (data.paragraph.dateFinished !== $scope.paragraph.dateFinished);
-
-      //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;
-          } else { // if there're local update, keep it.
-            $scope.paragraph.text = $scope.dirtyText;
-          }
-        } else {
-          $scope.paragraph.text = data.paragraph.text;
-        }
-      }
-
-      /** push the rest */
-      $scope.paragraph.aborted = data.paragraph.aborted;
-      $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.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') {
-        $scope.renderHtml();
-      } else if (newType === 'ANGULAR') {
-        $scope.renderAngular();
-      }
-    }
-  });
-
-  $scope.isRunning = function() {
-    if ($scope.paragraph.status === 'RUNNING' || $scope.paragraph.status === 'PENDING') {
-      return true;
-    } else {
-      return false;
-    }
-  };
-
-  $scope.cancelParagraph = function() {
-    console.log('Cancel %o', $scope.paragraph.id);
-    var data = {op: 'CANCEL_PARAGRAPH', data: {id: $scope.paragraph.id }};
-    $rootScope.$emit('sendNewEvent', data);
-  };
-
-
-  $scope.runParagraph = function(data) {
-    var parapgraphData = {op: 'RUN_PARAGRAPH',
-                          data: {
-                              id: $scope.paragraph.id,
-                              title: $scope.paragraph.title,
-                              paragraph: data,
-                              config: $scope.paragraph.config,
-                              params: $scope.paragraph.settings.params
-                          }
-                         };
-    $rootScope.$emit('sendNewEvent', parapgraphData);
-  };
-
-  $scope.moveUp = function() {
-    $scope.$emit('moveParagraphUp', $scope.paragraph.id);
-  };
-
-  $scope.moveDown = function() {
-    $scope.$emit('moveParagraphDown', $scope.paragraph.id);
-  };
-
-  $scope.insertNew = function() {
-    $scope.$emit('insertParagraph', $scope.paragraph.id);
-  };
-
-  $scope.removeParagraph = function() {
-    var result = confirm('Do you want to delete this paragraph?');
-    if (result) {
-      console.log('Remove paragraph');
-      var paragraphData = {op: 'PARAGRAPH_REMOVE', data: {id: $scope.paragraph.id}};
-      $rootScope.$emit('sendNewEvent', paragraphData);
-    }
-  };
-
-  $scope.toggleEditor = function() {
-    if ($scope.paragraph.config.editorHide) {
-      $scope.openEditor();
-    } else {
-      $scope.closeEditor();
-    }
-  };
-
-  $scope.closeEditor = function() {
-    console.log('close the note');
-
-    var newParams = angular.copy($scope.paragraph.settings.params);
-    var newConfig = angular.copy($scope.paragraph.config);
-    newConfig.editorHide = true;
-
-    commitParagraph($scope.paragraph.title, $scope.paragraph.text, newConfig, newParams);
-  };
-
-  $scope.openEditor = function() {
-    console.log('open the note');
-
-    var newParams = angular.copy($scope.paragraph.settings.params);
-    var newConfig = angular.copy($scope.paragraph.config);
-    newConfig.editorHide = false;
-
-    commitParagraph($scope.paragraph.title, $scope.paragraph.text, newConfig, newParams);
-  };
-
-  $scope.closeTable = function() {
-    console.log('close the output');
-
-    var newParams = angular.copy($scope.paragraph.settings.params);
-    var newConfig = angular.copy($scope.paragraph.config);
-    newConfig.tableHide = true;
-
-    commitParagraph($scope.paragraph.title, $scope.paragraph.text, newConfig, newParams);
-  };
-
-  $scope.openTable = function() {
-    console.log('open the output');
-
-    var newParams = angular.copy($scope.paragraph.settings.params);
-    var newConfig = angular.copy($scope.paragraph.config);
-    newConfig.tableHide = false;
-
-    commitParagraph($scope.paragraph.title, $scope.paragraph.text, newConfig, newParams);
-  };
-
-  $scope.showTitle = function() {
-    var newParams = angular.copy($scope.paragraph.settings.params);
-    var newConfig = angular.copy($scope.paragraph.config);
-    newConfig.title = true;
-
-    commitParagraph($scope.paragraph.title, $scope.paragraph.text, newConfig, newParams);
-  };
-
-  $scope.hideTitle = function() {
-    var newParams = angular.copy($scope.paragraph.settings.params);
-    var newConfig = angular.copy($scope.paragraph.config);
-    newConfig.title = false;
-
-    commitParagraph($scope.paragraph.title, $scope.paragraph.text, newConfig, newParams);
-  };
-
-  $scope.setTitle = function() {
-    var newParams = angular.copy($scope.paragraph.settings.params);
-    var newConfig = angular.copy($scope.paragraph.config);
-    commitParagraph($scope.paragraph.title, $scope.paragraph.text, newConfig, newParams);
-  };
-
-  $scope.columnWidthClass = function(n) {
-    if ($scope.asIframe) {
-      return 'col-md-12';
-    } else {
-      return 'col-md-' + n;
-    }
-  };
-
-  $scope.changeColWidth = function() {
-
-    var newParams = angular.copy($scope.paragraph.settings.params);
-    var newConfig = angular.copy($scope.paragraph.config);
-
-    commitParagraph($scope.paragraph.title, $scope.paragraph.text, newConfig, newParams);
-  };
-
-  $scope.toggleGraphOption = function() {
-    var newConfig = angular.copy($scope.paragraph.config);
-    if (newConfig.graph.optionOpen) {
-      newConfig.graph.optionOpen = false;
-    } else {
-      newConfig.graph.optionOpen = true;
-    }
-    var newParams = angular.copy($scope.paragraph.settings.params);
-
-    commitParagraph($scope.paragraph.title, $scope.paragraph.text, newConfig, newParams);
-  };
-
-  $scope.toggleOutput = function() {
-    var newConfig = angular.copy($scope.paragraph.config);
-    newConfig.tableHide = !newConfig.tableHide;
-    var newParams = angular.copy($scope.paragraph.settings.params);
-
-    commitParagraph($scope.paragraph.title, $scope.paragraph.text, newConfig, newParams);
-  };
-
-
-  $scope.loadForm = function(formulaire, params) {
-    var value = formulaire.defaultValue;
-    if (params[formulaire.name]) {
-      value = params[formulaire.name];
-    }
-
-    if (value === '') {
-      value = formulaire.options[0].value;
-    }
-
-    $scope.paragraph.settings.params[formulaire.name] = value;
-  };
-
-  $scope.aceChanged = function() {
-    $scope.dirtyText = $scope.editor.getSession().getValue();
-  };
-
-  $scope.aceLoaded = function(_editor) {
-    var langTools = ace.require('ace/ext/language_tools');
-    var Range = ace.require('ace/range').Range;
-
-    $scope.editor = _editor;
-    if (_editor.container.id !== '{{paragraph.id}}_editor') {
-      $scope.editor.renderer.setShowGutter(false);
-      $scope.editor.setHighlightActiveLine(false);
-      $scope.editor.setTheme('ace/theme/github');
-      $scope.editor.focus();
-      var hight = $scope.editor.getSession().getScreenLength() * $scope.editor.renderer.lineHeight + $scope.editor.renderer.scrollBar.getWidth();
-      setEditorHeight(_editor.container.id, hight);
-
-      $scope.editor.getSession().setUseWrapMode(true);
-      if (navigator.appVersion.indexOf('Mac') !== -1 ) {
-        $scope.editor.setKeyboardHandler('ace/keyboard/emacs');
-      } else if (navigator.appVersion.indexOf('Win') !== -1 ||
-                 navigator.appVersion.indexOf('X11') !== -1 ||
-                 navigator.appVersion.indexOf('Linux') !== -1) {
-        // not applying emacs key binding while the binding override Ctrl-v. default behavior of paste text on windows.
-      }
-
-      $scope.editor.setOptions({
-          enableBasicAutocompletion: true,
-          enableSnippets: false,
-          enableLiveAutocompletion:false
-      });
-      var remoteCompleter = {
-          getCompletions : function(editor, session, pos, prefix, callback) {
-              if (!$scope.editor.isFocused() ){ return;}
-
-              var pos = session.getTextRange(new Range(0, 0, pos.row, pos.column)).length;
-              var buf = session.getValue();
-              $rootScope.$emit('sendNewEvent', {
-                  op : 'COMPLETION',
-                  data : {
-                      id : $scope.paragraph.id,
-                      buf : buf,
-                      cursor : pos
-                  }
-              });
-
-              $scope.$on('completionList', function(event, data) {
-                  if (data.completions) {
-                      var completions = [];
-                      for (var c in data.completions) {
-                          var v = data.completions[c];
-                          completions.push({
-                              name:v,
-                              value:v,
-                              score:300
-                          });
-                      }
-                      callback(null, completions);
-                  }
-              });
-          }
-      };
-      langTools.addCompleter(remoteCompleter);
-
-
-      $scope.handleFocus = function(value) {
-        $scope.paragraphFocused = value;
-        // Protect against error in case digest is already running
-        $timeout(function() {
-          // Apply changes since they come from 3rd party library
-          $scope.$digest();
-        });
-      };
-
-      $scope.editor.on('focus', function() {
-        $scope.handleFocus(true);
-      });
-
-      $scope.editor.on('blur', function() {
-        $scope.handleFocus(false);
-      });
-
-
-      $scope.editor.getSession().on('change', function(e, editSession) {
-        hight = editSession.getScreenLength() * $scope.editor.renderer.lineHeight + $scope.editor.renderer.scrollBar.getWidth();
-        setEditorHeight(_editor.container.id, hight);
-        $scope.editor.resize();
-      });
-
-      var code = $scope.editor.getSession().getValue();
-      if ( String(code).startsWith('%sql')) {
-        $scope.editor.getSession().setMode(editorMode.sql);
-      } else if ( String(code).startsWith('%md')) {
-        $scope.editor.getSession().setMode(editorMode.markdown);
-      } else {
-        $scope.editor.getSession().setMode(editorMode.scala);
-      }
-
-      $scope.editor.commands.addCommand({
-        name: 'run',
-        bindKey: {win: 'Shift-Enter', mac: 'Shift-Enter'},
-        exec: function(editor) {
-          var editorValue = editor.getValue();
-          if (editorValue) {
-            $scope.runParagraph(editorValue);
-          }
-        },
-        readOnly: false
-      });
-
-      // autocomplete on '.'
-      /*
-      $scope.editor.commands.on("afterExec", function(e, t) {
-        if (e.command.name == "insertstring" && e.args == "." ) {
-      var all = e.editor.completers;
-      //e.editor.completers = [remoteCompleter];
-      e.editor.execCommand("startAutocomplete");
-      //e.editor.completers = all;
-    }
-      });
-      */
-
-      // autocomplete on 'ctrl+.'
-      $scope.editor.commands.bindKey('ctrl-.', 'startAutocomplete');
-      $scope.editor.commands.bindKey('ctrl-space', null);
-
-      // handle cursor moves
-      $scope.editor.keyBinding.origOnCommandKey = $scope.editor.keyBinding.onCommandKey;
-      $scope.editor.keyBinding.onCommandKey = function(e, hashId, keyCode) {
-        if ($scope.editor.completer && $scope.editor.completer.activated) { // if autocompleter is active
-        } else {
-            var numRows;
-            var currentRow;
-            if (keyCode === 38 || (keyCode === 80 && e.ctrlKey)) {  // UP
-                numRows = $scope.editor.getSession().getLength();
-                currentRow = $scope.editor.getCursorPosition().row;
-                if (currentRow === 0) {
-                    // move focus to previous paragraph
-                    $scope.$emit('moveFocusToPreviousParagraph', $scope.paragraph.id);
-                }
-            } else if (keyCode === 40 || (keyCode === 78 && e.ctrlKey)) {  // DOWN
-                numRows = $scope.editor.getSession().getLength();
-                currentRow = $scope.editor.getCursorPosition().row;
-                if (currentRow === numRows-1) {
-                    // move focus to next paragraph
-                    $scope.$emit('moveFocusToNextParagraph', $scope.paragraph.id);
-                }
-            }
-        }
-        this.origOnCommandKey(e, hashId, keyCode);
-      };
-    }
-  };
-
-  var setEditorHeight = function(id, height) {
-    $('#' + id).height(height.toString() + 'px');
-  };
-
-  $scope.getEditorValue = function() {
-    return $scope.editor.getValue();
-  };
-
-  $scope.getProgress = function() {
-    return ($scope.currentProgress) ? $scope.currentProgress : 0;
-  };
-
-  $scope.getExecutionTime = function() {
-    var pdata = $scope.paragraph;
-    var timeMs = Date.parse(pdata.dateFinished) - Date.parse(pdata.dateStarted);
-    if (isNaN(timeMs) || timeMs < 0) {
-      return '&nbsp;';
-    }
-    return 'Took ' + (timeMs/1000) + ' seconds';
-  };
-
-  $scope.$on('updateProgress', function(event, data) {
-    if (data.id === $scope.paragraph.id) {
-      $scope.currentProgress = data.progress;
-    }
-  });
-
-  $scope.$on('focusParagraph', function(event, paragraphId) {
-    if ($scope.paragraph.id === paragraphId) {
-      $scope.editor.focus();
-      $('body').scrollTo('#'+paragraphId+'_editor', 300, {offset:-60});
-    }
-  });
-
-  $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.getGraphMode = function(paragraph) {
-    var pdata = (paragraph) ? paragraph : $scope.paragraph;
-    if (pdata.config.graph && pdata.config.graph.mode) {
-      return pdata.config.graph.mode;
-    } else {
-      return 'table';
-    }
-  };
-
-  $scope.loadTableData = function(result) {
-    if (!result) {
-      return;
-    }
-    if (result.type === 'TABLE') {
-      var columnNames = [];
-      var rows = [];
-      var array = [];
-      var textRows = result.msg.split('\n');
-      result.comment = '';
-      var comment = false;
-
-      for (var i = 0; i < textRows.length; i++) {
-        var textRow = textRows[i];
-        if (comment) {
-          result.comment += textRow;
-          continue;
-        }
-
-        if (textRow === '') {
-          if (rows.length>0) {
-            comment = true;
-          }
-          continue;
-        }
-        var textCols = textRow.split('\t');
-        var cols = [];
-        var cols2 = [];
-        for (var j = 0; j < textCols.length; j++) {
-          var col = textCols[j];
-          if (i === 0) {
-            columnNames.push({name:col, index:j, aggr:'sum'});
-          } else {
-            cols.push(col);
-            cols2.push({key: (columnNames[i]) ? columnNames[i].name: undefined, value: col});
-          }
-        }
-        if (i !== 0) {
-          rows.push(cols);
-          array.push(cols2);
-        }
-      }
-      result.msgTable = array;
-      result.columnNames = columnNames;
-      result.rows = rows;
-    }
-  };
-
-  $scope.setGraphMode = function(type, emit, refresh) {
-    if (emit) {
-      setNewMode(type);
-    } else {
-      clearUnknownColsFromGraphOption();
-      // set graph height
-      var height = $scope.paragraph.config.graph.height;
-      $('#p'+$scope.paragraph.id+'_graph').height(height);
-
-      if (!type || type === 'table') {
-        setTable($scope.paragraph.result, refresh);
-      }
-      else {
-        setD3Chart(type, $scope.paragraph.result, refresh);
-      }
-    }
-  };
-
-  var setNewMode = function(newMode) {
-    var newConfig = angular.copy($scope.paragraph.config);
-    var newParams = angular.copy($scope.paragraph.settings.params);
-
-    // graph options
-    newConfig.graph.mode = newMode;
-
-    commitParagraph($scope.paragraph.title, $scope.paragraph.text, newConfig, newParams);
-  };
-
-  var commitParagraph = function(title, text, config, params) {
-    var parapgraphData = {
-      op: 'COMMIT_PARAGRAPH',
-      data: {
-        id: $scope.paragraph.id,
-        title : title,
-        paragraph: text,
-        params: params,
-        config: config
-      }};
-    $rootScope.$emit('sendNewEvent', parapgraphData);
-  };
-
-  var setTable = function(type, data, refresh) {
-    var getTableContentFormat = function(d) {
-      if (isNaN(d)) {
-        if (d.length>'%html'.length && '%html ' === d.substring(0, '%html '.length)) {
-          return 'html';
-        } else {
-          return '';
-        }
-      } else {
-        return '';
-      }
-    };
-
-    var formatTableContent = function(d) {
-      if (isNaN(d)) {
-        var f = getTableContentFormat(d);
-        if (f !== '') {
-          return d.substring(f.length+2);
-        } else {
-          return d;
-        }
-      } else {
-        var dStr = d.toString();
-        var splitted = dStr.split('.');
-        var formatted = splitted[0].replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
-        if (splitted.length>1) {
-          formatted+= '.'+splitted[1];
-        }
-        return formatted;
-      }
-    };
-
-
-    var renderTable = function() {
-      var html = '';
-      html += '<table class="table table-hover table-condensed">';
-      html += '  <thead>';
-      html += '    <tr style="background-color: #F6F6F6; font-weight: bold;">';
-      for (var c in $scope.paragraph.result.columnNames) {
-        html += '<th>'+$scope.paragraph.result.columnNames[c].name+'</th>';
-      }
-      html += '    </tr>';
-      html += '  </thead>';
-
-      for (var r in $scope.paragraph.result.msgTable) {
-        var row = $scope.paragraph.result.msgTable[r];
-        html += '    <tr>';
-        for (var index in row) {
-          var v = row[index].value;
-          if (getTableContentFormat(v) !== 'html') {
-            v = v.replace(/[\u00A0-\u9999<>\&]/gim, function(i) {
-                return '&#'+i.charCodeAt(0)+';';
-            });
-          }
-          html += '      <td>'+formatTableContent(v)+'</td>';
-        }
-        html += '    </tr>';
-      }
-
-      html += '</table>';
-
-      $('#p' + $scope.paragraph.id + '_table').html(html);
-      $('#p' + $scope.paragraph.id + '_table').perfectScrollbar();
-
-      // set table height
-      var height = $scope.paragraph.config.graph.height;
-      $('#p'+$scope.paragraph.id+'_table').height(height);
-    };
-
-    var retryRenderer = function() {
-      if ($('#p'+$scope.paragraph.id+'_table').length) {
-        try {
-          renderTable();
-        } catch(err) {
-          console.log('Chart drawing error %o', err);
-        }
-      } else {
-        $timeout(retryRenderer,10);
-      }
-    };
-    $timeout(retryRenderer);
-
-  };
-
-  var setD3Chart = function(type, data, refresh) {
-    if (!$scope.chart[type]) {
-      var chart = nv.models[type]();
-      $scope.chart[type] = chart;
-    }
-
-    var d3g = [];
-
-    if (type === 'scatterChart') {
-      var scatterData = setScatterChart(data, refresh);
-
-      var xLabels = scatterData.xLabels;
-      var yLabels = scatterData.yLabels;
-      d3g = scatterData.d3g;
-
-      $scope.chart[type].xAxis.tickFormat(function(d) {
-        if (xLabels[d] && (isNaN(parseFloat(xLabels[d])) || !isFinite(xLabels[d]))) {
-          return xLabels[d];
-        } else {
-          return d;
-        }
-      });
-
-      $scope.chart[type].yAxis.tickFormat(function(d) {
-        if (yLabels[d] && (isNaN(parseFloat(yLabels[d])) || !isFinite(yLabels[d]))) {
-          return yLabels[d];
-        } else {
-          return d;
-        }
-      });
-
-      // configure how the tooltip looks.
-      $scope.chart[type].tooltipContent(function(key, x, y, data) {
-        var tooltipContent = '<h3>' + key + '</h3>';
-        if ($scope.paragraph.config.graph.scatter.size &&
-            $scope.isValidSizeOption($scope.paragraph.config.graph.scatter, $scope.paragraph.result.rows)) {
-              tooltipContent += '<p>' + data.point.size + '</p>';
-        }
-
-        return tooltipContent;
-      });
-
-      $scope.chart[type].showDistX(true)
-                        .showDistY(true)
-                        //handle the problem of tooltip not showing when muliple points have same value.
-                        .scatter.useVoronoi(false);
-    } else {
-      var p = pivot(data);
-      if (type === 'pieChart') {
-        var d = pivotDataToD3ChartFormat(p, true).d3g;
-
-        $scope.chart[type].x(function(d) { return d.label;})
-                          .y(function(d) { return d.value;});
-
-        if ( d.length > 0 ) {
-          for ( var i=0; i<d[0].values.length ; i++) {
-            var e = d[0].values[i];
-            d3g.push({
-              label : e.x,
-              value : e.y
-            });
-          }
-        }
-      } else if (type === 'multiBarChart') {
-        d3g = pivotDataToD3ChartFormat(p, true, false, type).d3g;
-        $scope.chart[type].yAxis.axisLabelDistance(50);
-      } else if (type === 'lineChart' || type === 'stackedAreaChart') {
-        var pivotdata = pivotDataToD3ChartFormat(p, false, true);
-        var xLabels = pivotdata.xLabels;
-        d3g = pivotdata.d3g;
-        $scope.chart[type].xAxis.tickFormat(function(d) {
-          if (xLabels[d] && (isNaN(parseFloat(xLabels[d])) || !isFinite(xLabels[d]))) { // to handle string type xlabel
-            return xLabels[d];
-          } else {
-            return d;
-          }
-        });
-        $scope.chart[type].yAxis.axisLabelDistance(50);
-        $scope.chart[type].useInteractiveGuideline(true); // for better UX and performance issue. (https://github.com/novus/nvd3/issues/691)
-        $scope.chart[type].forceY([0]); // force y-axis minimum to 0 for line chart.
-      }
-    }
-
-    var renderChart = function() {
-      if (!refresh) {
-        // TODO force destroy previous chart
-      }
-
-      var height = $scope.paragraph.config.graph.height;
-
-      var animationDuration = 300;
-      var numberOfDataThreshold = 150;
-      // turn off animation when dataset is too large. (for performance issue)
-      // still, since dataset is large, the chart content sequentially appears like animated.
-      try {
-        if (d3g[0].values.length > numberOfDataThreshold) {
-          animationDuration = 0;
-        }
-      } catch(ignoreErr) {
-      }
-
-      var chartEl = d3.select('#p'+$scope.paragraph.id+'_'+type+' svg')
-          .attr('height', $scope.paragraph.config.graph.height)
-          .style('height', height + 'px')
-          .datum(d3g)
-          .transition()
-          .duration(animationDuration)
-          .call($scope.chart[type]);
-      nv.utils.windowResize($scope.chart[type].update);
-    };
-
-    var retryRenderer = function() {
-      if ($('#p'+$scope.paragraph.id+'_'+type+' svg').length !== 0) {
-        try {
-          renderChart();
-        } catch(err) {
-          console.log('Chart drawing error %o', err);
-        }
-      } else {
-        $timeout(retryRenderer,10);
-      }
-    };
-    $timeout(retryRenderer);
-  };
-
-  $scope.isGraphMode = function(graphName) {
-    if ($scope.getResultType() === 'TABLE' && $scope.getGraphMode()===graphName) {
-      return true;
-    } else {
-      return false;
-    }
-  };
-
-
-  $scope.onGraphOptionChange = function() {
-    clearUnknownColsFromGraphOption();
-    $scope.setGraphMode($scope.paragraph.config.graph.mode, true, false);
-  };
-
-  $scope.removeGraphOptionKeys = function(idx) {
-    $scope.paragraph.config.graph.keys.splice(idx, 1);
-    clearUnknownColsFromGraphOption();
-    $scope.setGraphMode($scope.paragraph.config.graph.mode, true, false);
-  };
-
-  $scope.removeGraphOptionValues = function(idx) {
-    $scope.paragraph.config.graph.values.splice(idx, 1);
-    clearUnknownColsFromGraphOption();
-    $scope.setGraphMode($scope.paragraph.config.graph.mode, true, false);
-  };
-
-  $scope.removeGraphOptionGroups = function(idx) {
-    $scope.paragraph.config.graph.groups.splice(idx, 1);
-    clearUnknownColsFromGraphOption();
-    $scope.setGraphMode($scope.paragraph.config.graph.mode, true, false);
-  };
-
-  $scope.setGraphOptionValueAggr = function(idx, aggr) {
-    $scope.paragraph.config.graph.values[idx].aggr = aggr;
-    clearUnknownColsFromGraphOption();
-    $scope.setGraphMode($scope.paragraph.config.graph.mode, true, false);
-  };
-
-  $scope.removeScatterOptionXaxis = function(idx) {
-    $scope.paragraph.config.graph.scatter.xAxis = null;
-    clearUnknownColsFromGraphOption();
-    $scope.setGraphMode($scope.paragraph.config.graph.mode, true, false);
-  };
-
-  $scope.removeScatterOptionYaxis = function(idx) {
-    $scope.paragraph.config.graph.scatter.yAxis = null;
-    clearUnknownColsFromGraphOption();
-    $scope.setGraphMode($scope.paragraph.config.graph.mode, true, false);
-  };
-
-  $scope.removeScatterOptionGroup = function(idx) {
-    $scope.paragraph.config.graph.scatter.group = null;
-    clearUnknownColsFromGraphOption();
-    $scope.setGraphMode($scope.paragraph.config.graph.mode, true, false);
-  };
-
-  $scope.removeScatterOptionSize = function(idx) {
-    $scope.paragraph.config.graph.scatter.size = null;
-    clearUnknownColsFromGraphOption();
-    $scope.setGraphMode($scope.paragraph.config.graph.mode, true, false);
-  };
-
-  /* Clear unknown columns from graph option */
-  var clearUnknownColsFromGraphOption = function() {
-    var unique = function(list) {
-      for (var i = 0; i<list.length; i++) {
-        for (var j=i+1; j<list.length; j++) {
-          if (angular.equals(list[i], list[j])) {
-            list.splice(j, 1);
-          }
-        }
-      }
-    };
-
-    var removeUnknown = function(list) {
-      for (var i = 0; i<list.length; i++) {
-        // remove non existing column
-        var found = false;
-        for (var j=0; j<$scope.paragraph.result.columnNames.length; j++) {
-          var a = list[i];
-          var b = $scope.paragraph.result.columnNames[j];
-          if (a.index === b.index && a.name === b.name) {
-            found = true;
-            break;
-          }
-        }
-        if (!found) {
-          list.splice(i, 1);
-        }
-      }
-    };
-
-    var removeUnknownFromScatterSetting = function(fields) {
-      for (var f in fields) {
-        if (fields[f]) {
-          var found = false;
-          for (var i = 0; i < $scope.paragraph.result.columnNames.length; i++) {
-            var a = fields[f];
-            var b = $scope.paragraph.result.columnNames[i];
-            if (a.index === b.index && a.name === b.name) {
-              found = true;
-              break;
-            }
-          }
-          if (!found) {
-            fields[f] = null;
-          }
-        }
-      }
-    };
-
-    unique($scope.paragraph.config.graph.keys);
-    removeUnknown($scope.paragraph.config.graph.keys);
-
-    removeUnknown($scope.paragraph.config.graph.values);
-
-    unique($scope.paragraph.config.graph.groups);
-    removeUnknown($scope.paragraph.config.graph.groups);
-
-    removeUnknownFromScatterSetting($scope.paragraph.config.graph.scatter);
-  };
-
-  /* select default key and value if there're none selected */
-  var selectDefaultColsForGraphOption = function() {
-    if ($scope.paragraph.config.graph.keys.length === 0 && $scope.paragraph.result.columnNames.length > 0) {
-      $scope.paragraph.config.graph.keys.push($scope.paragraph.result.columnNames[0]);
-    }
-
-    if ($scope.paragraph.config.graph.values.length === 0 && $scope.paragraph.result.columnNames.length > 1) {
-      $scope.paragraph.config.graph.values.push($scope.paragraph.result.columnNames[1]);
-    }
-
-    if (!$scope.paragraph.config.graph.scatter.xAxis && !$scope.paragraph.config.graph.scatter.yAxis) {
-      if ($scope.paragraph.result.columnNames.length > 1) {
-        $scope.paragraph.config.graph.scatter.xAxis = $scope.paragraph.result.columnNames[0];
-        $scope.paragraph.config.graph.scatter.yAxis = $scope.paragraph.result.columnNames[1];
-      } else if ($scope.paragraph.result.columnNames.length === 1) {
-        $scope.paragraph.config.graph.scatter.xAxis = $scope.paragraph.result.columnNames[0];
-      }
-    }
-  };
-
-  var pivot = function(data) {
-    var keys = $scope.paragraph.config.graph.keys;
-    var groups = $scope.paragraph.config.graph.groups;
-    var values = $scope.paragraph.config.graph.values;
-
-    var aggrFunc = {
-      sum : function(a,b) {
-        var varA = (a !== undefined) ? (isNaN(a) ? 1 : parseFloat(a)) : 0;
-        var varB = (b !== undefined) ? (isNaN(b) ? 1 : parseFloat(b)) : 0;
-        return varA+varB;
-      },
-      count : function(a,b) {
-        var varA = (a !== undefined) ? parseInt(a) : 0;
-        var varB = (b !== undefined) ? 1 : 0;
-        return varA+varB;
-      },
-      min : function(a,b) {
-        var varA = (a !== undefined) ? (isNaN(a) ? 1 : parseFloat(a)) : 0;
-        var varB = (b !== undefined) ? (isNaN(b) ? 1 : parseFloat(b)) : 0;
-        return Math.min(varA,varB);
-      },
-      max : function(a,b) {
-        var varA = (a !== undefined) ? (isNaN(a) ? 1 : parseFloat(a)) : 0;
-        var varB = (b !== undefined) ? (isNaN(b) ? 1 : parseFloat(b)) : 0;
-        return Math.max(varA,varB);
-      },
-      avg : function(a,b,c) {
-        var varA = (a !== undefined) ? (isNaN(a) ? 1 : parseFloat(a)) : 0;
-        var varB = (b !== undefined) ? (isNaN(b) ? 1 : parseFloat(b)) : 0;
-        return varA+varB;
-      }
-    };
-
-    var aggrFuncDiv = {
-      sum : false,
-      count : false,
-      min : false,
-      max : false,
-      avg : true
-    };
-
-    var schema = {};
-    var rows = {};
-
-    for (var i=0; i < data.rows.length; i++) {
-      var row = data.rows[i];
-      var newRow = {};
-      var s = schema;
-      var p = rows;
-
-      for (var k=0; k < keys.length; k++) {
-        var key = keys[k];
-
-        // add key to schema
-        if (!s[key.name]) {
-          s[key.name] = {
-             order : k,
-             index : key.index,
-             type : 'key',
-             children : {}
-          };
-        }
-        s = s[key.name].children;
-
-        // add key to row
-        var keyKey = row[key.index];
-        if (!p[keyKey]) {
-          p[keyKey] = {};
-        }
-        p = p[keyKey];
-      }
-
-      for (var g=0; g < groups.length; g++) {
-        var group = groups[g];
-        var groupKey = row[group.index];
-
-        // add group to schema
-        if (!s[groupKey]) {
-          s[groupKey] = {
-             order : g,
-             index : group.index,
-             type : 'group',
-             children : {}
-          };
-        }
-        s = s[groupKey].children;
-
-        // add key to row
-        if (!p[groupKey]) {
-          p[groupKey] = {};
-        }
-        p = p[groupKey];
-      }
-
-      for (var v=0; v < values.length; v++) {
-        var value = values[v];
-        var valueKey = value.name+'('+value.aggr+')';
-
-        // add value to schema
-        if (!s[valueKey]) {
-          s[valueKey] = {
-            type : 'value',
-            order : v,
-            index : value.index
-          };
-        }
-
-        // add value to row
-        if (!p[valueKey]) {
-          p[valueKey] = {
-              value : (value.aggr !== 'count') ? row[value.index] : 1,
-              count: 1
-          };
-        } else {
-          p[valueKey] = {
-              value : aggrFunc[value.aggr](p[valueKey].value, row[value.index], p[valueKey].count+1),
-              count : (aggrFuncDiv[value.aggr]) ?  p[valueKey].count+1 : p[valueKey].count
-          };
-        }
-      }
-    }
-
-    //console.log("schema=%o, rows=%o", schema, rows);
-
-    return {
-      schema : schema,
-      rows : rows
-    };
-  };
-
-  var pivotDataToD3ChartFormat = function(data, allowTextXAxis, fillMissingValues, chartType) {
-    // construct d3 data
-    var d3g = [];
-
-    var schema = data.schema;
-    var rows = data.rows;
-    var values = $scope.paragraph.config.graph.values;
-
-    var concat = function(o, n) {
-      if (!o) {
-        return n;
-      } else {
-        return o+'.'+n;
-      }
-    };
-
-    var getSchemaUnderKey = function(key, s) {
-      for (var c in key.children) {
-        s[c] = {};
-        getSchemaUnderKey(key.children[c], s[c]);
-      }
-    };
-
-    var traverse = function(sKey, s, rKey, r, func, rowName, rowValue, colName) {
-      //console.log("TRAVERSE sKey=%o, s=%o, rKey=%o, r=%o, rowName=%o, rowValue=%o, colName=%o", sKey, s, rKey, r, rowName, rowValue, colName);
-
-      if (s.type==='key') {
-        rowName = concat(rowName, sKey);
-        rowValue = concat(rowValue, rKey);
-      } else if (s.type==='group') {
-        colName = concat(colName, rKey);
-      } else if (s.type==='value' && sKey===rKey || valueOnly) {
-        colName = concat(colName, rKey);
-        func(rowName, rowValue, colName, r);
-      }
-
-      for (var c in s.children) {
-        if (fillMissingValues && s.children[c].type === 'group' && r[c] === undefined) {
-          var cs = {};
-          getSchemaUnderKey(s.children[c], cs);
-          traverse(c, s.children[c], c, cs, func, rowName, rowValue, colName);
-          continue;
-        }
-
-        for (var j in r) {
-          if (s.children[c].type === 'key' || c === j) {
-            traverse(c, s.children[c], j, r[j], func, rowName, rowValue, colName);
-          }
-        }
-      }
-    };
-
-    var keys = $scope.paragraph.config.graph.keys;
-    var groups = $scope.paragraph.config.graph.groups;
-    var values = $scope.paragraph.config.graph.values;
-    var valueOnly = (keys.length === 0 && groups.length === 0 && values.length > 0);
-    var noKey = (keys.length === 0);
-    var isMultiBarChart = (chartType === 'multiBarChart');
-
-    var sKey = Object.keys(schema)[0];
-
-    var rowNameIndex = {};
-    var rowIdx = 0;
-    var colNameIndex = {};
-    var colIdx = 0;
-    var rowIndexValue = {};
-
-    for (var k in rows) {
-      traverse(sKey, schema[sKey], k, rows[k], function(rowName, rowValue, colName, value) {
-        //console.log("RowName=%o, row=%o, col=%o, value=%o", rowName, rowValue, colName, value);
-        if (rowNameIndex[rowValue] === undefined) {
-          rowIndexValue[rowIdx] = rowValue;
-          rowNameIndex[rowValue] = rowIdx++;
-        }
-
-        if (colNameIndex[colName] === undefined) {
-          colNameIndex[colName] = colIdx++;
-        }
-        var i = colNameIndex[colName];
-        if (noKey && isMultiBarChart) {
-          i = 0;
-        }
-
-        if (!d3g[i]) {
-          d3g[i] = {
-            values : [],
-            key : (noKey && isMultiBarChart) ? 'values' : colName
-          };
-        }
-
-        var xVar = isNaN(rowValue) ? ((allowTextXAxis) ? rowValue : rowNameIndex[rowValue]) : parseFloat(rowValue);
-        var yVar = 0;
-        if (xVar === undefined) { xVar = colName; }
-        if (value !== undefined) {
-          yVar = isNaN(value.value) ? 0 : parseFloat(value.value) / parseFloat(value.count);
-        }
-        d3g[i].values.push({
-          x : xVar,
-          y : yVar
-        });
-      });
-    }
-
-    // clear aggregation name, if possible
-    var namesWithoutAggr = {};
-    // TODO - This part could use som refactoring - Weird if/else with similar actions and variable names
-    for (var colName in colNameIndex) {
-      var withoutAggr = colName.substring(0, colName.lastIndexOf('('));
-      if (!namesWithoutAggr[withoutAggr]) {
-        namesWithoutAggr[withoutAggr] = 1;
-      } else {
-        namesWithoutAggr[withoutAggr]++;
-      }
-    }
-
-    if (valueOnly) {
-      for (var valueIndex = 0; valueIndex < d3g[0].values.length; valueIndex++) {
-        var colName = d3g[0].values[valueIndex].x;
-        if (!colName) {
-          continue;
-        }
-
-        var withoutAggr = colName.substring(0, colName.lastIndexOf('('));
-        if (namesWithoutAggr[withoutAggr] <= 1 ) {
-          d3g[0].values[valueIndex].x = withoutAggr;
-        }
-      }
-    } else {
-      for (var d3gIndex = 0; d3gIndex < d3g.length; d3gIndex++) {
-        var colName = d3g[d3gIndex].key;
-        var withoutAggr = colName.substring(0, colName.lastIndexOf('('));
-        if (namesWithoutAggr[withoutAggr] <= 1 ) {
-          d3g[d3gIndex].key = withoutAggr;
-        }
-      }
-
-      // use group name instead of group.value as a column name, if there're only one group and one value selected.
-      if (groups.length === 1 && values.length === 1) {
-        for (d3gIndex = 0; d3gIndex < d3g.length; d3gIndex++) {
-          var colName = d3g[d3gIndex].key;
-          colName = colName.substring(0, colName.lastIndexOf("."));
-          d3g[d3gIndex].key = colName;
-        }
-      }
-
-    }
-
-    return {
-      xLabels : rowIndexValue,
-      d3g : d3g
-    };
-  };
-
-
-  var setDiscreteScatterData = function(data) {
-    var xAxis = $scope.paragraph.config.graph.scatter.xAxis;
-    var yAxis = $scope.paragraph.config.graph.scatter.yAxis;
-    var group = $scope.paragraph.config.graph.scatter.group;
-
-    var xValue;
-    var yValue;
-    var grp;
-
-    var rows = {};
-
-    for (var i = 0; i < data.rows.length; i++) {
-      var row = data.rows[i];
-      if (xAxis) {
-        xValue = row[xAxis.index];
-      }
-      if (yAxis) {
-        yValue = row[yAxis.index];
-      }
-      if (group) {
-        grp = row[group.index];
-      }
-
-      var key = xValue + ',' + yValue +  ',' + grp;
-
-      if(!rows[key]) {
-        rows[key] = {
-            x : xValue,
-            y : yValue,
-            group : grp,
-            size : 1
-        };
-      } else {
-        rows[key].size++;
-      }
-    }
-
-    // change object into array
-    var newRows = [];
-    for(var r in rows){
-      var newRow = [];
-      if (xAxis) { newRow[xAxis.index] = rows[r].x; }
-      if (yAxis) { newRow[yAxis.index] = rows[r].y; }
-      if (group) { newRow[group.index] = rows[r].group; }
-      newRow[data.rows[0].length] = rows[r].size;
-      newRows.push(newRow);
-    }
-    return newRows;
-  };
-
-  var setScatterChart = function(data, refresh) {
-    var xAxis = $scope.paragraph.config.graph.scatter.xAxis;
-    var yAxis = $scope.paragraph.config.graph.scatter.yAxis;
-    var group = $scope.paragraph.config.graph.scatter.group;
-    var size = $scope.paragraph.config.graph.scatter.size;
-
-    var xValues = [];
-    var yValues = [];
-    var rows = {};
-    var d3g = [];
-
-    var rowNameIndex = {};
-    var colNameIndex = {};
-    var grpNameIndex = {};
-    var rowIndexValue = {};
-    var colIndexValue = {};
-    var grpIndexValue = {};
-    var rowIdx = 0;
-    var colIdx = 0;
-    var grpIdx = 0;
-    var grpName = '';
-
-    var xValue;
-    var yValue;
-    var row;
-
-    if (!xAxis && !yAxis) {
-      return {
-        d3g : []
-      };
-    }
-
-    for (var i = 0; i < data.rows.length; i++) {
-      row = data.rows[i];
-      if (xAxis) {
-        xValue = row[xAxis.index];
-        xValues[i] = xValue;
-      }
-      if (yAxis) {
-        yValue = row[yAxis.index];
-        yValues[i] = yValue;
-      }
-    }
-
-    var isAllDiscrete = ((xAxis && yAxis && isDiscrete(xValues) && isDiscrete(yValues)) ||
-                         (!xAxis && isDiscrete(yValues)) ||
-                         (!yAxis && isDiscrete(xValues)));
-
-    if (isAllDiscrete) {
-      rows = setDiscreteScatterData(data);
-    } else {
-      rows = data.rows;
-    }
-
-    if (!group && isAllDiscrete) {
-      grpName = 'count';
-    } else if (!group && !size) {
-      if (xAxis && yAxis) {
-        grpName = '(' + xAxis.name + ', ' + yAxis.name + ')';
-      } else if (xAxis && !yAxis) {
-        grpName = xAxis.name;
-      } else if (!xAxis && yAxis) {
-        grpName = yAxis.name;
-      }
-    } else if (!group && size) {
-      grpName = size.name;
-    }
-
-    for (i = 0; i < rows.length; i++) {
-      row = rows[i];
-      if (xAxis) {
-        xValue = row[xAxis.index];
-      }
-      if (yAxis) {
-        yValue = row[yAxis.index];
-      }
-      if (group) {
-        grpName = row[group.index];
-      }
-      var sz = (isAllDiscrete) ? row[row.length-1] : ((size) ? row[size.index] : 1);
-
-      if (grpNameIndex[grpName] === undefined) {
-        grpIndexValue[grpIdx] = grpName;
-        grpNameIndex[grpName] = grpIdx++;
-      }
-
-      if (xAxis && rowNameIndex[xValue] === undefined) {
-        rowIndexValue[rowIdx] = xValue;
-        rowNameIndex[xValue] = rowIdx++;
-      }
-
-      if (yAxis && colNameIndex[yValue] === undefined) {
-        colIndexValue[colIdx] = yValue;
-        colNameIndex[yValue] = colIdx++;
-      }
-
-      if (!d3g[grpNameIndex[grpName]]) {
-        d3g[grpNameIndex[grpName]] = {
-          key : grpName,
-          values : []
-        };
-      }
-
-      d3g[grpNameIndex[grpName]].values.push({
-        x : xAxis ? (isNaN(xValue) ? rowNameIndex[xValue] : parseFloat(xValue)) : 0,
-        y : yAxis ? (isNaN(yValue) ? colNameIndex[yValue] : parseFloat(yValue)) : 0,
-        size : isNaN(parseFloat(sz))? 1 : parseFloat(sz)
-      });
-    }
-
-    return {
-      xLabels : rowIndexValue,
-      yLabels : colIndexValue,
-      d3g : d3g
-    };
-  };
-
-  var isDiscrete = function(field) {
-    var getUnique = function(f) {
-      var uniqObj = {};
-      var uniqArr = [];
-      var j = 0;
-      for (var i = 0; i < f.length; i++) {
-        var item = f[i];
-        if(uniqObj[item] !== 1) {
-          uniqObj[item] = 1;
-          uniqArr[j++] = item;
-        }
-      }
-      return uniqArr;
-    };
-
-    for (var i = 0; i < field.length; i++) {
-      if(isNaN(parseFloat(field[i])) &&
-         (typeof field[i] === 'string' || field[i] instanceof String)) {
-        return true;
-      }
-    }
-
-    var threshold = 0.05;
-    var unique = getUnique(field);
-    if (unique.length/field.length < threshold) {
-      return true;
-    } else {
-      return false;
-    }
-  };
-
-  $scope.isValidSizeOption = function (options, rows) {
-    var xValues = [];
-    var yValues = [];
-
-    for (var i = 0; i < rows.length; i++) {
-      var row = rows[i];
-      var size = row[options.size.index];
-
-      //check if the field is numeric
-      if (isNaN(parseFloat(size)) || !isFinite(size)) {
-        return false;
-      }
-
-      if (options.xAxis) {
-        var x = row[options.xAxis.index];
-        xValues[i] = x;
-      }
-      if (options.yAxis) {
-        var y = row[options.yAxis.index];
-        yValues[i] = y;
-      }
-    }
-
-    //check if all existing fields are discrete
-    var isAllDiscrete = ((options.xAxis && options.yAxis && isDiscrete(xValues) && isDiscrete(yValues)) ||
-        (!options.xAxis && isDiscrete(yValues)) ||
-        (!options.yAxis && isDiscrete(xValues)));
-
-    if (isAllDiscrete) {
-      return false;
-    }
-
-    return true;
-  };
-
-  $scope.setGraphHeight = function() {
-    var height = $('#p'+$scope.paragraph.id+'_graph').height();
-
-    var newParams = angular.copy($scope.paragraph.settings.params);
-    var newConfig = angular.copy($scope.paragraph.config);
-
-    newConfig.graph.height = height;
-
-    commitParagraph($scope.paragraph.title, $scope.paragraph.text, newConfig, newParams);
-  };
-
-  /** Utility function */
-  if (typeof String.prototype.startsWith !== 'function') {
-    String.prototype.startsWith = function(str) {
-      return this.slice(0, str.length) === str;
-    };
-  }
-
-  $scope.goToSingleParagraph = function () {
-    var noteId = $route.current.pathParams.noteId;
-    var redirectToUrl = location.protocol + '//' + location.host + '/#/notebook/' + noteId + '/paragraph/' + $scope.paragraph.id+'?asIframe';
-    $window.open(redirectToUrl);
-  };
-});

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/scripts/directives/dropdowninput.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/scripts/directives/dropdowninput.js b/zeppelin-web/app/scripts/directives/dropdowninput.js
deleted file mode 100644
index 65dd5d3..0000000
--- a/zeppelin-web/app/scripts/directives/dropdowninput.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-'use strict';
-
-angular.module('zeppelinWebApp').directive('dropdownInput', function () {
-    return {
-        restrict: 'A',
-        link: function (scope, element) {
-            element.bind('click', function (event) {
-                event.stopPropagation();
-            });
-        }
-    };
-});

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/scripts/directives/ngdelete.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/scripts/directives/ngdelete.js b/zeppelin-web/app/scripts/directives/ngdelete.js
deleted file mode 100644
index 7d9181c..0000000
--- a/zeppelin-web/app/scripts/directives/ngdelete.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-/**
- * @ngdoc directive
- * @name zeppelinWebApp.directive:delete
- * @description
- * # ngDelete
- */
-angular.module('zeppelinWebApp').directive('ngDelete', function() {
-  return function(scope, element, attrs) {
-    element.bind('keydown keyup', function(event) {
-      if (event.which === 27 || event.which === 46) {
-        scope.$apply(function() {
-          scope.$eval(attrs.ngEnter);
-        });
-        event.preventDefault();
-      }
-    });
-  };
-});

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/scripts/directives/ngenter.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/scripts/directives/ngenter.js b/zeppelin-web/app/scripts/directives/ngenter.js
deleted file mode 100644
index 6fc4b73..0000000
--- a/zeppelin-web/app/scripts/directives/ngenter.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-'use strict';
-
-/**
- * @ngdoc directive
- * @name zeppelinWebApp.directive:ngEnter
- * @description
- * # ngEnter
- * Bind the <enter> event
- * 
- * @author anthonycorbacho
- */
-angular.module('zeppelinWebApp').directive('ngEnter', function() {
-  return function(scope, element, attrs) {
-    element.bind('keydown keypress', function(event) {
-      if (event.which === 13) {
-        scope.$apply(function() {
-          scope.$eval(attrs.ngEnter);
-        });
-        event.preventDefault();
-      }
-    });
-  };
-});

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/scripts/directives/popover-html-unsafe.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/scripts/directives/popover-html-unsafe.js b/zeppelin-web/app/scripts/directives/popover-html-unsafe.js
deleted file mode 100644
index 8a84daa..0000000
--- a/zeppelin-web/app/scripts/directives/popover-html-unsafe.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-'use strict';
-
-angular.module('zeppelinWebApp')
-  .directive('popoverHtmlUnsafePopup', function() {
-    return {
-      restrict: 'EA',
-      replace: true,
-      scope: { title: '@', content: '@', placement: '@', animation: '&', isOpen: '&' },
-      templateUrl: 'views/popover-html-unsafe-popup.html'
-    };
-  })
-  
-  .directive('popoverHtmlUnsafe', ['$tooltip', function($tooltip) {
-    return $tooltip('popoverHtmlUnsafe', 'popover', 'click');
-  }]);

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/scripts/directives/resizable.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/scripts/directives/resizable.js b/zeppelin-web/app/scripts/directives/resizable.js
deleted file mode 100644
index fe46a24..0000000
--- a/zeppelin-web/app/scripts/directives/resizable.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-'use strict';
-
-angular.module('zeppelinWebApp').directive('resizable', function () {
-    var resizableConfig = {
-        autoHide: true,
-        handles: 'se',
-        helper: 'resizable-helper',
-        minHeight:100,
-        grid: [10000, 10]  // allow only vertical
-    };
-
-    return {
-        restrict: 'A',
-        scope: {
-            callback: '&onResize'
-        },
-        link: function postLink(scope, elem, attrs) {
-            attrs.$observe('allowresize', function(isAllowed) {
-                if (isAllowed === 'true') {
-                    elem.resizable(resizableConfig);
-                    elem.on('resizestop', function () {
-                        if (scope.callback) { scope.callback(); }
-                    });
-                }
-            });
-        }
-    };
-});

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/styles/custom-font.css
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/styles/custom-font.css b/zeppelin-web/app/styles/custom-font.css
deleted file mode 100644
index 91d3f01..0000000
--- a/zeppelin-web/app/styles/custom-font.css
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-@font-face {
-  font-family: 'CustomFont';
-  src: url('../fonts/custom-font.eot') format('embedded-opentype'), url('../fonts/custom-font.woff') format('woff'), url('../fonts/custom-font.ttf') format('truetype'), url('../fonts/custom-font.svg') format('svg');
-  font-weight: normal;
-  font-style: normal;
-}
-.cf {
-  display: inline-block;
-  font: normal normal normal 14px/1 CustomFont;
-  font-size: inherit;
-  text-rendering: auto;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-.cf-scatter-chart:before {
-  content: "\e800";
-}

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/styles/font-awesome.min.css
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/styles/font-awesome.min.css b/zeppelin-web/app/styles/font-awesome.min.css
deleted file mode 100644
index ec53d4d..0000000
--- a/zeppelin-web/app/styles/font-awesome.min.css
+++ /dev/null
@@ -1,4 +0,0 @@
-/*!
- *  Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
- *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.2.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa
 -li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotat
 ion=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{conte
 nt:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\
 f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:bef
 ore{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{cont
 ent:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content
 :"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-
 in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0a
 b"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d
 3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.
 fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-d
 esktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-a
 rrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\
 f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:be
 fore,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbuck
 et:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f
 18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{co
 ntent:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{conte
 nt:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-pla
 ne:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:befor
 e{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/styles/interpreter.css
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/styles/interpreter.css b/zeppelin-web/app/styles/interpreter.css
deleted file mode 100644
index 1dcc52b..0000000
--- a/zeppelin-web/app/styles/interpreter.css
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-.interpreterHead {
-  margin-left: -10px;
-  margin-right: -10px;
-  margin-top: -10px;
-  margin-bottom: 20px;
-  padding: 10px 15px 15px 15px;
-  background-color: white;
-  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
-  border-bottom: 1px solid #E5E5E5;
-}
-
-.interpreterHead .header {
-  font-family: 'Roboto', sans-serif;
-}
-
-.interpreterHead textarea, .interpreter textarea {
-  width: 100%;
-  display: block;
-  height: 20px;
-  resize: none;
-  border: 1px solid #CCCCCC;
-  font-size: 12px;
-}
-
-.interpreter .interpreter-title {
-  font-size:20px;
-  font-weight:bold;
-  color:#3071a9;
-  float:left;
-  margin-top:0px;
-}
-
-.interpreter ul {
-  margin: 0px 0px 0px 0px;
-  padding: 0px 0px 0px 0px;
-}
-
-.interpreter .interpreterInfo {
-  list-style-type: none;
-}
-
-
-.interpreter table tr .interpreterPropertyKey {
-  padding : 5px 5px 5px 5px;
-}
-
-.interpreter table tr .interpreterPropertyValue {
-  padding : 5px 5px 5px 5px;
-  display: block;
-  max-height: 100px;
-  overflow-y: auto;
-}
-
-.interpreter table tr {
-  height : 45px;
-}
-
-.interpreterSettingAdd {
-  margin : 5px 5px 5px 5px;
-  padding : 10px 10px 10px 10px;
-}
-
-.editable-wrap {
-  width : 100%;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/styles/looknfeel/default.css
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/styles/looknfeel/default.css b/zeppelin-web/app/styles/looknfeel/default.css
deleted file mode 100644
index 8aeee95..0000000
--- a/zeppelin-web/app/styles/looknfeel/default.css
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-body {
-  background: #ecf0f1;
-}
-
-/**
- * Box and well
- */
-.box{
-  border-style: solid;
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-}
-
-.box, 
-.well {
-  background-color: #ffffff;
-  border-color: #e5e5e5;
-  border-width: 1px 1px 2px;
-  border-radius: 3px;
-  -webkit-box-shadow: none;
-  box-shadow: none;
-}
-
-.paragraph {
-  min-height: 32px;
-}
-
-.noteAction {
-  background-color: white;
-  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
-  color: #2c3e50;
-  border-bottom: 1px solid #E5E5E5;
-}
-
-.control span {
-    margin-left: 4px;
-}
-
-.control {
-    padding: 4px;
-}
-
-.paragraph-space {
-  margin-bottom: 5px;
-  padding: 10px !important;
-}
-
-.editor,
-.executionTime,
-.nv-controlsWrap {
-  display:block;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/styles/looknfeel/report.css
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/styles/looknfeel/report.css b/zeppelin-web/app/styles/looknfeel/report.css
deleted file mode 100644
index 84f86d0..0000000
--- a/zeppelin-web/app/styles/looknfeel/report.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-body {
-  background: white;
-}
-
-
-/**
- * Box and well
- */
-.box{
-  border: 0px;
-  min-height: 0px;
-}
-
-.box:hover, 
-.well:hover {
-  background-color: white;
-  border: 0px;
-}
-
-.paragraph-col{
-  border: 0px solid white;
-}
-
-.paragraph {
-  min-height: 32px;
-}
-
-.paragraph-space {
-  margin-bottom: 5px;
-  padding: 10px !important;
-}
-
-.paragraph .control {
-  visibility : hidden;
-  right:15px;
-  top: 6px;
-}
-
-.paragraph:hover .control {
-  visibility : hidden;
-}
-
-.noteAction span, .noteAction button, .noteAction form {
-  visibility : hidden;
-}
-
-.noteAction:hover span, .noteAction:hover button, .noteAction:hover form {
-  visibility : visible;
-}
-
-.editor,
-.executionTime,
-.nv-controlsWrap {
-  display:none;
-}


Mime
View raw message