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/08/09 21:48:37 UTC
incubator-zeppelin git commit: The user will be able to provide a
name to note at creation time
Repository: incubator-zeppelin
Updated Branches:
refs/heads/master 9a3e55533 -> 3bc145f04
The user will be able to provide a name to note at creation time
Ability to name a note while creating from UI. By default a name is shown. User can change that name. If user does not provide any name then we randomly name it at backend like the way its happening right now.
Author: Karuppayya <ka...@qubole.com>
Author: Karuppayya <ka...@outlook.com>
Author: Karuppayya <ka...@outlook.com>
Closes #156 from Karuppayya/notename and squashes the following commits:
02e6073 [Karuppayya] Fix js error
eb6ff07 [Karuppayya] merge os/master
d6f30dd [Karuppayya] Allow configuring the id of the input , whose text should be selected. If not id is passed, text will not be selected
ca4357c [Karuppayya] Fix build time js warnings
98d6cfa [Karuppayya] Fixing a bad merge
4aba316 [Karuppayya] Removing duplicate entry
58b1c43 [Karuppayya] Removing duplicate entry
1972e12 [Karuppayya] Merge branch 'notename' of github.com:Karuppayya/incubator-zeppelin into notename
606282a [Karuppayya] Browse seems to recognize "javascript:void(0)" as cross origin request. Removed it. We just need a pointer when we hover over "create new note". Fixed it.
9ae1431 [Karuppayya] *Remove DOM maniupaltion from controller
6d61425 [Karuppayya] *change directive name to be more specific. *Make directive generic by provisioning callbacks. *Make "note" to "Note"(in the generated name)
d8403f1 [Karuppayya] Removing a flag that is not required
9b8db92 [Karuppayya] Selenium test fix
4c8f422 [Karuppayya] test fix
03c382b [Karuppayya] Fix selenium test.
5a980c7 [Karuppayya] Fixing Test
7206579 [Karuppayya] Fixing tests
80e4995 [Karuppayya] Add License header to new file that was added.
eb63ac4 [Karuppayya] When no name is given, note is created with default name
3aa4eb5 [Karuppayya] The user will be able to provide a name to note at creation time
1199ac3 [Karuppayya] Browse seems to recognize "javascript:void(0)" as cross origin request. Removed it. We just need a pointer when we hover over "create new note". Fixed it.
9816cd7 [Karuppayya] resolving conflicts
ed35811 [Karuppayya] *Remove DOM maniupaltion from controller
b9059db [Karuppayya] *change directive name to be more specific. *Make directive generic by provisioning callbacks. *Make "note" to "Note"(in the generated name)
f7499cf [Karuppayya] Merge branch 'notename' of github.com:Karuppayya/incubator-zeppelin into notename
a05096b [Karuppayya] Removing a flag that is not required
307db03 [Karuppayya] Selenium test fix
ea99cb0 [Karuppayya] test fix
8eefcc0 [Karuppayya] Fix selenium test.
caae8d2 [Karuppayya] Fixing Test
d9416de [Karuppayya] Fixing tests
f2cf950 [Karuppayya] Add License header to new file that was added.
05d3af0 [Karuppayya] When no name is given, note is created with default name
0a7db2b [Karuppayya] The user will be able to provide a name to note at creation time
Project: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/commit/3bc145f0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/tree/3bc145f0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/diff/3bc145f0
Branch: refs/heads/master
Commit: 3bc145f043a61d7ba0c07299fcb001c424afe8d9
Parents: 9a3e555
Author: Karuppayya <ka...@qubole.com>
Authored: Sun Aug 9 11:38:47 2015 +0530
Committer: Lee moon soo <mo...@apache.org>
Committed: Sun Aug 9 12:48:30 2015 -0700
----------------------------------------------------------------------
.../apache/zeppelin/socket/NotebookServer.java | 9 ++++-
.../java/org/apache/zeppelin/ZeppelinIT.java | 10 ++++-
zeppelin-web/src/app/home/home.html | 2 +-
zeppelin-web/src/components/navbar/navbar.html | 2 +-
.../noteName-create/note-name-dialog.html | 41 ++++++++++++++++++++
.../noteName-create/notename.controller.js | 40 +++++++++++++++++++
.../noteName-create/visible.directive.js | 38 ++++++++++++++++++
.../websocketEvents/websocketMsg.service.js | 4 +-
zeppelin-web/src/index.html | 3 ++
9 files changed, 141 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/3bc145f0/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java
----------------------------------------------------------------------
diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java
index ed35ea1..fe0d391 100644
--- a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java
+++ b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java
@@ -98,7 +98,7 @@ public class NotebookServer extends WebSocketServlet implements
sendNote(conn, notebook, messagereceived);
break;
case NEW_NOTE:
- createNote(conn, notebook);
+ createNote(conn, notebook, messagereceived);
break;
case DEL_NOTE:
removeNote(conn, notebook, messagereceived);
@@ -334,9 +334,14 @@ public class NotebookServer extends WebSocketServlet implements
return cronUpdated;
}
- private void createNote(WebSocket conn, Notebook notebook) throws IOException {
+ private void createNote(WebSocket conn, Notebook notebook, Message message) throws IOException {
Note note = notebook.createNote();
note.addParagraph(); // it's an empty note. so add one paragraph
+ if (message != null) {
+ String noteName = (String) message.get("name");
+ if (noteName != null && !noteName.isEmpty())
+ note.setName(noteName);
+ }
note.persist();
broadcastNote(note);
broadcastNoteList();
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/3bc145f0/zeppelin-server/src/test/java/org/apache/zeppelin/ZeppelinIT.java
----------------------------------------------------------------------
diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/ZeppelinIT.java b/zeppelin-server/src/test/java/org/apache/zeppelin/ZeppelinIT.java
index b170a95..215d3de 100644
--- a/zeppelin-server/src/test/java/org/apache/zeppelin/ZeppelinIT.java
+++ b/zeppelin-server/src/test/java/org/apache/zeppelin/ZeppelinIT.java
@@ -37,6 +37,7 @@ import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.safari.SafariDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
+import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
/**
@@ -300,8 +301,13 @@ public class ZeppelinIT {
notebookTitles.add(el.getText());
}
- WebElement createNoteLink = driver.findElement(By.partialLinkText("Create new note"));
- createNoteLink.click();
+ WebElement createNoteLink = driver.findElement(By.xpath("//div[contains(@class, \"col-md-4\")]/div/h5/a"));
+ createNoteLink.click();
+
+ WebDriverWait block = new WebDriverWait(driver, 10);
+ WebElement modal = block.until(ExpectedConditions.visibilityOfElementLocated(By.id("noteNameModal")));
+ WebElement createNoteButton = modal.findElement(By.id("createNoteButton"));
+ createNoteButton.click();
try {
Thread.sleep(500); // wait for notebook list updated
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/3bc145f0/zeppelin-web/src/app/home/home.html
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/home/home.html b/zeppelin-web/src/app/home/home.html
index 9e7963c..b3991ae 100644
--- a/zeppelin-web/src/app/home/home.html
+++ b/zeppelin-web/src/app/home/home.html
@@ -27,7 +27,7 @@ limitations under the License.
<h4>Notebook</h4>
<div>
- <h5><a href="javascript:void(0);" ng-click="home.websocketMsgSrv.createNotebook()" style="text-decoration: none;">
+ <h5><a href="" data-toggle="modal" data-target="#noteNameModal" style="text-decoration: none;">
<i style="font-size: 15px;" class="icon-notebook"></i> Create new note</a></h5>
<ul style="list-style-type: none;">
<li ng-repeat="note in home.notes.list track by $index"><i style="font-size: 10px;" class="icon-doc"></i>
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/3bc145f0/zeppelin-web/src/components/navbar/navbar.html
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/navbar/navbar.html b/zeppelin-web/src/components/navbar/navbar.html
index e583098..995ba76 100644
--- a/zeppelin-web/src/components/navbar/navbar.html
+++ b/zeppelin-web/src/components/navbar/navbar.html
@@ -29,7 +29,7 @@ limitations under the License.
<li class="dropdown" dropdown>
<a href="#" class="dropdown-toggle" dropdown-toggle>Notebook <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
- <li><a href="javascript:void(0);" ng-click="navbar.websocketMsgSrv.createNotebook()"><i class="fa fa-plus"></i> Create new note</a></li>
+ <li><a href="" data-toggle="modal" data-target="#noteNameModal"><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 navbar.notes.list track by $index" ng-class="{'active' : navbar.isActive(note.id)}">
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/3bc145f0/zeppelin-web/src/components/noteName-create/note-name-dialog.html
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/noteName-create/note-name-dialog.html b/zeppelin-web/src/components/noteName-create/note-name-dialog.html
new file mode 100644
index 0000000..e7670f9
--- /dev/null
+++ b/zeppelin-web/src/components/noteName-create/note-name-dialog.html
@@ -0,0 +1,41 @@
+<!--
+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.
+-->
+<div ng-controller="NotenameCtrl as notenamectrl">
+ <div id="noteNameModal" class="modal fade" role="dialog" modalvisible previsiblecallback="notenamectrl.preVisible()"
+ targetinput="noteName" tabindex='-1'>
+ <div class="modal-dialog">
+
+ <!-- Modal content-->
+ <div class="modal-content" id="NotenameCtrl">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal">×</button>
+ <h4 class="modal-title">Create new note</h4>
+ </div>
+ <div class="modal-body">
+ <div class="form-group">
+ <label for="noteName">Note Name</label> <input
+ placeholder="Note name" type="text" class="form-control"
+ id="noteName" ng-model="notename">
+ </div>
+ </div>
+ <div class="modal-footer">
+ <button type="button" id="createNoteButton"
+ class="btn btn-default"
+ data-dismiss="modal" ng-click="notenamectrl.createNote()">Create
+ Note</button>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/3bc145f0/zeppelin-web/src/components/noteName-create/notename.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/noteName-create/notename.controller.js b/zeppelin-web/src/components/noteName-create/notename.controller.js
new file mode 100644
index 0000000..3f0e82d
--- /dev/null
+++ b/zeppelin-web/src/components/noteName-create/notename.controller.js
@@ -0,0 +1,40 @@
+/*
+ * 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').controller('NotenameCtrl', function($scope, $rootScope, websocketMsgSrv) {
+ var vm = this;
+ vm.websocketMsgSrv = websocketMsgSrv;
+
+ vm.createNote = function(){
+ vm.websocketMsgSrv.createNotebook($scope.notename);
+ };
+ vm.preVisible = function(){
+ var generatedName = vm.generateName();
+ $scope.notename = 'Note ' + generatedName;
+ $scope.$apply();
+ };
+ vm.generateName = function () {
+ var DICTIONARY = [ '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B',
+ 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'M', 'N', 'P', 'Q', 'R',
+ 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ];
+ var randIndex, name = '';
+ for (var i = 0; i < 9; i++) {
+ randIndex = Math.floor(Math.random() * 32);
+ name += DICTIONARY[randIndex];
+ }
+ return name;
+ };
+});
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/3bc145f0/zeppelin-web/src/components/noteName-create/visible.directive.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/noteName-create/visible.directive.js b/zeppelin-web/src/components/noteName-create/visible.directive.js
new file mode 100644
index 0000000..8d3e9a1
--- /dev/null
+++ b/zeppelin-web/src/components/noteName-create/visible.directive.js
@@ -0,0 +1,38 @@
+/*
+ * 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('modalvisible', function () {
+ return {
+ restrict: 'A',
+ scope: {
+ preVisibleCallback: '&previsiblecallback',
+ postVisibleCallback: '&postvisiblecallback',
+ targetinput: '@targetinput'
+ },
+ link: function(scope, elem, attrs) {
+ // Add some listeners
+ var previsibleMethod = scope.preVisibleCallback;
+ var postVisibleMethod = scope.postVisibleCallback;
+ elem.on('show.bs.modal',function(e) {
+ previsibleMethod();
+ });
+ elem.on('shown.bs.modal', function(e) {
+ if(scope.targetinput)
+ $(e.target).find('input#' + scope.targetinput ).select();
+ postVisibleMethod();
+ });
+ }
+ };
+});
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/3bc145f0/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js b/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js
index 2c4f132..fcdc51f 100644
--- a/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js
+++ b/zeppelin-web/src/components/websocketEvents/websocketMsg.service.js
@@ -17,8 +17,8 @@ angular.module('zeppelinWebApp').service('websocketMsgSrv', function($rootScope,
return {
- createNotebook: function() {
- websocketEvents.sendNewEvent({op: 'NEW_NOTE'});
+ createNotebook: function(noteName) {
+ websocketEvents.sendNewEvent({op: 'NEW_NOTE',data: {name: noteName}});
},
deleteNotebook: function(noteId) {
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/3bc145f0/zeppelin-web/src/index.html
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/index.html b/zeppelin-web/src/index.html
index 36aa933..a65c944 100644
--- a/zeppelin-web/src/index.html
+++ b/zeppelin-web/src/index.html
@@ -61,6 +61,7 @@ limitations under the License.
</div>
<!-- Modal :: Keyboard shortcuts -->
<div ng-include src="'components/modal-shortcut/modal-shortcut.html'"></div>
+ <div id="note-modal-container" ng-include src="'components/noteName-create/note-name-dialog.html'"></div>
<!-- build:js(.) scripts/oldieshim.js -->
<!--[if lt IE 9]>
<script src="bower_components/es5-shim/es5-shim.js"></script>
@@ -113,10 +114,12 @@ limitations under the License.
<script src="app/notebook/paragraph/paragraph.controller.js"></script>
<script src="components/navbar/navbar.controller.js"></script>
<script src="components/ngescape/ngescape.directive.js"></script>
+ <script src="components/noteName-create/notename.controller.js"></script>
<script src="components/popover-html-unsafe/popover-html-unsafe.directive.js"></script>
<script src="components/ngenter/ngenter.directive.js"></script>
<script src="components/dropdowninput/dropdowninput.directive.js"></script>
<script src="components/resizable/resizable.directive.js"></script>
+ <script src="components/noteName-create/visible.directive.js"></script>
<script src="components/websocketEvents/websocketMsg.service.js"></script>
<script src="components/websocketEvents/websocketEvents.factory.js"></script>
<script src="components/notebookListDataFactory/notebookList.datafactory.js"></script>