From: Samuel Guimarães <sguimaraes943(a)gmail.com>
Signed-off-by: Samuel Guimarães <sguimaraes943(a)gmail.com>
---
configure.ac | 4 +
ui/css/Makefile.am | 8 +-
ui/css/datatables.bootstrap.css | 262 +++++++++++++++++++++++++
ui/css/src/datatables.bootstrap.scss | 310 ++++++++++++++++++++++++++++++
ui/js/src/wok.datatables.js | 42 ++++
ui/libs/Makefile.am | 2 +-
ui/libs/datatables/LICENSE | 22 +++
ui/libs/datatables/Makefile.am | 19 ++
ui/libs/datatables/css/Makefile.am | 21 ++
ui/libs/datatables/css/datatables.min.css | 24 +++
ui/libs/datatables/js/Makefile.am | 21 ++
ui/libs/moment/LICENSE | 22 +++
ui/libs/moment/Makefile.am | 21 ++
ui/pages/login.html.tmpl | 4 +
ui/pages/wok-ui.html.tmpl | 4 +
15 files changed, 783 insertions(+), 3 deletions(-)
create mode 100644 ui/css/datatables.bootstrap.css
create mode 100644 ui/css/src/datatables.bootstrap.scss
create mode 100644 ui/js/src/wok.datatables.js
create mode 100644 ui/libs/datatables/LICENSE
create mode 100644 ui/libs/datatables/Makefile.am
create mode 100644 ui/libs/datatables/css/Makefile.am
create mode 100644 ui/libs/datatables/css/datatables.min.css
create mode 100644 ui/libs/datatables/js/Makefile.am
create mode 100644 ui/libs/moment/LICENSE
create mode 100644 ui/libs/moment/Makefile.am
diff --git a/configure.ac b/configure.ac
index b7ffee4..c7a2787 100644
--- a/configure.ac
+++ b/configure.ac
@@ -142,6 +142,10 @@ AC_CONFIG_FILES([
ui/libs/jquery-ui/themes/base/images/Makefile
ui/libs/list-js/Makefile
ui/libs/lodash/Makefile
+ ui/libs/moment/Makefile
+ ui/libs/datatables/Makefile
+ ui/libs/datatables/js/Makefile
+ ui/libs/datatables/css/Makefile
ui/libs/typeahead/Makefile
ui/pages/Makefile
ui/pages/help/Makefile
diff --git a/ui/css/Makefile.am b/ui/css/Makefile.am
index aee33d7..a779e61 100644
--- a/ui/css/Makefile.am
+++ b/ui/css/Makefile.am
@@ -22,7 +22,7 @@ SUBDIRS = fontawesome opensans
EXTRA_DIST = theme-default
cssdir = $(datadir)/wok/ui/css
-dist_css_DATA = theme-default.min.css jquery-ui.custom.css wok.css bootstrap.custom.css
bootstrap-select.custom.css settings.css
+dist_css_DATA = theme-default.min.css jquery-ui.custom.css wok.css bootstrap.custom.css
bootstrap-select.custom.css settings.css datatables.bootstrap.css
wok: src/wok.scss src/modules/*.scss
echo "Compiling .scss file $<"
@@ -40,7 +40,11 @@ bootstrap-select: src/bootstrap-select.custom.scss
echo "Compiling .scss file $<"
sassc -s expanded $< bootstrap-select.custom.css
-css: wok bootstrap bootstrap-select settings
+datatables: src/datatables.bootstrap.scss
+ echo "Compiling .scss file $<"
+ sassc -s expanded $< datatables.bootstrap.css
+
+css: wok bootstrap bootstrap-select settings datatables
theme-default.min.css: theme-default/*.css
cat $^ > $@
diff --git a/ui/css/datatables.bootstrap.css b/ui/css/datatables.bootstrap.css
new file mode 100644
index 0000000..e039ce8
--- /dev/null
+++ b/ui/css/datatables.bootstrap.css
@@ -0,0 +1,262 @@
+/* Copyright (C) 2008-2016, SpryMedia Ltd.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this
software and associated documentation files (the "Software"), to deal in the
Software without restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to the following
conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE. */
+table.dataTable {
+ clear: both;
+ margin-top: 6px !important;
+ margin-bottom: 6px !important;
+ max-width: none !important;
+ border-collapse: separate !important;
+}
+
+table.dataTable td,
+table.dataTable th {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+table.dataTable td.dataTables_empty,
+table.dataTable th.dataTables_empty {
+ text-align: center;
+}
+
+table.dataTable.nowrap th,
+table.dataTable.nowrap td {
+ white-space: nowrap;
+}
+
+div.dataTables_wrapper div.dataTables_length {
+ text-align: right;
+ padding-left: 10px;
+}
+
+div.dataTables_wrapper div.dataTables_length label {
+ font-weight: normal;
+ text-align: left;
+ white-space: nowrap;
+}
+
+div.dataTables_wrapper div.dataTables_length select, div.dataTables_wrapper
div.dataTables_length .btn {
+ width: 100px;
+ display: inline-block;
+ height: 34px;
+ padding-top: 4px;
+}
+
+div.dataTables_wrapper div.dataTables_length .btn .caret {
+ height: 32px;
+}
+
+div.dataTables_wrapper div.dataTables_length .btn .caret:before {
+ top: 6px;
+}
+
+div.dataTables_wrapper div.dataTables_filter {
+ text-align: right;
+}
+
+div.dataTables_wrapper div.dataTables_filter label {
+ font-weight: normal;
+ white-space: nowrap;
+ text-align: left;
+}
+
+div.dataTables_wrapper div.dataTables_filter input {
+ font-size: 14px;
+ margin-left: 0.5em;
+ display: inline-block;
+ width: auto;
+ font-size: 14px !important;
+}
+
+div.dataTables_wrapper div.dataTables_filter .form-control {
+ width: 514px;
+ height: 34px;
+}
+
+div.dataTables_wrapper div.dataTables_info {
+ padding-top: 8px;
+ white-space: nowrap;
+ text-align: right;
+}
+
+div.dataTables_wrapper div.dataTables_paginate {
+ margin: 0;
+ white-space: nowrap;
+ text-align: left;
+}
+
+div.dataTables_wrapper div.dataTables_paginate ul.pagination {
+ margin: 2px 0;
+ white-space: nowrap;
+}
+
+div.dataTables_wrapper div.dataTables_processing {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 200px;
+ margin-left: -100px;
+ margin-top: -26px;
+ text-align: center;
+ padding: 1em 0;
+}
+
+table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr >
th.sorting_desc, table.dataTable thead > tr > th.sorting,
+table.dataTable thead > tr > td.sorting_asc,
+table.dataTable thead > tr > td.sorting_desc,
+table.dataTable thead > tr > td.sorting {
+ padding-right: 30px;
+}
+
+table.dataTable thead > tr > th:active,
+table.dataTable thead > tr > td:active {
+ outline: none;
+}
+
+table.dataTable thead .sorting,
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc,
+table.dataTable thead .sorting_asc_disabled,
+table.dataTable thead .sorting_desc_disabled {
+ cursor: pointer;
+ position: relative;
+}
+
+table.dataTable thead .sorting:before, table.dataTable thead .sorting:after,
+table.dataTable thead .sorting_asc:before,
+table.dataTable thead .sorting_asc:after,
+table.dataTable thead .sorting_desc:before,
+table.dataTable thead .sorting_desc:after,
+table.dataTable thead .sorting_asc_disabled:before,
+table.dataTable thead .sorting_asc_disabled:after,
+table.dataTable thead .sorting_desc_disabled:before,
+table.dataTable thead .sorting_desc_disabled:after {
+ position: absolute;
+ bottom: 8px;
+ right: 8px;
+ display: block;
+ opacity: 0.3;
+ font: normal normal normal 19px/1 FontAwesome;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+table.dataTable thead .sorting:after {
+ top: 13px;
+ content: "\f107";
+ /* sort - arrow down */
+}
+
+table.dataTable thead .sorting:before {
+ top: 3px;
+ content: "\f106";
+ /* sort - arrow up */
+}
+
+table.dataTable thead .sorting_asc:after {
+ opacity: 0.8;
+ content: "\f107";
+ /* sort-by-attributes */
+ top: 13px;
+}
+
+table.dataTable thead .sorting_desc:after {
+ opacity: 0.8;
+ content: "\f106";
+ /* sort-by-attributes-alt */
+ top: 3px;
+}
+
+table.dataTable thead .sorting_asc_disabled:after,
+table.dataTable thead .sorting_desc_disabled:after {
+ color: #eee;
+}
+
+table.dataTable tfoot {
+ display: none;
+}
+
+div.dataTables_scrollHead table.dataTable {
+ margin-bottom: 0 !important;
+}
+
+div.dataTables_scrollBody table {
+ border-top: none;
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+}
+
+div.dataTables_scrollBody table thead .sorting:after,
+div.dataTables_scrollBody table thead .sorting_asc:after,
+div.dataTables_scrollBody table thead .sorting_desc:after {
+ display: none;
+}
+
+div.dataTables_scrollBody table tbody tr:first-child th,
+div.dataTables_scrollBody table tbody tr:first-child td {
+ border-top: none;
+}
+
+div.dataTables_scrollFoot table {
+ margin-top: 0 !important;
+ border-top: none;
+}
+
+@media screen and (max-width: 767px) {
+ div.dataTables_wrapper div.dataTables_length,
+ div.dataTables_wrapper div.dataTables_filter,
+ div.dataTables_wrapper div.dataTables_info,
+ div.dataTables_wrapper div.dataTables_paginate {
+ text-align: center;
+ }
+}
+
+table.dataTable.table-condensed > thead > tr > th {
+ padding-right: 20px;
+}
+
+table.dataTable.table-condensed .sorting:after,
+table.dataTable.table-condensed .sorting_asc:after,
+table.dataTable.table-condensed .sorting_desc:after {
+ top: 6px;
+ right: 6px;
+}
+
+table.table-bordered.dataTable th,
+table.table-bordered.dataTable td {
+ border-left-width: 0;
+}
+
+table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable
th:last-child,
+table.table-bordered.dataTable td:last-child,
+table.table-bordered.dataTable td:last-child {
+ border-right-width: 0;
+}
+
+table.table-bordered.dataTable tbody th,
+table.table-bordered.dataTable tbody td {
+ border-bottom-width: 0;
+}
+
+div.dataTables_scrollHead table.table-bordered {
+ border-bottom-width: 0;
+}
+
+div.table-responsive > div.dataTables_wrapper > div.row {
+ margin: 0;
+}
+
+div.table-responsive > div.dataTables_wrapper > div.row >
div[class^="col-"]:first-child {
+ padding-left: 0;
+}
+
+div.table-responsive > div.dataTables_wrapper > div.row >
div[class^="col-"]:last-child {
+ padding-right: 0;
+}
diff --git a/ui/css/src/datatables.bootstrap.scss b/ui/css/src/datatables.bootstrap.scss
new file mode 100644
index 0000000..854fbe0
--- /dev/null
+++ b/ui/css/src/datatables.bootstrap.scss
@@ -0,0 +1,310 @@
+//
+// Project Wok
+//
+// Copyright IBM Corp, 2016
+//
+// 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.
+//
+
+/* Copyright (C) 2008-2016, SpryMedia Ltd.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this
software and associated documentation files (the "Software"), to deal in the
Software without restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to the following
conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or
substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE. */
+
+@import "modules/wok-variables";
+
+table.dataTable {
+ clear: both;
+ margin-top: 6px !important;
+ margin-bottom: 6px !important;
+ max-width: none !important;
+ border-collapse: separate !important;
+
+ td,
+ th {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+
+ &.dataTables_empty {
+ text-align: center;
+ }
+ }
+
+ // Style options for the table. Foundation provides its own, but it is also
+ // useful to have a few more for DataTables
+ &.nowrap {
+ th,
+ td {
+ white-space: nowrap;
+ }
+ }
+}
+
+
+// DataTables' built in feature elements
+div.dataTables_wrapper {
+ div.dataTables_length {
+ text-align: right;
+ padding-left: 10px;
+
+ label {
+ font-weight: normal;
+ text-align: left;
+ white-space: nowrap;
+ }
+
+ select, .btn {
+ width: 100px;
+ display: inline-block;
+ height: 34px;
+ padding-top: 4px;
+ }
+
+ .btn .caret {
+ height: 32px;
+ &:before {
+ top: 6px;
+ }
+ }
+ }
+
+ div.dataTables_filter {
+ text-align: right;
+
+ label {
+ font-weight: normal;
+ white-space: nowrap;
+ text-align: left;
+ }
+
+ input {
+ font-size: 14px;
+ margin-left: 0.5em;
+ display: inline-block;
+ width: auto;
+ font-size: $font-size-base !important;
+ }
+
+ .form-control {
+ width: 514px; // Adust filter input with Wok filter size
+ height: 34px;
+ }
+ }
+
+ div.dataTables_info {
+ padding-top: 8px;
+ white-space: nowrap;
+ text-align: right;
+ }
+
+ div.dataTables_paginate {
+ margin: 0;
+ white-space: nowrap;
+ text-align: left;
+
+ ul.pagination {
+ margin: 2px 0;
+ white-space: nowrap;
+ }
+ }
+
+ div.dataTables_processing {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 200px;
+ margin-left: -100px;
+ margin-top: -26px;
+ text-align: center;
+ padding: 1em 0;
+ }
+}
+
+
+// Sorting - using Glyphicons
+table.dataTable thead {
+ > tr > th,
+ > tr > td {
+ &.sorting_asc,
+ &.sorting_desc,
+ &.sorting {
+ padding-right: 30px;
+ }
+
+ &:active {
+ outline: none;
+ }
+ }
+
+ .sorting,
+ .sorting_asc,
+ .sorting_desc,
+ .sorting_asc_disabled,
+ .sorting_desc_disabled {
+ cursor: pointer;
+ position: relative;
+
+ &:before,
+ &:after {
+ position: absolute;
+ bottom: 8px;
+ right: 8px;
+ display: block;
+ opacity: 0.3;
+ font: normal normal normal 19px/1 FontAwesome;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ }
+ }
+
+ .sorting:after {
+ top: 13px;
+ content: "\f107"; /* sort - arrow down */
+ }
+
+ .sorting:before {
+ top: 3px;
+ content: "\f106"; /* sort - arrow up */
+ }
+
+ .sorting_asc:after {
+ opacity: 0.8;
+ content: "\f107"; /* sort-by-attributes */
+ top: 13px;
+ }
+
+ .sorting_desc:after {
+ opacity: 0.8;
+ content: "\f106"; /* sort-by-attributes-alt */
+ top: 3px;
+ }
+
+ .sorting_asc_disabled:after,
+ .sorting_desc_disabled:after {
+ color: #eee;
+ }
+}
+
+table.dataTable tfoot {
+ display: none; // Wok doesn't have tfoot on tables
+}
+
+
+// Scrolling
+div.dataTables_scrollHead table.dataTable {
+ margin-bottom: 0 !important;
+}
+
+div.dataTables_scrollBody {
+ table {
+ border-top: none;
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+
+ thead { // Hide sort icons
+ .sorting:after,
+ .sorting_asc:after,
+ .sorting_desc:after {
+ display: none;
+ }
+ }
+
+ tbody tr:first-child th,
+ tbody tr:first-child td {
+ border-top: none;
+ }
+ }
+}
+
+div.dataTables_scrollFoot table {
+ margin-top: 0 !important;
+ border-top: none;
+}
+
+
+// Responsive
+@media screen and (max-width: 767px) {
+ div.dataTables_wrapper {
+ div.dataTables_length,
+ div.dataTables_filter,
+ div.dataTables_info,
+ div.dataTables_paginate {
+ text-align: center;
+ }
+ }
+}
+
+
+//
+// Bootstrap provides a range of styling options for table's via class name
+// that we want to full support. They sometimes require some customisations
+//
+
+// Condensed
+table.dataTable.table-condensed {
+ > thead > tr > th {
+ padding-right: 20px;
+ }
+
+ .sorting:after,
+ .sorting_asc:after,
+ .sorting_desc:after {
+ top: 6px;
+ right: 6px;
+ }
+}
+
+// Frustratingly the border-collapse:collapse used by Bootstrap makes the column
+// width calculations when using scrolling impossible to align columns. We have
+// to use `border-collapse: separate`
+table.table-bordered.dataTable {
+ th,
+ td {
+ border-left-width: 0;
+
+ &:last-child,
+ &:last-child {
+ border-right-width: 0;
+ }
+ }
+
+ tbody th,
+ tbody td {
+ border-bottom-width: 0;
+ }
+}
+
+// Bordered table
+div.dataTables_scrollHead table.table-bordered {
+ border-bottom-width: 0;
+}
+
+// Responsive tables. We use rows inside the Bootstrap responsive wrapper,
+// so they need to have their margin and padding removed
+div.table-responsive > div.dataTables_wrapper > div.row {
+ margin: 0;
+
+ > div[class^="col-"] {
+ &:first-child {
+ padding-left: 0;
+ }
+ &:last-child {
+ padding-right: 0;
+ }
+ }
+}
diff --git a/ui/js/src/wok.datatables.js b/ui/js/src/wok.datatables.js
new file mode 100644
index 0000000..a64b824
--- /dev/null
+++ b/ui/js/src/wok.datatables.js
@@ -0,0 +1,42 @@
+/*
+ * Project Wok
+ *
+ * Copyright IBM Corp, 2015-2016
+ *
+ * Code derived from Project Kimchi
+ *
+ * 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.
+ */
+
+// Sets defalt Datatable options for Wok
+
+wok.initCompleteDataTableCallback = function(e) {
+ var tableId = $('#'+e.sTableId+'_wrapper');
+ $('.dataTables_filter input',tableId).attr("placeholder",
"Filter");
+ $(".dataTables_filter label",tableId).contents().filter(function() {
+ return this.nodeType === 3;
+ }).wrap('<div class="sr-only" />');
+ $(".dataTables_length label",tableId).contents().filter(function() {
+ return this.nodeType === 3;
+ }).wrap('<div class="sr-only" />');
+ $(".dataTables_length select",tableId).selectpicker();
+ $(".dataTables tfoot",tableId).remove();
+};
+
+$.extend( true, $.fn.dataTable.defaults, {
+ "sPaginationType": "full_numbers",
+ "dom": '<"row"<"col-sm-12
filter"<"pull-right"l><"pull-right"f>>><"row"<"col-sm-12"t>><"row"<"col-sm-6
pages"p><"col-sm-6 info"i>>',
+ "initComplete": function(settings, json) {
+ wok.initCompleteDataTableCallback(settings);
+ }
+});
\ No newline at end of file
diff --git a/ui/libs/Makefile.am b/ui/libs/Makefile.am
index 5c1140e..9732499 100644
--- a/ui/libs/Makefile.am
+++ b/ui/libs/Makefile.am
@@ -17,4 +17,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-SUBDIRS = bootstrap jquery jquery-ui bootstrap-select es5-shim jquery-i18n list-js
jquery-bootgrid bootstrap-switch bootstrap-editable typeahead jquery-containsNC lodash
+SUBDIRS = bootstrap jquery jquery-ui bootstrap-select es5-shim jquery-i18n list-js
jquery-bootgrid bootstrap-switch bootstrap-editable typeahead jquery-containsNC lodash
datatables moment
diff --git a/ui/libs/datatables/LICENSE b/ui/libs/datatables/LICENSE
new file mode 100644
index 0000000..fdc3498
--- /dev/null
+++ b/ui/libs/datatables/LICENSE
@@ -0,0 +1,22 @@
+This MIT license applies to the DataTables source code found in the `js`, `css`, `images`
and `examples` directories.
+
+Copyright (c) 2008-2016 SpryMedia Limited and other contributors
+http://datatables.net
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/ui/libs/datatables/Makefile.am b/ui/libs/datatables/Makefile.am
new file mode 100644
index 0000000..1ec5c5f
--- /dev/null
+++ b/ui/libs/datatables/Makefile.am
@@ -0,0 +1,19 @@
+#
+# Project Wok
+#
+# Copyright IBM Corp, 2016
+#
+#
+# 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.
+
+SUBDIRS = css js
diff --git a/ui/libs/datatables/css/Makefile.am b/ui/libs/datatables/css/Makefile.am
new file mode 100644
index 0000000..bedc920
--- /dev/null
+++ b/ui/libs/datatables/css/Makefile.am
@@ -0,0 +1,21 @@
+#
+# Project Wok
+#
+# Copyright IBM Corp, 2016
+#
+#
+# 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.
+
+datatablescssdir = $(datadir)/wok/ui/libs/datatables/css
+
+dist_datatablescss_DATA = $(wildcard *.css) $(NULL)
diff --git a/ui/libs/datatables/css/datatables.min.css
b/ui/libs/datatables/css/datatables.min.css
new file mode 100644
index 0000000..9a0b859
--- /dev/null
+++ b/ui/libs/datatables/css/datatables.min.css
@@ -0,0 +1,24 @@
+/*
+ * This combined file was created by the DataTables downloader builder:
+ *
https://datatables.net/download
+ *
+ * To rebuild or modify this file with the latest versions of the included
+ * software please visit:
+ *
https://datatables.net/download/#bs/dt-1.10.12/fh-3.1.2/r-2.1.0/se-1.2.0
+ *
+ * Included libraries:
+ * DataTables 1.10.12, FixedHeader 3.1.2, Responsive 2.1.0, Select 1.2.0
+ */
+
+table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px
!important;max-width:none !important;border-collapse:separate !important}table.dataTable
td,table.dataTable
th{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}table.dataTable
td.dataTables_empty,table.dataTable
th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap
td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length
label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper
div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper
div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter
label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper
div.dataTables_filter
input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper
div.dataTables_info{padding-top:8px;white-space:nowrap}div.dataTables_wrapper
div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper
div.dataTables_paginate ul.pagination{margin:2px
0;white-space:nowrap}div.dataTables_wrapper
div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em
0}table.dataTable thead>tr>th.sorting_asc,table.dataTable
thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable
thead>tr>td.sorting_asc,table.dataTable
thead>tr>td.sorting_desc,table.dataTable
thead>tr>td.sorting{padding-right:30px}table.dataTable
thead>tr>th:active,table.dataTable
thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead
.sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead
.sorting_asc_disabled,table.dataTable thead
.sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead
.sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead
.sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable
thead
.sorting_desc_disabled:after{position:absolute;bottom:8px;right:8px;display:block;font-family:'Glyphicons
Halflings';opacity:0.5}table.dataTable thead
.sorting:after{opacity:0.2;content:"\e150"}table.dataTable thead
.sorting_asc:after{content:"\e155"}table.dataTable thead
.sorting_desc:after{content:"\e156"}table.dataTable thead
.sorting_asc_disabled:after,table.dataTable thead
.sorting_desc_disabled:after{color:#eee}div.dataTables_scrollHead
table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody
table{border-top:none;margin-top:0 !important;margin-bottom:0
!important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody
table thead .sorting_asc:after,div.dataTables_scrollBody table thead
.sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child
th,div.dataTables_scrollBody table tbody tr:first-child
td{border-top:none}div.dataTables_scrollFoot table{margin-top:0
!important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper
div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper
div.dataTables_info,div.dataTables_wrapper
div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed
.sorting:after,table.dataTable.table-condensed
.sorting_asc:after,table.dataTable.table-condensed
.sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable
th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable
th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable
td:last-child,table.table-bordered.dataTable
td:last-child{border-right-width:0}table.table-bordered.dataTable tbody
th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead
table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0}
+
+
+table.dataTable.fixedHeader-floating,table.dataTable.fixedHeader-locked{background-color:white;margin-top:0
!important;margin-bottom:0 !important}table.dataTable.fixedHeader-floating{position:fixed
!important}table.dataTable.fixedHeader-locked{position:absolute !important}@media
print{table.fixedHeader-floating{display:none}}
+
+
+table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty{cursor:default
!important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before{display:none
!important}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child:before{top:9px;left:4px;height:14px;width:14px;display:block;position:absolute;color:white;border:2px
solid white;border-radius:14px;box-shadow:0 0 3px
#444;box-sizing:content-box;text-align:center;font-family:'Courier New', Courier,
monospace;line-height:14px;content:'+';background-color:#337ab7}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th:first-child:before{content:'-';background-color:#d33333}table.dataTable.dtr-inline.collapsed>tbody>tr.child
td:before{display:none}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child:before{top:5px;left:4px;height:14px;width:14px;border-radius:14px;line-height:14px;text-indent:3px}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:white;border:2px
solid white;border-radius:14px;box-shadow:0 0 3px
#444;box-sizing:content-box;text-align:center;font-family:'Courier New', Courier,
monospace;line-height:14px;content:'+';background-color:#337ab7}table.dataTable.dtr-column>tbody>tr.parent
td.control:before,table.dataTable.dtr-column>tbody>tr.parent
th.control:before{content:'-';background-color:#d33333}table.dataTable>tbody>tr.child{padding:0.5em
1em}table.dataTable>tbody>tr.child:hover{background:transparent
!important}table.dataTable>tbody>tr.child
ul{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child
ul li{border-bottom:1px solid #efefef;padding:0.5em 0}table.dataTable>tbody>tr.child
ul li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul
li:last-child{border-bottom:none}table.dataTable>tbody>tr.child
span.dtr-title{display:inline-block;min-width:75px;font-weight:bold}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em
1em}div.dtr-modal
div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:50%;overflow:auto;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px
solid black;border-radius:0.5em;box-shadow:0 12px 30px rgba(0,0,0,0.6)}div.dtr-modal
div.dtr-modal-content{position:relative;padding:1em}div.dtr-modal
div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;border:1px
solid
#eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal
div.dtr-modal-close:hover{background-color:#eaeaea}div.dtr-modal
div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,0.6)}@media
screen and (max-width: 767px){div.dtr-modal
div.dtr-modal-display{width:95%}}div.dtr-bs-modal table.table tr:first-child
td{border-top:none}
+
+
+table.dataTable tbody>tr.selected,table.dataTable
tbody>tr>.selected{background-color:#08C}table.dataTable.stripe
tbody>tr.odd.selected,table.dataTable.stripe
tbody>tr.odd>.selected,table.dataTable.display
tbody>tr.odd.selected,table.dataTable.display
tbody>tr.odd>.selected{background-color:#0085c7}table.dataTable.hover
tbody>tr.selected:hover,table.dataTable.hover
tbody>tr>.selected:hover,table.dataTable.display
tbody>tr.selected:hover,table.dataTable.display
tbody>tr>.selected:hover{background-color:#0083c5}table.dataTable.order-column
tbody>tr.selected>.sorting_1,table.dataTable.order-column
tbody>tr.selected>.sorting_2,table.dataTable.order-column
tbody>tr.selected>.sorting_3,table.dataTable.order-column
tbody>tr>.selected,table.dataTable.display
tbody>tr.selected>.sorting_1,table.dataTable.display
tbody>tr.selected>.sorting_2,table.dataTable.display
tbody>tr.selected>.sorting_3,table.dataTable.display
tbody>tr>.selected{background-color:#0085c8}table.dataTable.display
tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe
tbody>tr.odd.selected>.sorting_1{background-color:#0081c1}table.dataTable.display
tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe
tbody>tr.odd.selected>.sorting_2{background-color:#0082c2}table.dataTable.display
tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe
tbody>tr.odd.selected>.sorting_3{background-color:#0083c4}table.dataTable.display
tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe
tbody>tr.even.selected>.sorting_1{background-color:#0085c8}table.dataTable.display
tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe
tbody>tr.even.selected>.sorting_2{background-color:#0086ca}table.dataTable.display
tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe
tbody>tr.even.selected>.sorting_3{background-color:#0087cb}table.dataTable.display
tbody>tr.odd>.selected,table.dataTable.order-column.stripe
tbody>tr.odd>.selected{background-color:#0081c1}table.dataTable.display
tbody>tr.even>.selected,table.dataTable.order-column.stripe
tbody>tr.even>.selected{background-color:#0085c8}table.dataTable.display
tbody>tr.selected:hover>.sorting_1,table.dataTable.order-column.hover
tbody>tr.selected:hover>.sorting_1{background-color:#007dbb}table.dataTable.display
tbody>tr.selected:hover>.sorting_2,table.dataTable.order-column.hover
tbody>tr.selected:hover>.sorting_2{background-color:#007ebd}table.dataTable.display
tbody>tr.selected:hover>.sorting_3,table.dataTable.order-column.hover
tbody>tr.selected:hover>.sorting_3{background-color:#007fbf}table.dataTable.display
tbody>tr:hover>.selected,table.dataTable.display
tbody>tr>.selected:hover,table.dataTable.order-column.hover
tbody>tr:hover>.selected,table.dataTable.order-column.hover
tbody>tr>.selected:hover{background-color:#007dbb}table.dataTable
td.select-checkbox{position:relative}table.dataTable
td.select-checkbox:before,table.dataTable
td.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable
td.select-checkbox:before{content:' ';margin-top:-6px;margin-left:-6px;border:1px
solid black;border-radius:3px}table.dataTable tr.selected
td.select-checkbox:after{content:'\2714';margin-top:-11px;margin-left:-4px;text-align:center;text-shadow:1px
1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9}div.dataTables_wrapper
span.select-info,div.dataTables_wrapper span.select-item{margin-left:0.5em}@media screen
and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper
span.select-item{margin-left:0;display:block}}table.dataTable tbody
tr.selected,table.dataTable tbody th.selected,table.dataTable tbody
td.selected{color:white}table.dataTable tbody tr.selected a,table.dataTable tbody
th.selected a,table.dataTable tbody td.selected a{color:#a2d4ed}
+
+
diff --git a/ui/libs/datatables/js/Makefile.am b/ui/libs/datatables/js/Makefile.am
new file mode 100644
index 0000000..d50991c
--- /dev/null
+++ b/ui/libs/datatables/js/Makefile.am
@@ -0,0 +1,21 @@
+#
+# Project Wok
+#
+# Copyright IBM Corp, 2016
+#
+#
+# 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.
+
+datatablesjsdir = $(datadir)/wok/ui/libs/datatables/js
+
+dist_datatablesjs_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/libs/moment/LICENSE b/ui/libs/moment/LICENSE
new file mode 100644
index 0000000..9ee5374
--- /dev/null
+++ b/ui/libs/moment/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2011-2016 Tim Wood, Iskren Chernev, Moment.js contributors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/ui/libs/moment/Makefile.am b/ui/libs/moment/Makefile.am
new file mode 100644
index 0000000..62f42a5
--- /dev/null
+++ b/ui/libs/moment/Makefile.am
@@ -0,0 +1,21 @@
+#
+# Project Wok
+#
+# Copyright IBM Corp, 2016
+#
+#
+# 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.
+
+momentjsdir = $(datadir)/wok/ui/libs/moment
+
+dist_momentjs_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/pages/login.html.tmpl b/ui/pages/login.html.tmpl
index b5137b1..6890d9b 100644
--- a/ui/pages/login.html.tmpl
+++ b/ui/pages/login.html.tmpl
@@ -63,9 +63,11 @@
<link rel="stylesheet"
href="$href('css/jquery-ui.custom.css')">
<link rel="stylesheet"
href="$href('css/bootstrap.custom.css')">
<link rel="stylesheet"
href="$href('libs/bootstrap-select/dist/css/bootstrap-select.min.css')">
+ <link rel="stylesheet"
href="$href('libs/datatables/css/datatables.min.css')">
<link rel="stylesheet"
href="$href('css/fontawesome/fontawesome.css')">
<link rel="stylesheet"
href="$href('css/opensans/opensans.css')">
<link rel="stylesheet"
href="$href('css/bootstrap-select.custom.css')">
+ <link rel="stylesheet"
href="$href('css/datatables.bootstrap.css')">
<link rel="stylesheet"
href="$href('css/wok.css')">
<script
src="$href('libs/es5-shim/es5-shim.min.js')"></script>
<script
src="$href('libs/jquery/jquery.min.js')"></script>
@@ -75,6 +77,8 @@
<script
src="$href('libs/bootstrap/bootstrap.min.js')"></script>
<script
src="$href('libs/bootstrap-select/dist/js/bootstrap-select.min.js')"></script>
<script src="$href('libs/lodash/lodash.js')"></script>
+ <script
src="$href('libs/moment/moment-with-locales.min.js')"></script>
+ <script
src="$href('libs/datatables/js/datatables.min.js')"></script>
<script src="$href('js/wok.min.js')"></script>
</head>
<body class="login" onload="wok.login_main()">
diff --git a/ui/pages/wok-ui.html.tmpl b/ui/pages/wok-ui.html.tmpl
index 6ea6e00..bcf67f3 100644
--- a/ui/pages/wok-ui.html.tmpl
+++ b/ui/pages/wok-ui.html.tmpl
@@ -65,9 +65,11 @@
<link rel="stylesheet"
href="$href('libs/jquery-bootgrid/dist/css/jquery.bootgrid.min.css')">
<link rel="stylesheet"
href="$href('libs/bootstrap-switch/dist/css/bootstrap-switch.min.css')">
<link rel="stylesheet"
href="$href('libs/bootstrap-editable/dist/css/bootstrap-editable.css')">
+ <link rel="stylesheet"
href="$href('libs/datatables/css/datatables.min.css')">
<link rel="stylesheet"
href="$href('css/fontawesome/fontawesome.css')">
<link rel="stylesheet"
href="$href('css/opensans/opensans.css')">
<link rel="stylesheet"
href="$href('css/bootstrap-select.custom.css')">
+ <link rel="stylesheet"
href="$href('css/datatables.bootstrap.css')">
<link rel="stylesheet"
href="$href('css/wok.css')">
<script
src="$href('libs/es5-shim/es5-shim.min.js')"></script>
<script
src="$href('libs/jquery/jquery.min.js')"></script>
@@ -83,6 +85,8 @@
<script
src="$href('libs/bootstrap-editable/dist/js/bootstrap-editable.min.js')"></script>
<script
src="$href('libs/typeahead/typeahead.bundle.min.js')"></script>
<script src="$href('libs/lodash/lodash.js')"></script>
+ <script
src="$href('libs/moment/moment-with-locales.min.js')"></script>
+ <script
src="$href('libs/datatables/js/datatables.min.js')"></script>
<script
src="$href('base64/jquery.base64.js')"></script>
<script src="$href('js/wok.min.js')"></script>
<!-- This is used for detecting if the UI needs to be built -->
--
1.9.3