From: Samuel Guimarães <sguimaraes943(a)gmail.com>
Signed-off-by: Samuel Guimarães <sguimaraes943(a)gmail.com>
---
configure.ac | 3 +
ui/css/Makefile.am | 8 +-
ui/css/datatables.bootstrap.css | 255 +++++++++++++++++++++++++
ui/css/src/datatables.bootstrap.scss | 302 ++++++++++++++++++++++++++++++
ui/js/src/wok.datatables.js | 42 +++++
ui/libs/Makefile.am | 2 +-
ui/libs/datatables/Makefile.am | 23 +++
ui/libs/datatables/css/Makefile.am | 21 +++
ui/libs/datatables/css/datatables.min.css | 24 +++
ui/libs/moment/LICENSE | 22 +++
ui/libs/moment/Makefile.am | 21 +++
ui/pages/login.html.tmpl | 4 +
ui/pages/wok-ui.html.tmpl | 4 +
13 files changed, 728 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/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/moment/LICENSE
create mode 100644 ui/libs/moment/Makefile.am
diff --git a/configure.ac b/configure.ac
index b7ffee4..12f6c67 100644
--- a/configure.ac
+++ b/configure.ac
@@ -142,6 +142,9 @@ 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/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..0bc03c0
--- /dev/null
+++ b/ui/css/datatables.bootstrap.css
@@ -0,0 +1,255 @@
+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..01a0e40
--- /dev/null
+++ b/ui/css/src/datatables.bootstrap.scss
@@ -0,0 +1,302 @@
+//
+// 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.
+//
+
+@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/Makefile.am b/ui/libs/datatables/Makefile.am
new file mode 100644
index 0000000..9c3d2af
--- /dev/null
+++ b/ui/libs/datatables/Makefile.am
@@ -0,0 +1,23 @@
+#
+# 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
+
+datatablesdir = $(datadir)/wok/ui/libs/datatables
+
+dist_datatables_DATA = $(wildcard *.js) $(NULL)
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/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..e21117f 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/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..c56af3e 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/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