You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by mi...@apache.org on 2016/06/26 06:28:11 UTC
zeppelin git commit: [ZEPPELIN-846] Fix Long Notebook Dropdown
Repository: zeppelin
Updated Branches:
refs/heads/master 0209bc3cb -> eca39e2f3
[ZEPPELIN-846] Fix Long Notebook Dropdown
### What is this PR for?
This PR is fixing the bug by implementing a new layout for the Notebook Dropdown menu.
Reason being that setting a maximum height and having a scrollbar doesn't mix with having bootstrap submenus.
In term of dropdown layout, I think we have 2 options:
* The one I implemented, a tree view similar to the one in the home page, I can probably uniform both of them later. One possible problem is the dropdown width getting bigger and bigger as we indent at each submenu.
* The second one would not have any indent, but use a background color to show elements in the same folder (A grey that goes clearer as we go in the submenus)
<img width="691" alt="screen shot 2016-06-25 at 1 42 41 am" src="https://cloud.githubusercontent.com/assets/710411/16344155/2d387af0-3a76-11e6-87ba-9626d9f17fea.png">
Reworking the whole notebook list and dropdown will probably need a lot more work later (especially in term of refactoring and code cleaning), so I'm not sure where the scope of this PR should stop, especially with the release coming. I think the layout I implemented is fine to solve the immediate problem, and it is always possible to switch to the layout of option 2 later if we think it is best.
### What type of PR is it?
Hot Fix
### Todos
* [ ] - Rebase & Double Check the filtering and Notebook ordering after #1066
### What is the Jira issue?
https://issues.apache.org/jira/browse/ZEPPELIN-846
### How should this be tested?
Just play with the folder structure and check the notebook dropdown
### Screenshots (if appropriate)
![openingfolder](https://cloud.githubusercontent.com/assets/710411/16343658/583e1064-3a73-11e6-8607-bcdced587636.gif)
![notebookisrunnable](https://cloud.githubusercontent.com/assets/710411/16343663/5c10894c-3a73-11e6-9f54-c32136d3437a.gif)
### Questions:
* Does the licenses files need update? No
* Is there breaking changes for older versions? No
* Does this needs documentation? No
Author: Damien CORNEAU <co...@gmail.com>
Closes #1081 from corneadoug/fix/longNavbarNotebookList and squashes the following commits:
223a7d3 [Damien CORNEAU] Fix Notebook dropdown css when on mobile
8170782 [Damien CORNEAU] Fix Notebook ordering in dropdown
5a0fa09 [Damien CORNEAU] fix jshint errors
a52b219 [Damien CORNEAU] Change Notebook dropdown style
Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/eca39e2f
Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/eca39e2f
Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/eca39e2f
Branch: refs/heads/master
Commit: eca39e2f3f3082bf997183879e5999b4f61faf8b
Parents: 0209bc3
Author: Damien CORNEAU <co...@gmail.com>
Authored: Sun Jun 26 11:24:09 2016 +0900
Committer: Mina Lee <mi...@apache.org>
Committed: Sat Jun 25 23:28:02 2016 -0700
----------------------------------------------------------------------
zeppelin-web/src/app/home/home.css | 47 +++++++++++++++-----
.../expandCollapse/expandCollapse.css | 17 +++++++
.../expandCollapse/expandCollapse.directive.js | 33 ++++++++++++++
.../navbar/navbar-notebookList-elem.html | 36 +++++++++++++++
zeppelin-web/src/components/navbar/navbar.html | 20 +++------
zeppelin-web/src/index.html | 2 +
6 files changed, 130 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/eca39e2f/zeppelin-web/src/app/home/home.css
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/home/home.css b/zeppelin-web/src/app/home/home.css
index 75f2521..8b37eb8 100644
--- a/zeppelin-web/src/app/home/home.css
+++ b/zeppelin-web/src/app/home/home.css
@@ -23,6 +23,10 @@ body {
-ms-overflow-style: scrollbar;
}
+.home {
+ margin-bottom: 0px !important;
+}
+
.bodyAsIframe {
background: white;
}
@@ -99,10 +103,29 @@ a.navbar-brand:hover {
color: #fff !important;
}
+/* Css for the Notebook Dropdown */
+
+.expandable ul {
+ padding-left: 10px !important;
+}
+
+.expandable li {
+ list-style-type: none;
+}
+
+.dropdown-menu .notebook-list-item {
+ text-decoration: none;
+}
+
+.dropdown-menu .notebook-list-item:hover {
+ background: #f5f5f5;
+}
+
/* bootstrap customization for scrollable dropdown menu */
-.dropdown-menu > .scrollbar-container > li > a {
+.dropdown-menu > .scrollbar-container > li > a,
+.dropdown-menu .notebook-list-item {
display: block;
- padding: 3px 20px;
+ padding: 1px 10px;
clear: both;
font-weight: normal;
line-height: 1.42857143;
@@ -117,9 +140,9 @@ a.navbar-brand:hover {
background: #f5f5f5;
}
-.dropdown-menu > .scrollbar-container > .active > a,
-.dropdown-menu > .scrollbar-container > .active > a:hover,
-.dropdown-menu > .scrollbar-container > .active > a:focus {
+#notebook-list li.active > a,
+#notebook-list li.active > a:hover,
+#notebook-list li.active > a:focus {
color: #fff;
text-decoration: none;
background: #428bca;
@@ -216,11 +239,13 @@ a.navbar-brand:hover {
}
@media (max-width: 767px) {
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a,
+ #notebook-list li a {
color: #D3D3D3;
}
- .navbar-nav .open .dropdown-menu > .scrollbar-container > li > a {
+ .navbar-nav .open .dropdown-menu > .scrollbar-container > li > a,
+ #notebook-list li a {
padding: 5px 15px 5px 25px;
line-height: 20px;
}
@@ -230,7 +255,8 @@ a.navbar-brand:hover {
}
.navbar-inverse .navbar-nav .open .dropdown-menu > .scrollbar-container > li > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .scrollbar-container > li > a:focus {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .scrollbar-container > li > a:focus,
+ #notebook-list li a:hover {
color: #fff;
background: transparent;
}
@@ -263,8 +289,9 @@ a.navbar-brand:hover {
}
@media (min-width: 768px) {
- #notebook-list {
- max-height: 500px;
+ .dropdown-menu.navbar-dropdown-maxHeight {
+ max-height: calc(100vh - 60px);
+ overflow: auto;
}
}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/eca39e2f/zeppelin-web/src/components/expandCollapse/expandCollapse.css
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/expandCollapse/expandCollapse.css b/zeppelin-web/src/components/expandCollapse/expandCollapse.css
new file mode 100644
index 0000000..b1a60d8
--- /dev/null
+++ b/zeppelin-web/src/components/expandCollapse/expandCollapse.css
@@ -0,0 +1,17 @@
+/*
+ * 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.
+ */
+
+ .expandable {
+ display: none;
+}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/eca39e2f/zeppelin-web/src/components/expandCollapse/expandCollapse.directive.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/expandCollapse/expandCollapse.directive.js b/zeppelin-web/src/components/expandCollapse/expandCollapse.directive.js
new file mode 100644
index 0000000..ec40175
--- /dev/null
+++ b/zeppelin-web/src/components/expandCollapse/expandCollapse.directive.js
@@ -0,0 +1,33 @@
+/*
+ * 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('expandCollapse', function() {
+ return {
+ restrict: 'EA',
+ link: function(scope, element, attrs){
+ angular.element(element).click( function(event) {
+ if(angular.element(element).find('.expandable:visible').length > 1) {
+ angular.element(element).find('.expandable:visible').slideUp('slow');
+ angular.element(element).find('i.icon-folder-alt').toggleClass('icon-folder icon-folder-alt');
+ } else {
+ angular.element(element).find('.expandable').first().slideToggle('200',function() {
+ angular.element(element).find('i').first().toggleClass('icon-folder icon-folder-alt');
+ });
+ }
+ event.stopPropagation();
+ });
+ }
+ };
+});
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/eca39e2f/zeppelin-web/src/components/navbar/navbar-notebookList-elem.html
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/components/navbar/navbar-notebookList-elem.html b/zeppelin-web/src/components/navbar/navbar-notebookList-elem.html
new file mode 100644
index 0000000..590154f
--- /dev/null
+++ b/zeppelin-web/src/components/navbar/navbar-notebookList-elem.html
@@ -0,0 +1,36 @@
+<!--
+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.
+-->
+
+<a class="notebook-list-item" ng-if="note.id" href="#/notebook/{{note.id}}">
+ <i style="font-size: 10px; margin-right: 5px;" class="icon-doc"></i>
+ <span>{{noteName(note)}}</span>
+</a>
+<li ng-if="!note.id" ng-click="$event.stopPropagation()">
+ <expand-collapse>
+ <div>
+ <a class="notebook-list-item" href="javascript:void(0)">
+ <i style="font-size: 10px; margin-right: 5px;" class="icon-folder"></i>
+ <span>{{noteName(note)}}</span>
+ </a>
+ </div>
+ <div class="expandable" style="color: black;">
+ <ul>
+ <li ng-repeat="note in note.children | orderBy:navbar.arrayOrderingSrv.notebookListOrdering track by $index"
+ ng-class="{'active' : navbar.isActive(note.id)}"
+ ng-include="'components/navbar/navbar-notebookList-elem.html'">
+ </li>
+ </ul>
+ </div>
+ </expand-collapse>
+</li>
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/eca39e2f/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 cfe1559..4a7ad68 100644
--- a/zeppelin-web/src/components/navbar/navbar.html
+++ b/zeppelin-web/src/components/navbar/navbar.html
@@ -10,18 +10,6 @@ See the License for the specific language governing permissions and
limitations under the License.
-->
-<script type="text/ng-template" id="notebook_list_renderer.html">
- <a ng-if="note.id" href="#/notebook/{{note.id}}">{{noteName(note)}} </a>
- <li ng-if="!note.id"
- class="dropdown-submenu">
- <a tabindex="-1" href="javascript: void(0)">{{noteName(note)}}</a>
- <ul class="dropdown-menu">
- <li ng-repeat="note in note.children track by $index" ng-class="{'active' : navbar.isActive(note.id)}" ng-include="'notebook_list_renderer.html'">
- </li>
- </ul>
- </li>
-</script>
-
<div class="navbar navbar-inverse navbar-fixed-top" style="display: none;" role="navigation" ng-class="{'displayNavBar': !asIframe}">
<div class="container">
<div class="navbar-header">
@@ -39,12 +27,14 @@ limitations under the License.
<ul class="nav navbar-nav" ng-if="ticket">
<li class="dropdown" dropdown>
<a href="#" class="dropdown-toggle" dropdown-toggle>Notebook <span class="caret"></span></a>
- <ul class="dropdown-menu" role="menu">
+ <ul class="dropdown-menu navbar-dropdown-maxHeight" role="menu">
<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 class="filter-names" ng-include="'components/filterNoteNames/filter-note-names.html'"></li>
- <li ng-repeat="note in navbar.notes.root.children | filter:query | orderBy:home.arrayOrderingSrv.notebookListOrdering track by $index" ng-class="{'active' : navbar.isActive(note.id)}" ng-include="'notebook_list_renderer.html'"></li>
+ <li ng-repeat="note in navbar.notes.root.children | filter:query | orderBy:navbar.arrayOrderingSrv.notebookListOrdering track by $index"
+ ng-class="{'active' : navbar.isActive(note.id)}" ng-include="'components/navbar/navbar-notebookList-elem.html'">
+ </li>
</div>
</ul>
</li>
@@ -93,7 +83,7 @@ limitations under the License.
</button>
<span ng-if="!ticket" style="margin: 5px;"></span>
<ul class="dropdown-menu">
- <li><a href="" data-toggle="modal" data-target="#aboutModal">About Zeppelin</a>
+ <li><a href="" data-toggle="modal" data-target="#aboutModal">About Zeppelin</a></li>
<li role="separator" style="margin: 5px 0;" class="divider"></li>
<li><a href="#/interpreter">Interpreter</a></li>
<li><a href="#/credential">Credential</a></li>
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/eca39e2f/zeppelin-web/src/index.html
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/index.html b/zeppelin-web/src/index.html
index cad1308..7cbdde5 100644
--- a/zeppelin-web/src/index.html
+++ b/zeppelin-web/src/index.html
@@ -57,6 +57,7 @@ limitations under the License.
<link rel="stylesheet" href="app/interpreter/interpreter.css">
<link rel="stylesheet" href="app/credential/credential.css">
<link rel="stylesheet" href="app/configuration/configuration.css">
+ <link rel="stylesheet" href="components/expandCollapse/expandCollapse.css">
<link rel="stylesheet" href="fonts/font-awesome.min.css">
<link rel="stylesheet" href="fonts/simple-line-icons.css">
<link rel="stylesheet" href="fonts/custom-font.css">
@@ -153,6 +154,7 @@ limitations under the License.
<script src="components/arrayOrderingSrv/arrayOrdering.service.js"></script>
<script src="components/navbar/navbar.controller.js"></script>
<script src="components/ngescape/ngescape.directive.js"></script>
+ <script src="components/expandCollapse/expandCollapse.directive.js"></script>
<script src="components/noteName-create/notename.controller.js"></script>
<script src="components/noteName-import/notenameImport.controller.js"></script>
<script src="components/popover-html-unsafe/popover-html-unsafe.directive.js"></script>