You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by mo...@apache.org on 2015/07/02 08:55:27 UTC
[10/14] incubator-zeppelin git commit: Zeppelin-web Spring Cleaning
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/fonts/fontawesome-webfont.woff
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/fonts/fontawesome-webfont.woff b/zeppelin-web/app/fonts/fontawesome-webfont.woff
deleted file mode 100644
index 628b6a5..0000000
Binary files a/zeppelin-web/app/fonts/fontawesome-webfont.woff and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/images/zepLogo.png
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/images/zepLogo.png b/zeppelin-web/app/images/zepLogo.png
deleted file mode 100644
index f11f022..0000000
Binary files a/zeppelin-web/app/images/zepLogo.png and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/images/zepLogoW.png
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/images/zepLogoW.png b/zeppelin-web/app/images/zepLogoW.png
deleted file mode 100644
index 0b45fa4..0000000
Binary files a/zeppelin-web/app/images/zepLogoW.png and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/index.html
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/index.html b/zeppelin-web/app/index.html
deleted file mode 100644
index 4d0ff08..0000000
--- a/zeppelin-web/app/index.html
+++ /dev/null
@@ -1,156 +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.
--->
-<!doctype html>
-<html ng-app="zeppelinWebApp" ng-controller="MainCtrl" class="no-js">
- <head>
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta charset="utf-8">
- <title></title>
- <!-- disable caches for all browser -->
- <meta http-equiv="cache-control" content="max-age=0" />
- <meta http-equiv="cache-control" content="no-cache" />
- <meta http-equiv="cache-control" content="no-store" />
- <meta http-equiv="expires" content="0" />
- <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
- <meta http-equiv="pragma" content="no-cache" />
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width">
- <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
- <!-- build:css(.) styles/vendor.css -->
- <!-- bower:css -->
- <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css" />
- <link rel="stylesheet" href="bower_components/nvd3/src/nv.d3.css" />
- <link rel="stylesheet" href="bower_components/perfect-scrollbar/src/perfect-scrollbar.css" />
- <link rel="stylesheet" href="bower_components/ng-sortable/dist/ng-sortable.css" />
- <link rel="stylesheet" href="bower_components/angular-xeditable/dist/css/xeditable.css" />
- <link rel="stylesheet" href="bower_components/highlightjs/styles/github.css" />
- <!-- endbower -->
- <link rel="stylesheet" href="bower_components/jquery-ui/themes/base/all.css" />
- <!-- endbuild -->
- <!-- build:css(.tmp) styles/main.css -->
- <link href='https://fonts.googleapis.com/css?family=RobotoDraft:400,500,700,400italic' rel='stylesheet' type='text/css'>
- <link rel="stylesheet" href="styles/main.css">
- <link rel="stylesheet" href="styles/typography.css">
- <link rel="stylesheet" href="styles/notebook.css">
- <link rel="stylesheet" href="styles/interpreter.css">
- <link rel="stylesheet" href="styles/font-awesome.min.css">
- <link rel="stylesheet" href="styles/simple-line-icons.css">
- <link rel="stylesheet" href="styles/custom-font.css">
- <!-- endbuild -->
- <link rel="stylesheet" ng-href="styles/looknfeel/{{looknfeel}}.css">
- </head>
- <body ng-class="{'bodyAsIframe': asIframe}" >
- <!--[if lt IE 7]>
- <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
- <![endif]-->
- <div class="navbar navbar-inverse navbar-fixed-top" style="display: none;" role="navigation" ng-class="{'displayNavBar': !asIframe}">
- <div class="container">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- <a class="navbar-brand" href="#/"><img style="margin-top: -7px;s" src="images/zepLogoW.png" width="50" alt="I'm zeppelin"> Zeppelin</a>
- </div>
-
- <div class="collapse navbar-collapse" ng-controller="NavCtrl">
- <ul class="nav navbar-nav">
- <li class="dropdown">
- <a href="#" class="dropdown-toggle">Notebook <span class="caret"></span></a>
- <ul class="dropdown-menu" role="menu">
- <li><a href="javascript:void(0);" ng-click="createNewNote()"><i class="fa fa-plus"></i> Create new note</a></li>
- <li class="divider"></li>
- <div id="notebook-list" class="scrollbar-container">
- <li ng-repeat="note in notes track by $index" ng-class="{'active' : isActive(note.id)}"><a href="#/notebook/{{note.id}}">{{note.name || 'Note ' + note.id}} </a></li>
- </div>
- </ul>
- </li>
- <li>
- <a href="#/interpreter">Interpreter</a>
- </li>
- </ul>
- <ul class="nav navbar-nav navbar-right" style="margin-top:10px; margin-right:5px;">
- <li class="server-status">
- <i class="fa fa-circle" ng-class="{'server-connected':connected, 'server-disconnected':!connected }"></i>
- <span ng-show="connected">Connected</span>
- <span ng-show="!connected">Disconnected</span>
- </li>
- </ul>
- </div>
- </div>
- </div>
- <!-- Add your site or application content here -->
- <div id="main" class="container">
- <div ng-view></div>
- </div>
- <!-- Modal :: Keyboard shortcuts -->
- <div ng-include src="'views/modal-shortcut.html'"></div>
- <!-- build:js(.) scripts/oldieshim.js -->
- <!--[if lt IE 9]>
- <script src="bower_components/es5-shim/es5-shim.js"></script>
- <script src="bower_components/json3/lib/json3.min.js"></script>
- <![endif]-->
- <!-- endbuild -->
-
- <!-- build:js(.) scripts/vendor.js -->
- <!-- bower:js -->
- <script src="bower_components/jquery/dist/jquery.js"></script>
- <script src="bower_components/angular/angular.js"></script>
- <script src="bower_components/json3/lib/json3.js"></script>
- <script src="bower_components/bootstrap/dist/js/bootstrap.js"></script>
- <script src="bower_components/angular-cookies/angular-cookies.js"></script>
- <script src="bower_components/angular-sanitize/angular-sanitize.js"></script>
- <script src="bower_components/angular-animate/angular-animate.js"></script>
- <script src="bower_components/angular-touch/angular-touch.js"></script>
- <script src="bower_components/angular-route/angular-route.js"></script>
- <script src="bower_components/angular-bootstrap/ui-bootstrap-tpls.js"></script>
- <script src="bower_components/angular-websocket/angular-websocket.js"></script>
- <script src="bower_components/ace-builds/src-noconflict/ace.js"></script>
- <script src="bower_components/ace-builds/src-noconflict/mode-scala.js"></script>
- <script src="bower_components/ace-builds/src-noconflict/mode-sql.js"></script>
- <script src="bower_components/ace-builds/src-noconflict/mode-markdown.js"></script>
- <script src="bower_components/ace-builds/src-noconflict/keybinding-emacs.js"></script>
- <script src="bower_components/ace-builds/src-noconflict/ext-language_tools.js"></script>
- <script src="bower_components/ace-builds/src-noconflict/theme-github.js"></script>
- <script src="bower_components/angular-ui-ace/ui-ace.js"></script>
- <script src="bower_components/jquery.scrollTo/jquery.scrollTo.js"></script>
- <script src="bower_components/d3/d3.js"></script>
- <script src="bower_components/nvd3/nv.d3.js"></script>
- <script src="bower_components/jquery-ui/jquery-ui.js"></script>
- <script src="bower_components/angular-dragdrop/src/angular-dragdrop.js"></script>
- <script src="bower_components/perfect-scrollbar/src/perfect-scrollbar.js"></script>
- <script src="bower_components/ng-sortable/dist/ng-sortable.js"></script>
- <script src="bower_components/angular-elastic/elastic.js"></script>
- <script src="bower_components/angular-elastic-input/dist/angular-elastic-input.min.js"></script>
- <script src="bower_components/angular-xeditable/dist/js/xeditable.js"></script>
- <script src="bower_components/highlightjs/highlight.pack.js"></script>
- <!-- endbower -->
- <!-- endbuild -->
- <!-- build:js({.tmp,app}) scripts/scripts.js -->
- <script src="scripts/app.js"></script>
- <script src="scripts/controllers/main.js"></script>
- <script src="scripts/controllers/notebook.js"></script>
- <script src="scripts/controllers/interpreter.js"></script>
- <script src="scripts/directives/ngenter.js"></script>
- <script src="scripts/directives/dropdowninput.js"></script>
- <script src="scripts/directives/resizable.js"></script>
- <script src="scripts/controllers/paragraph.js"></script>
- <script src="scripts/controllers/nav.js"></script>
- <script src="scripts/directives/ngdelete.js"></script>
- <script src="scripts/directives/popover-html-unsafe.js"></script>
- <!-- endbuild -->
- </body>
-</html>
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/scripts/ace/textarea/src/ace-bookmarklet.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/scripts/ace/textarea/src/ace-bookmarklet.js b/zeppelin-web/app/scripts/ace/textarea/src/ace-bookmarklet.js
deleted file mode 100644
index f723f43..0000000
--- a/zeppelin-web/app/scripts/ace/textarea/src/ace-bookmarklet.js
+++ /dev/null
@@ -1,14 +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.
- */
-alert("moved to https://ajaxorg.github.io/ace-builds/demo/bookmarklet/index.html. Please update your bookmark")
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/scripts/app.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/scripts/app.js b/zeppelin-web/app/scripts/app.js
deleted file mode 100644
index b311b7c..0000000
--- a/zeppelin-web/app/scripts/app.js
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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';
-
-/** Get the current port of the websocket
- *
- * In the case of running the zeppelin-server normally,
- * the body of this function is just filler. It will be dynamically
- * overridden with the AppScriptServlet from zeppelin-site.xml config value
- * when the client requests the script.
- *
- * If the config value is not defined, it defaults to the HTTP port + 1
- *
- * At the moment, the key delimiter denoting the end of this function
- * during the replacement is the '}' character.
- *
- * !!!
- * Avoid using '}' inside the function body or you will fail running
- * in server mode.
- * !!!
- *
- * In the case of running "grunt serve", this function will appear
- * as is.
- */
-function getPort() {
- var port = Number(location.port);
- if (location.protocol !== 'https:' && !!port)
- port = 80;
- else if (location.protocol === 'https:' && !!port)
- port = 443;
- else if (port === 3333 || port === 9000)
- port = 8080;
-
- return port+1;
-}
-
-function getWebsocketProtocol() {
- return location.protocol === 'https:' ? 'wss' : 'ws';
-}
-
-function getRestApiBase() {
- var port = Number(location.port);
- if (!!port) {
- port = 80;
- if (location.protocol === 'https:') {
- port = 443;
- }
- }
-
- if (port === 3333 || port === 9000) {
- port = 8080;
- }
- return location.protocol + "//" + location.hostname + ":" + port + skipTrailingSlash(location.pathname) + "/api";
-}
-
-function skipTrailingSlash(path) {
- return path.replace(/\/$/, "");
-}
-
-/**
- * @ngdoc overview
- * @name zeppelinWebApp
- * @description
- * # zeppelinWebApp
- *
- * Main module of the application.
- *
- * @author anthonycorbacho
- */
-angular
- .module('zeppelinWebApp', [
- 'ngAnimate',
- 'ngCookies',
- 'ngRoute',
- 'ngSanitize',
- 'angular-websocket',
- 'ui.ace',
- 'ui.bootstrap',
- 'ui.sortable',
- 'ngTouch',
- 'ngDragDrop',
- 'monospaced.elastic',
- 'puElasticInput',
- 'xeditable'
- ])
- .filter('breakFilter', function () {
- return function (text) {
- if (!!text) return text.replace(/\n/g, '<br />');
- };
- })
- .config(function ($routeProvider, WebSocketProvider) {
- WebSocketProvider
- .prefix('')
- .uri(getWebsocketProtocol() + '://' + location.hostname + ':' + getPort());
-
- $routeProvider
- .when('/', {
- templateUrl: 'views/main.html'
- })
- .when('/notebook/:noteId', {
- templateUrl: 'views/notebooks.html',
- controller: 'NotebookCtrl'
- })
- .when('/notebook/:noteId/paragraph/:paragraphId?', {
- templateUrl: 'views/notebooks.html',
- controller: 'NotebookCtrl'
- })
- .when('/interpreter', {
- templateUrl: 'views/interpreter.html',
- controller: 'InterpreterCtrl'
- })
- .otherwise({
- redirectTo: '/'
- });
- });
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/scripts/controllers/interpreter.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/scripts/controllers/interpreter.js b/zeppelin-web/app/scripts/controllers/interpreter.js
deleted file mode 100644
index 0da1baa..0000000
--- a/zeppelin-web/app/scripts/controllers/interpreter.js
+++ /dev/null
@@ -1,313 +0,0 @@
-/* global confirm:false, alert:false */
-/* jshint loopfunc: true */
-/*
- * 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:InterpreterCtrl
- * @description
- * # InterpreterCtrl
- * Controller of interpreter, manage the note (update)
- */
-angular.module('zeppelinWebApp').controller('InterpreterCtrl', function($scope, $route, $routeParams, $location, $rootScope, $http) {
-
- var remoteSettingToLocalSetting = function(settingId, setting) {
- var property = {};
- for (var key in setting.properties) {
- property[key] = {
- value : setting.properties[key]
- };
- }
- return {
- id : settingId,
- name : setting.name,
- group : setting.group,
- option : angular.copy(setting.option),
- properties : property,
- interpreters : setting.interpreterGroup
- };
- };
-
- var getInterpreterSettings = function() {
- $http.get(getRestApiBase()+'/interpreter/setting').
- success(function(data, status, headers, config) {
- var interpreterSettings = [];
- //console.log("getInterpreterSettings=%o", data);
-
- for (var settingId in data.body) {
- var setting = data.body[settingId];
- interpreterSettings.push(remoteSettingToLocalSetting(setting.id, setting));
- }
- $scope.interpreterSettings = interpreterSettings;
- }).
- error(function(data, status, headers, config) {
- console.log('Error %o %o', status, data.message);
- });
- };
-
- var getAvailableInterpreters = function() {
- $http.get(getRestApiBase()+'/interpreter').
- success(function(data, status, headers, config) {
- var groupedInfo = {};
- var info;
- for (var k in data.body) {
- info = data.body[k];
- if (!groupedInfo[info.group]) {
- groupedInfo[info.group] = [];
- }
- groupedInfo[info.group].push({
- name : info.name,
- className : info.className,
- properties : info.properties
- });
- }
-
- $scope.availableInterpreters = groupedInfo;
- //console.log("getAvailableInterpreters=%o", data);
- }).
- error(function(data, status, headers, config) {
- console.log('Error %o %o', status, data.message);
- });
- };
-
- $scope.copyOriginInterpreterSettingProperties = function(settingId) {
- $scope.interpreterSettingProperties = {};
- for (var i=0; i < $scope.interpreterSettings.length; i++) {
- var setting = $scope.interpreterSettings[i];
- if(setting.id === settingId) {
- angular.copy(setting.properties, $scope.interpreterSettingProperties);
- angular.copy(setting.option, $scope.interpreterSettingOption);
- break;
- }
- }
- console.log('%o, %o', $scope.interpreterSettings[i], $scope.interpreterSettingProperties);
- };
-
- $scope.updateInterpreterSetting = function(settingId) {
- var result = confirm('Do you want to update this interpreter and restart with new settings?');
- if (!result) {
- return;
- }
-
- $scope.addNewInterpreterProperty(settingId);
-
- var request = {
- option : {
- remote : true
- },
- properties : {},
- };
-
- for (var i=0; i < $scope.interpreterSettings.length; i++) {
- var setting = $scope.interpreterSettings[i];
- if(setting.id === settingId) {
- request.option = angular.copy(setting.option);
- for (var p in setting.properties) {
- request.properties[p] = setting.properties[p].value;
- }
- break;
- }
- }
-
- $http.put(getRestApiBase()+'/interpreter/setting/'+settingId, request).
- success(function(data, status, headers, config) {
- for (var i=0; i < $scope.interpreterSettings.length; i++) {
- var setting = $scope.interpreterSettings[i];
- if (setting.id === settingId) {
- $scope.interpreterSettings.splice(i, 1);
- $scope.interpreterSettings.splice(i, 0, remoteSettingToLocalSetting(settingId, data.body));
- break;
- }
- }
- }).
- error(function(data, status, headers, config) {
- console.log('Error %o %o', status, data.message);
- });
- };
-
- $scope.resetInterpreterSetting = function(settingId){
- for (var i=0; i<$scope.interpreterSettings.length; i++) {
- var setting = $scope.interpreterSettings[i];
- if (setting.id === settingId) {
- angular.copy($scope.interpreterSettingProperties, setting.properties);
- angular.copy($scope.interpreterSettingOption, setting.option);
- break;
- }
- }
- };
-
- $scope.removeInterpreterSetting = function(settingId) {
- var result = confirm('Do you want to delete this interpreter setting?');
- if (!result) {
- return;
- }
-
- console.log('Delete setting %o', settingId);
- $http.delete(getRestApiBase()+'/interpreter/setting/'+settingId).
- success(function(data, status, headers, config) {
- for (var i=0; i < $scope.interpreterSettings.length; i++) {
- var setting = $scope.interpreterSettings[i];
- if (setting.id === settingId) {
- $scope.interpreterSettings.splice(i, 1);
- break;
- }
- }
- }).
- error(function(data, status, headers, config) {
- console.log('Error %o %o', status, data.message);
- });
- };
-
- $scope.newInterpreterGroupChange = function() {
- var property = {};
- var intpGroupInfo = $scope.availableInterpreters[$scope.newInterpreterSetting.group];
- for (var i=0; i<intpGroupInfo.length; i++) {
- var intpInfo = intpGroupInfo[i];
- for (var key in intpInfo.properties) {
- property[key] = {
- value : intpInfo.properties[key].defaultValue,
- description : intpInfo.properties[key].description
- };
- }
- }
- $scope.newInterpreterSetting.properties = property;
- };
-
- $scope.restartInterpreterSetting = function(settingId) {
- var result = confirm('Do you want to restart this interpreter?');
- if (!result) {
- return;
- }
-
- $http.put(getRestApiBase()+'/interpreter/setting/restart/'+settingId).
- success(function(data, status, headers, config) {
- for (var i=0; i < $scope.interpreterSettings.length; i++) {
- var setting = $scope.interpreterSettings[i];
- if (setting.id === settingId) {
- $scope.interpreterSettings.splice(i, 1);
- $scope.interpreterSettings.splice(i, 0, remoteSettingToLocalSetting(settingId, data.body));
- break;
- }
- }
- }).
- error(function(data, status, headers, config) {
- console.log('Error %o %o', status, data.message);
- });
- };
-
- $scope.addNewInterpreterSetting = function() {
- if (!$scope.newInterpreterSetting.name || !$scope.newInterpreterSetting.group) {
- alert('Please determine name and interpreter');
- return;
- }
-
- for (var i=0; i<$scope.interpreterSettings.length; i++) {
- var setting = $scope.interpreterSettings[i];
- if (setting.name === $scope.newInterpreterSetting.name) {
- alert('Name ' + setting.name + ' already exists');
- return;
- }
- }
-
- $scope.addNewInterpreterProperty();
-
- var newSetting = {
- name : $scope.newInterpreterSetting.name,
- group : $scope.newInterpreterSetting.group,
- option : angular.copy($scope.newInterpreterSetting.option),
- properties : {}
- };
-
- for (var p in $scope.newInterpreterSetting.properties) {
- newSetting.properties[p] = $scope.newInterpreterSetting.properties[p].value;
- }
-
- $http.post(getRestApiBase()+'/interpreter/setting', newSetting).
- success(function(data, status, headers, config) {
- $scope.resetNewInterpreterSetting();
- getInterpreterSettings();
- $scope.showAddNewSetting = false;
- }).
- error(function(data, status, headers, config) {
- console.log('Error %o %o', status, data.message);
- });
- };
-
-
- $scope.resetNewInterpreterSetting = function() {
- $scope.newInterpreterSetting = {
- name : undefined,
- group : undefined,
- option : { remote : true },
- properties : {}
- };
- $scope.newInterpreterSetting.propertyValue = '';
- $scope.newInterpreterSetting.propertyKey = '';
- };
-
- $scope.removeInterpreterProperty = function(key, settingId) {
- if (settingId === undefined) {
- delete $scope.newInterpreterSetting.properties[key];
- }
- else {
- for (var i=0; i < $scope.interpreterSettings.length; i++) {
- var setting = $scope.interpreterSettings[i];
- if (setting.id === settingId) {
- delete $scope.interpreterSettings[i].properties[key]
- break;
- }
- }
- }
- };
-
- $scope.addNewInterpreterProperty = function(settingId) {
- if(settingId === undefined) {
- if (!$scope.newInterpreterSetting.propertyKey || $scope.newInterpreterSetting.propertyKey === '') {
- return;
- }
- $scope.newInterpreterSetting.properties[$scope.newInterpreterSetting.propertyKey] = { value : $scope.newInterpreterSetting.propertyValue};
- $scope.newInterpreterSetting.propertyValue = '';
- $scope.newInterpreterSetting.propertyKey = '';
- }
- else {
- for (var i=0; i < $scope.interpreterSettings.length; i++) {
- var setting = $scope.interpreterSettings[i];
- if (setting.id === settingId){
- if (!setting.propertyKey || setting.propertyKey === '') {
- return;
- }
- setting.properties[setting.propertyKey] = { value : setting.propertyValue };
- setting.propertyValue = '';
- setting.propertyKey = '';
- break;
- }
- }
- }
- };
-
- var init = function() {
- // when interpreter page opened after seeing non-default looknfeel note, the css remains unchanged. that's what interpreter page want. Force set default looknfeel.
- $rootScope.$emit('setLookAndFeel', 'default');
- $scope.interpreterSettings = [];
- $scope.availableInterpreters = {};
- $scope.resetNewInterpreterSetting();
-
- getInterpreterSettings();
- getAvailableInterpreters();
- };
-
- init();
-});
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/scripts/controllers/main.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/scripts/controllers/main.js b/zeppelin-web/app/scripts/controllers/main.js
deleted file mode 100644
index 2720cbd..0000000
--- a/zeppelin-web/app/scripts/controllers/main.js
+++ /dev/null
@@ -1,120 +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 function
- * @name zeppelinWebApp.controller:MainCtrl
- * @description
- * # MainCtrl
- * Controller of the zeppelinWebApp
- *
- * @author anthonycorbacho
- */
-angular.module('zeppelinWebApp')
- .controller('MainCtrl', function($scope, WebSocket, $rootScope, $window) {
- $rootScope.compiledScope = $scope.$new(true, $rootScope);
- $scope.WebSocketWaitingList = [];
- $scope.connected = false;
- $scope.looknfeel = 'default';
-
- var init = function() {
- $scope.asIframe = (($window.location.href.indexOf('asIframe') > -1) ? true : false);
- };
- init();
-
- /**
- * Web socket
- */
- WebSocket.onopen(function() {
- console.log('Websocket created');
- $scope.connected = true;
- if ($scope.WebSocketWaitingList.length > 0) {
- for (var o in $scope.WebSocketWaitingList) {
- WebSocket.send(JSON.stringify($scope.WebSocketWaitingList[o]));
- }
- }
- setInterval(function(){
- $rootScope.$emit('sendNewEvent', {op: 'PING'})
- }
- ,60000);
- });
-
- WebSocket.onmessage(function(event) {
- var payload;
- if (event.data) {
- payload = angular.fromJson(event.data);
- }
- console.log('Receive << %o, %o, %o', payload.op, payload, $scope);
- var op = payload.op;
- var data = payload.data;
- if (op === 'NOTE') {
- $scope.$broadcast('setNoteContent', data.note);
- } else if (op === 'NOTES_INFO') {
- $scope.$broadcast('setNoteMenu', data.notes);
- } else if (op === 'PARAGRAPH') {
- $scope.$broadcast('updateParagraph', data);
- } else if (op === 'PROGRESS') {
- $scope.$broadcast('updateProgress', data);
- } else if (op === 'COMPLETION_LIST') {
- $scope.$broadcast('completionList', data);
- } else if (op === 'ANGULAR_OBJECT_UPDATE') {
- $scope.$broadcast('angularObjectUpdate', data);
- }
- });
-
- WebSocket.onerror(function(event) {
- console.log('error message: ', event);
- $scope.connected = false;
- });
-
- WebSocket.onclose(function(event) {
- console.log('close message: ', event);
- $scope.connected = false;
- });
-
- /** Send info to the websocket server */
- var send = function(data) {
- if (WebSocket.currentState() !== 'OPEN') {
- $scope.WebSocketWaitingList.push(data);
- } else {
- console.log('Send >> %o, %o', data.op, data);
- WebSocket.send(JSON.stringify(data));
- }
- };
-
-
- /** get the childs event and sebd to the websocket server */
- $rootScope.$on('sendNewEvent', function(event, data) {
- if (!event.defaultPrevented) {
- send(data);
- event.preventDefault();
- }
- });
-
- $rootScope.$on('setIframe', function(event, data) {
- if (!event.defaultPrevented) {
- $scope.asIframe = data;
- event.preventDefault();
- }
- });
-
- $rootScope.$on('setLookAndFeel', function(event, data) {
- if (!event.defaultPrevented && data && data !== '') {
- $scope.looknfeel = data;
- event.preventDefault();
- }
- });
-
-});
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/scripts/controllers/nav.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/scripts/controllers/nav.js b/zeppelin-web/app/scripts/controllers/nav.js
deleted file mode 100644
index 3925845..0000000
--- a/zeppelin-web/app/scripts/controllers/nav.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/* global $: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:NavCtrl
- * @description
- * # NavCtrl
- * Controller of the top navigation, mainly use for the dropdown menu
- *
- * @author anthonycorbacho
- */
-angular.module('zeppelinWebApp').controller('NavCtrl', function($scope, $rootScope, $routeParams) {
- /** Current list of notes (ids) */
- $scope.notes = [];
- $('#notebook-list').perfectScrollbar({suppressScrollX: true});
-
- /** Set the new menu */
- $scope.$on('setNoteMenu', function(event, notes) {
- $scope.notes = notes;
- });
-
- var loadNotes = function() {
- $rootScope.$emit('sendNewEvent', {op: 'LIST_NOTES'});
- };
- loadNotes();
-
- /** Create a new note */
- $scope.createNewNote = function() {
- $rootScope.$emit('sendNewEvent', {op: 'NEW_NOTE'});
- };
-
- /** Check if the note url is equal to the current note */
- $scope.isActive = function(noteId) {
- if ($routeParams.noteId === noteId) {
- return true;
- }
- return false;
- };
-
-});
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/8c7424a1/zeppelin-web/app/scripts/controllers/notebook.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/app/scripts/controllers/notebook.js b/zeppelin-web/app/scripts/controllers/notebook.js
deleted file mode 100644
index 9a9fcd7..0000000
--- a/zeppelin-web/app/scripts/controllers/notebook.js
+++ /dev/null
@@ -1,494 +0,0 @@
-/* global confirm:false, alert:false */
-/* jshint loopfunc: true */
-/*
- * 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:NotebookCtrl
- * @description
- * # NotebookCtrl
- * Controller of notes, manage the note (update)
- *
- */
-angular.module('zeppelinWebApp').controller('NotebookCtrl', function($scope, $route, $routeParams, $location, $rootScope, $http) {
- $scope.note = null;
- $scope.showEditor = false;
- $scope.editorToggled = false;
- $scope.tableToggled = false;
- $scope.viewOnly = false;
- $scope.looknfeelOption = [ 'default', 'simple', 'report'];
- $scope.cronOption = [
- {name: 'None', value : undefined},
- {name: '1m', value: '0 0/1 * * * ?'},
- {name: '5m', value: '0 0/5 * * * ?'},
- {name: '1h', value: '0 0 0/1 * * ?'},
- {name: '3h', value: '0 0 0/3 * * ?'},
- {name: '6h', value: '0 0 0/6 * * ?'},
- {name: '12h', value: '0 0 0/12 * * ?'},
- {name: '1d', value: '0 0 0 * * ?'}
- ];
-
- $scope.interpreterSettings = [];
- $scope.interpreterBindings = [];
-
- var angularObjectRegistry = {};
-
- $scope.getCronOptionNameFromValue = function(value) {
- if (!value) {
- return '';
- }
-
- for (var o in $scope.cronOption) {
- if ($scope.cronOption[o].value===value) {
- return $scope.cronOption[o].name;
- }
- }
- return value;
- };
-
- /** Init the new controller */
- var initNotebook = function() {
- $rootScope.$emit('sendNewEvent', {op: 'GET_NOTE', data: {id: $routeParams.noteId}});
- };
-
- initNotebook();
-
- /** Remove the note and go back tot he main page */
- /** TODO(anthony): In the nearly future, go back to the main page and telle to the dude that the note have been remove */
- $scope.removeNote = function(noteId) {
- var result = confirm('Do you want to delete this notebook?');
- if (result) {
- $rootScope.$emit('sendNewEvent', {op: 'DEL_NOTE', data: {id: noteId}});
- $location.path('/#');
- }
- };
-
- $scope.runNote = function() {
- var result = confirm('Run all paragraphs?');
- if (result) {
- $scope.$broadcast('runParagraph');
- }
- };
-
- $scope.toggleAllEditor = function() {
- if ($scope.editorToggled) {
- $scope.$broadcast('closeEditor');
- } else {
- $scope.$broadcast('openEditor');
- }
- $scope.editorToggled = !$scope.editorToggled;
- };
-
- $scope.showAllEditor = function() {
- $scope.$broadcast('openEditor');
- };
-
- $scope.hideAllEditor = function() {
- $scope.$broadcast('closeEditor');
- };
-
- $scope.toggleAllTable = function() {
- if ($scope.tableToggled) {
- $scope.$broadcast('closeTable');
- } else {
- $scope.$broadcast('openTable');
- }
- $scope.tableToggled = !$scope.tableToggled;
- };
-
- $scope.showAllTable = function() {
- $scope.$broadcast('openTable');
- };
-
- $scope.hideAllTable = function() {
- $scope.$broadcast('closeTable');
- };
-
- $scope.isNoteRunning = function() {
- var running = false;
- if(!$scope.note){ return false; }
- for (var i=0; i<$scope.note.paragraphs.length; i++) {
- if ( $scope.note.paragraphs[i].status === 'PENDING' || $scope.note.paragraphs[i].status === 'RUNNING') {
- running = true;
- break;
- }
- }
- return running;
- };
-
- $scope.setLookAndFeel = function(looknfeel) {
- $scope.note.config.looknfeel = looknfeel;
- $scope.setConfig();
- };
-
- /** Set cron expression for this note **/
- $scope.setCronScheduler = function(cronExpr) {
- $scope.note.config.cron = cronExpr;
- $scope.setConfig();
- };
-
- /** Update note config **/
- $scope.setConfig = function(config) {
- if(config) {
- $scope.note.config = config;
- }
- $rootScope.$emit('sendNewEvent', {op: 'NOTE_UPDATE', data: {id: $scope.note.id, name: $scope.note.name, config : $scope.note.config}});
- };
-
- /** Update the note name */
- $scope.sendNewName = function() {
- $scope.showEditor = false;
- if ($scope.note.name) {
- $rootScope.$emit('sendNewEvent', {op: 'NOTE_UPDATE', data: {id: $scope.note.id, name: $scope.note.name, config : $scope.note.config}});
- }
- };
-
- /** update the current note */
- $scope.$on('setNoteContent', function(event, note) {
- $scope.paragraphUrl = $routeParams.paragraphId;
- $scope.asIframe = $routeParams.asIframe;
- if ($scope.paragraphUrl) {
- note = cleanParagraphExcept($scope.paragraphUrl, note);
- $rootScope.$emit('setIframe', $scope.asIframe);
- }
-
- if ($scope.note === null) {
- $scope.note = note;
- } else {
- updateNote(note);
- }
- initializeLookAndFeel();
- //open interpreter binding setting when there're none selected
- getInterpreterBindings(getInterpreterBindingsCallBack);
- });
-
-
- var initializeLookAndFeel = function() {
- if (!$scope.note.config.looknfeel) {
- $scope.note.config.looknfeel = 'default';
- } else {
- $scope.viewOnly = $scope.note.config.looknfeel === 'report' ? true : false;
- }
- $rootScope.$emit('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++) {
- if (note.paragraphs[i].id === paragraphId) {
- noteCopy.paragraphs[0] = note.paragraphs[i];
- if (!noteCopy.paragraphs[0].config) {
- noteCopy.paragraphs[0].config = {};
- }
- noteCopy.paragraphs[0].config.editorHide = true;
- noteCopy.paragraphs[0].config.tableHide = false;
- break;
- }
- }
- return noteCopy;
- };
-
- $scope.$on('moveParagraphUp', function(event, paragraphId) {
- var newIndex = -1;
- for (var i=0; i<$scope.note.paragraphs.length; i++) {
- if ($scope.note.paragraphs[i].id === paragraphId) {
- newIndex = i-1;
- break;
- }
- }
-
- if (newIndex<0 || newIndex>=$scope.note.paragraphs.length) {
- return;
- }
- $rootScope.$emit('sendNewEvent', { op: 'MOVE_PARAGRAPH', data : {id: paragraphId, index: newIndex}});
- });
-
- // create new paragraph on current position
- $scope.$on('insertParagraph', function(event, paragraphId) {
- var newIndex = -1;
- for (var i=0; i<$scope.note.paragraphs.length; i++) {
- if ($scope.note.paragraphs[i].id === paragraphId) {
- newIndex = i+1;
- break;
- }
- }
-
- if (newIndex === $scope.note.paragraphs.length) {
- alert('Cannot insert after the last paragraph.');
- return;
- }
- if (newIndex < 0 || newIndex > $scope.note.paragraphs.length) {
- return;
- }
- $rootScope.$emit('sendNewEvent', { op: 'INSERT_PARAGRAPH', data : {index: newIndex}});
- });
-
- $scope.$on('moveParagraphDown', function(event, paragraphId) {
- var newIndex = -1;
- for (var i=0; i<$scope.note.paragraphs.length; i++) {
- if ($scope.note.paragraphs[i].id === paragraphId) {
- newIndex = i+1;
- break;
- }
- }
-
- if (newIndex<0 || newIndex>=$scope.note.paragraphs.length) {
- return;
- }
- $rootScope.$emit('sendNewEvent', { op: 'MOVE_PARAGRAPH', data : {id: paragraphId, index: newIndex}});
- });
-
- $scope.$on('moveFocusToPreviousParagraph', function(event, currentParagraphId){
- var focus = false;
- for (var i=$scope.note.paragraphs.length-1; i>=0; i--) {
- if (focus === false ) {
- if ($scope.note.paragraphs[i].id === currentParagraphId) {
- focus = true;
- continue;
- }
- } else {
- var p = $scope.note.paragraphs[i];
- if (!p.config.hide && !p.config.editorHide && !p.config.tableHide) {
- $scope.$broadcast('focusParagraph', $scope.note.paragraphs[i].id);
- break;
- }
- }
- }
- });
-
- $scope.$on('moveFocusToNextParagraph', function(event, currentParagraphId){
- var focus = false;
- for (var i=0; i<$scope.note.paragraphs.length; i++) {
- if (focus === false ) {
- if ($scope.note.paragraphs[i].id === currentParagraphId) {
- focus = true;
- continue;
- }
- } else {
- var p = $scope.note.paragraphs[i];
- if (!p.config.hide && !p.config.editorHide && !p.config.tableHide) {
- $scope.$broadcast('focusParagraph', $scope.note.paragraphs[i].id);
- break;
- }
- }
- }
- });
-
- var updateNote = function(note) {
- /** update Note name */
- if (note.name !== $scope.note.name) {
- console.log('change note name: %o to %o', $scope.note.name, note.name);
- $scope.note.name = note.name;
- }
-
- $scope.note.config = note.config;
- $scope.note.info = note.info;
-
- var newParagraphIds = note.paragraphs.map(function(x) {return x.id;});
- var oldParagraphIds = $scope.note.paragraphs.map(function(x) {return x.id;});
-
- var numNewParagraphs = newParagraphIds.length;
- var numOldParagraphs = oldParagraphIds.length;
-
- /** add a new paragraph */
- if (numNewParagraphs > numOldParagraphs) {
- for (var index in newParagraphIds) {
- if (oldParagraphIds[index] !== newParagraphIds[index]) {
- $scope.note.paragraphs.splice(index, 0, note.paragraphs[index]);
- break;
- }
- }
- }
-
- /** update or move paragraph */
- if (numNewParagraphs === numOldParagraphs) {
- for (var idx in newParagraphIds) {
- var newEntry = note.paragraphs[idx];
- if (oldParagraphIds[idx] === newParagraphIds[idx]) {
- $scope.$broadcast('updateParagraph', {paragraph: newEntry});
- } else {
- // move paragraph
- var oldIdx = oldParagraphIds.indexOf(newParagraphIds[idx]);
- $scope.note.paragraphs.splice(oldIdx, 1);
- $scope.note.paragraphs.splice(idx, 0, newEntry);
- // rebuild id list since paragraph has moved.
- oldParagraphIds = $scope.note.paragraphs.map(function(x) {return x.id;});
- }
- }
- }
-
- /** remove paragraph */
- if (numNewParagraphs < numOldParagraphs) {
- for (var oldidx in oldParagraphIds) {
- if(oldParagraphIds[oldidx] !== newParagraphIds[oldidx]) {
- $scope.note.paragraphs.splice(oldidx, 1);
- break;
- }
- }
- }
- };
-
- var getInterpreterBindings = function(callback) {
- $http.get(getRestApiBase()+ '/notebook/interpreter/bind/' +$scope.note.id).
- success(function(data, status, headers, config) {
- $scope.interpreterBindings = data.body;
- $scope.interpreterBindingsOrig = jQuery.extend(true, [], $scope.interpreterBindings); // to check dirty
- if (callback) {
- callback();
- }
- }).
- error(function(data, status, headers, config) {
- console.log('Error %o %o', status, data.message);
- });
- };
-
- var getInterpreterBindingsCallBack = function() {
- var selected = false;
- for (var i in $scope.interpreterBindings) {
- var setting = $scope.interpreterBindings[i];
- if (setting.selected) {
- selected = true;
- break;
- }
- }
-
- if (!selected) {
- // make default selection
- var selectedIntp = {};
- for (var i in $scope.interpreterBindings) {
- var setting = $scope.interpreterBindings[i];
- if (!selectedIntp[setting.group]) {
- setting.selected = true;
- selectedIntp[setting.group] = true;
- }
- }
- $scope.showSetting = true;
- }
- };
-
- $scope.interpreterSelectionListeners = {
- accept : function(sourceItemHandleScope, destSortableScope) {return true;},
- itemMoved: function (event) {},
- orderChanged: function(event) {}
- };
-
- $scope.openSetting = function() {
- $scope.showSetting = true;
- getInterpreterBindings();
- };
-
- $scope.closeSetting = function() {
- if (isSettingDirty()) {
- var result = confirm('Changes will be discarded');
- if (!result) {
- return;
- }
- }
- $scope.showSetting = false;
- };
-
- $scope.saveSetting = function() {
- var selectedSettingIds = [];
- for (var no in $scope.interpreterBindings) {
- var setting = $scope.interpreterBindings[no];
- if (setting.selected) {
- selectedSettingIds.push(setting.id);
- }
- }
-
- $http.put(getRestApiBase() + '/notebook/interpreter/bind/' + $scope.note.id,
- selectedSettingIds).
- success(function(data, status, headers, config) {
- console.log('Interpreter binding %o saved', selectedSettingIds);
- $scope.showSetting = false;
- }).
- error(function(data, status, headers, config) {
- console.log('Error %o %o', status, data.message);
- });
- };
-
- $scope.toggleSetting = function() {
- if ($scope.showSetting) {
- $scope.closeSetting();
- } else {
- $scope.openSetting();
- }
- };
-
- var isSettingDirty = function() {
- if (angular.equals($scope.interpreterBindings, $scope.interpreterBindingsOrig)) {
- return false;
- } else {
- return true;
- }
- };
-
- $scope.$on('angularObjectUpdate', function(event, data) {
- if (data.noteId === $scope.note.id) {
- var scope = $rootScope.compiledScope;
- var varName = data.angularObject.name;
-
- if (angular.equals(data.angularObject.object, scope[varName])) {
- // return when update has no change
- return;
- }
-
- if (!angularObjectRegistry[varName]) {
- angularObjectRegistry[varName] = {
- interpreterGroupId : data.interpreterGroupId,
- }
- }
-
- angularObjectRegistry[varName].skipEmit = true;
-
- if (!angularObjectRegistry[varName].clearWatcher) {
- angularObjectRegistry[varName].clearWatcher = scope.$watch(varName, function(newValue, oldValue) {
- if (angularObjectRegistry[varName].skipEmit) {
- angularObjectRegistry[varName].skipEmit = false;
- return;
- }
-
- $rootScope.$emit('sendNewEvent', {
- op: 'ANGULAR_OBJECT_UPDATED',
- data: {
- noteId: $routeParams.noteId,
- name:varName,
- value:newValue,
- interpreterGroupId:angularObjectRegistry[varName].interpreterGroupId
- }
- });
- });
- }
- scope[varName] = data.angularObject.object;
- }
-
- });
-
- var isFunction = function(functionToCheck) {
- var getType = {};
- return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
- }
-
-});