[PATCH 0/9] Adding new-ui base templates and widgets

From: samhenri <samuel.guimaraes@eldorado.org.br> Adding new-ui to Wok, Kimchi and Gingerbase. Changelog: Wok: -Minor fixes in SCSS files. -New wok.confirm widget for confirmation messages. -Renamed grid.js in 'js/samples' folder to 'js/src/wok.datagrid.js' and updated with new-ui for Storage and Networks. -Added SCSS files for Kimchi pages (WIP - Going to move UI build process to Kimchi and Ginger once new-ui is finished). -Copied distros logos to Wok (may have to update copying information) to use as icons in Template creation. -Updated wok.window to support multiple modal windows and added optional parameter do set modal target. -Updated Toolbars to receive Bootstrap second-level navigation. Kimchi: -Guests - "Create Guest" modal window and added toolbar. Old-ui styles are missing but the page is still working. -"Edit Guest" had some conflicts with jQuery-UI customization so I will update to Bootstrap markup, it is still working but with messed styles. -TO DO: Update with "List" and "Gallery" views, finish "Edit Guest". -Templates - Create Template modal window and added toolbar. Old-ui styles are missing but tab is still working. -"Edit Template" had some conflicts with jQuery-UI customization so I will update to Bootstrap markup, it is still working but with messed styles. -TO DO: Update with "List" and "Gallery" views, finish "Edit Template". -Storage - Updated to new-ui grid and styles and added toolbar. -TO DO: Update "Create Storage" modal window; Fix collapsible panel; Add new-ui icons; Create JS to set correct icon according to capacity in Storage Pool; -Network - Updated with new-ui. -TO DO: Update Update "Create Storage" jQuery-UI dialog to Bootstrap modal window. Gingerbase: -Minor fixes from previous patches sent to ML. -Integrated same UI build process from Wok to Gingerbase (using sassc cli) and removed old CSS files. -TO DO: Add a spinner to dashboard polylines to avoid weird pattern behind lines; Fix performance with hidden panels showing when loading page; Move Software Updates and update jQuery-UI Accordion with new-ui. Thanks, Samuel samhenri (9): Adding new-ui base templates and widgets - SCSS Adding new-ui base templates and widgets - Images Adding new-ui base templates and widgets - JS Adding new-ui base templates and widgets - HTML Adding new-ui to Gingerbase (Host tab) Adding new-ui to Templates tab Adding new-ui to Storage tab Adding new-ui to Networks tab Adding new-ui to Guests tab src/wok/plugins/gingerbase/.gitignore | 2 +- src/wok/plugins/gingerbase/configure.ac | 1 - src/wok/plugins/gingerbase/ui/config/tab-ext.xml | 2 +- src/wok/plugins/gingerbase/ui/css/Makefile.am | 11 +- .../plugins/gingerbase/ui/css/src/gingerbase.scss | 29 + .../gingerbase/ui/css/src/modules/_host.scss | 172 ++++++ .../gingerbase/ui/css/theme-default/host.css | 289 ---------- .../gingerbase/ui/css/theme-default/report-add.css | 39 -- .../ui/css/theme-default/report-rename.css | 41 -- .../ui/css/theme-default/repository-add.css | 44 -- .../ui/css/theme-default/repository-edit.css | 90 --- src/wok/plugins/gingerbase/ui/images/Makefile.am | 2 - src/wok/plugins/gingerbase/ui/images/logo.ico | Bin 1214 -> 15086 bytes .../gingerbase/ui/images/theme-default/Makefile.am | 20 - .../ui/images/theme-default/host-icon-sprite.png | Bin 1034 -> 0 bytes .../images/theme-default/kimchi-loading15x15.gif | Bin 1653 -> 0 bytes .../gingerbase/ui/js/src/gingerbase.host.js | 642 +++++++++++---------- src/wok/plugins/gingerbase/ui/pages/host.html.tmpl | 211 +++---- .../gingerbase/ui/pages/report-add.html.tmpl | 46 +- .../gingerbase/ui/pages/report-rename.html.tmpl | 42 +- .../gingerbase/ui/pages/repository-add.html.tmpl | 124 ++-- .../gingerbase/ui/pages/repository-edit.html.tmpl | 138 ++--- src/wok/plugins/kimchi/ui/config/tab-ext.xml | 8 +- .../kimchi/ui/css/theme-default/network.css | 267 --------- .../kimchi/ui/css/theme-default/template_add.css | 317 ---------- .../kimchi/ui/js/src/kimchi.guest_add_main.js | 10 +- src/wok/plugins/kimchi/ui/js/src/kimchi.network.js | 72 ++- .../kimchi/ui/js/src/kimchi.storage_main.js | 6 +- .../kimchi/ui/js/src/kimchi.template_add_main.js | 406 +++++++++---- .../plugins/kimchi/ui/pages/guest-add.html.tmpl | 114 ++-- src/wok/plugins/kimchi/ui/pages/guests.html.tmpl | 58 +- src/wok/plugins/kimchi/ui/pages/network.html.tmpl | 185 +++--- src/wok/plugins/kimchi/ui/pages/storage.html.tmpl | 74 ++- .../plugins/kimchi/ui/pages/template-add.html.tmpl | 344 +++++------ .../kimchi/ui/pages/template-edit.html.tmpl | 236 ++++---- .../plugins/kimchi/ui/pages/templates.html.tmpl | 93 +-- ui/css/src/bootstrap-select.custom.scss | 1 + ui/css/src/modules/_administration.scss | 0 ui/css/src/modules/_datagrid.scss | 72 +++ ui/css/src/modules/_guests.scss | 92 +++ ui/css/src/modules/_host.scss | 169 ------ ui/css/src/modules/_iso-list.scss | 121 ++++ ui/css/src/modules/_jqueryui.scss | 0 ui/css/src/modules/_menu-flat.scss | 16 +- ui/css/src/modules/_modal-flat.scss | 2 +- ui/css/src/modules/_navbar-flat.scss | 4 +- ui/css/src/modules/_network.scss | 317 ++++++++++ ui/css/src/modules/_storage.scss | 0 ui/css/src/modules/_templates.scss | 99 ++++ ui/css/src/modules/_toolbar.scss | 24 +- ui/css/src/modules/_wok-confirm.scss | 42 ++ ui/css/src/modules/_wok-grid.scss | 25 +- ui/css/src/wok.scss | 47 +- ui/images/theme-default/Makefile.am | 2 +- ui/images/theme-default/alert.png | Bin 3537 -> 0 bytes ui/images/theme-default/arrow-down-black.png | Bin 2942 -> 0 bytes ui/images/theme-default/arrow-down.png | Bin 537 -> 0 bytes ui/images/theme-default/bg-mask.png | Bin 2899 -> 0 bytes ui/images/theme-default/bg.png | Bin 35585 -> 0 bytes ui/images/theme-default/check-green.png | Bin 3501 -> 0 bytes ui/images/theme-default/check-grey.png | Bin 3535 -> 0 bytes ui/images/theme-default/folder-arrow-down.png | Bin 2956 -> 0 bytes ui/images/theme-default/folder-arrow-right.png | Bin 2958 -> 0 bytes ui/images/theme-default/icon-alert.png | Bin 3545 -> 0 bytes ui/images/theme-default/icon-centos.png | Bin 0 -> 4734 bytes ui/images/theme-default/icon-debian.png | Bin 0 -> 4239 bytes ui/images/theme-default/icon-event.png | Bin 3791 -> 0 bytes ui/images/theme-default/icon-fedora.png | Bin 0 -> 4449 bytes ui/images/theme-default/icon-gentoo.png | Bin 0 -> 15307 bytes ui/images/theme-default/icon-opensuse.png | Bin 0 -> 3046 bytes ui/images/theme-default/icon-setting.png | Bin 3664 -> 0 bytes ui/images/theme-default/icon-tool.png | Bin 4466 -> 0 bytes ui/images/theme-default/icon-ubuntu.png | Bin 0 -> 4818 bytes ui/images/theme-default/logo-flat.svg | 43 ++ ui/images/theme-default/logo-plain.gif | Bin 1601 -> 0 bytes ui/images/theme-default/logo-white.png | Bin 9879 -> 7583 bytes ui/images/theme-default/nav-bg.png | Bin 3043 -> 0 bytes ui/images/theme-default/thumb-guest.png | Bin 3896 -> 0 bytes ui/images/theme-default/thumb-host.png | Bin 5069 -> 0 bytes ui/images/theme-default/user-icon.png | Bin 269 -> 0 bytes ui/images/theme-default/wok-loading.gif | Bin 6181 -> 0 bytes ui/js/src/wok.confirm.js | 91 +++ ui/js/src/wok.datagrid.js | 123 ++++ ui/js/src/wok.grid.js | 416 ++++--------- ui/js/src/wok.line-chart.js | 74 ++- ui/js/src/wok.list.js | 302 ++++++++++ ui/js/src/wok.login.js | 9 +- ui/js/src/wok.main.js | 61 +- ui/js/src/wok.message.js | 95 +-- ui/js/src/wok.window.js | 31 +- ui/js/widgets/grid.js | 123 ---- ui/js/widgets/samples/grid.html | 4 +- ui/pages/login.html.tmpl | 186 +++--- ui/pages/wok-ui.html.tmpl | 222 +++---- 94 files changed, 3526 insertions(+), 3422 deletions(-) create mode 100644 src/wok/plugins/gingerbase/ui/css/src/gingerbase.scss create mode 100644 src/wok/plugins/gingerbase/ui/css/src/modules/_host.scss delete mode 100644 src/wok/plugins/gingerbase/ui/css/theme-default/host.css delete mode 100644 src/wok/plugins/gingerbase/ui/css/theme-default/report-add.css delete mode 100644 src/wok/plugins/gingerbase/ui/css/theme-default/report-rename.css delete mode 100644 src/wok/plugins/gingerbase/ui/css/theme-default/repository-add.css delete mode 100644 src/wok/plugins/gingerbase/ui/css/theme-default/repository-edit.css delete mode 100644 src/wok/plugins/gingerbase/ui/images/theme-default/Makefile.am delete mode 100644 src/wok/plugins/gingerbase/ui/images/theme-default/host-icon-sprite.png delete mode 100644 src/wok/plugins/gingerbase/ui/images/theme-default/kimchi-loading15x15.gif delete mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/network.css delete mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/template_add.css create mode 100644 ui/css/src/modules/_administration.scss create mode 100644 ui/css/src/modules/_datagrid.scss create mode 100644 ui/css/src/modules/_guests.scss delete mode 100644 ui/css/src/modules/_host.scss create mode 100644 ui/css/src/modules/_iso-list.scss create mode 100644 ui/css/src/modules/_jqueryui.scss create mode 100644 ui/css/src/modules/_network.scss create mode 100644 ui/css/src/modules/_storage.scss create mode 100644 ui/css/src/modules/_templates.scss create mode 100644 ui/css/src/modules/_wok-confirm.scss delete mode 100644 ui/images/theme-default/alert.png delete mode 100644 ui/images/theme-default/arrow-down-black.png delete mode 100644 ui/images/theme-default/arrow-down.png delete mode 100644 ui/images/theme-default/bg-mask.png delete mode 100644 ui/images/theme-default/bg.png delete mode 100644 ui/images/theme-default/check-green.png delete mode 100644 ui/images/theme-default/check-grey.png delete mode 100644 ui/images/theme-default/folder-arrow-down.png delete mode 100644 ui/images/theme-default/folder-arrow-right.png delete mode 100644 ui/images/theme-default/icon-alert.png create mode 100644 ui/images/theme-default/icon-centos.png create mode 100644 ui/images/theme-default/icon-debian.png delete mode 100644 ui/images/theme-default/icon-event.png create mode 100644 ui/images/theme-default/icon-fedora.png create mode 100644 ui/images/theme-default/icon-gentoo.png create mode 100644 ui/images/theme-default/icon-opensuse.png delete mode 100644 ui/images/theme-default/icon-setting.png delete mode 100644 ui/images/theme-default/icon-tool.png create mode 100644 ui/images/theme-default/icon-ubuntu.png create mode 100644 ui/images/theme-default/logo-flat.svg delete mode 100644 ui/images/theme-default/logo-plain.gif delete mode 100644 ui/images/theme-default/nav-bg.png delete mode 100644 ui/images/theme-default/thumb-guest.png delete mode 100644 ui/images/theme-default/thumb-host.png delete mode 100644 ui/images/theme-default/user-icon.png delete mode 100644 ui/images/theme-default/wok-loading.gif create mode 100644 ui/js/src/wok.confirm.js create mode 100644 ui/js/src/wok.datagrid.js create mode 100644 ui/js/src/wok.list.js delete mode 100644 ui/js/widgets/grid.js -- 1.9.3

From: samhenri <samuel.guimaraes@eldorado.org.br> Signed-off-by: samhenri <samuel.guimaraes@eldorado.org.br> --- ui/css/src/bootstrap-select.custom.scss | 1 + ui/css/src/modules/_administration.scss | 0 ui/css/src/modules/_datagrid.scss | 72 ++++++++ ui/css/src/modules/_guests.scss | 92 +++++++++ ui/css/src/modules/_host.scss | 169 ----------------- ui/css/src/modules/_iso-list.scss | 121 ++++++++++++ ui/css/src/modules/_jqueryui.scss | 0 ui/css/src/modules/_menu-flat.scss | 16 +- ui/css/src/modules/_modal-flat.scss | 2 +- ui/css/src/modules/_navbar-flat.scss | 4 +- ui/css/src/modules/_network.scss | 317 ++++++++++++++++++++++++++++++++ ui/css/src/modules/_storage.scss | 0 ui/css/src/modules/_templates.scss | 99 ++++++++++ ui/css/src/modules/_toolbar.scss | 24 ++- ui/css/src/modules/_wok-confirm.scss | 42 +++++ ui/css/src/modules/_wok-grid.scss | 25 ++- ui/css/src/wok.scss | 47 ++++- 17 files changed, 844 insertions(+), 187 deletions(-) create mode 100644 ui/css/src/modules/_administration.scss create mode 100644 ui/css/src/modules/_datagrid.scss create mode 100644 ui/css/src/modules/_guests.scss delete mode 100644 ui/css/src/modules/_host.scss create mode 100644 ui/css/src/modules/_iso-list.scss create mode 100644 ui/css/src/modules/_jqueryui.scss create mode 100644 ui/css/src/modules/_network.scss create mode 100644 ui/css/src/modules/_storage.scss create mode 100644 ui/css/src/modules/_templates.scss create mode 100644 ui/css/src/modules/_wok-confirm.scss diff --git a/ui/css/src/bootstrap-select.custom.scss b/ui/css/src/bootstrap-select.custom.scss index 49f9bc2..dd895f2 100644 --- a/ui/css/src/bootstrap-select.custom.scss +++ b/ui/css/src/bootstrap-select.custom.scss @@ -25,6 +25,7 @@ &.btn-group { .btn { .caret { + position: absolute; top: 0; right: 40px; margin-top: 0; diff --git a/ui/css/src/modules/_administration.scss b/ui/css/src/modules/_administration.scss new file mode 100644 index 0000000..e69de29 diff --git a/ui/css/src/modules/_datagrid.scss b/ui/css/src/modules/_datagrid.scss new file mode 100644 index 0000000..fe2f7dc --- /dev/null +++ b/ui/css/src/modules/_datagrid.scss @@ -0,0 +1,72 @@ + // + // Project Wok + // + // Copyright IBM, Corp. 2015 + // + // 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. + // + .grid-control { + padding: 5px; + } + + .grid-control input[type="text"] { + width: 514px; + } + + .wok-datagrid { + background: $table-bg; + .wok-datagrid-header, + .wok-datagrid-body > .wok-datagrid-row { + display: block; + width: 100%; + > span, + >.wok-datagrid-row > span { + padding: $table-cell-padding; + display: inline-block; + } + } + > .wok-datagrid-header > span { + font-family: $font-family-light; + font-weight: 400; + font-size: 12.5pt; + vertical-align: bottom; + border-bottom: none; + border-top: 0; + line-height: $line-height-base; + height: 36px; + } + + > .wok-datagrid-body > .wok-datagrid-row{ + border-top: 1px solid $table-border-color; + + > span { + font-family: $font-family-sans-serif; + line-height: (1 + $line-height-base); + vertical-align: top; + font-size: 12.5pt; + } + + } + .wok-datagrid-hybrid > .wok-datagrid-body > .wok-datagrid-row:first-child { + border-color: $table-first-row-border-color; + } + .wok-datagrid-row.odd { + background-color: $table-bg-accent; + } + .wok-datagrid-row.even { + background-color: $table-bg; + } + .wok-datagrid-body.wok-datagrid-row { + border-top: 1px solid $table-bg-accent; + } + } diff --git a/ui/css/src/modules/_guests.scss b/ui/css/src/modules/_guests.scss new file mode 100644 index 0000000..23c361a --- /dev/null +++ b/ui/css/src/modules/_guests.scss @@ -0,0 +1,92 @@ +// +// Project Wok +// +// Copyright IBM, Corp. 2015 +// +// 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. +// + +/* Create Guest Modal */ + +.guests-modal { + .modal-dialog { + width: 1100px; + } + .page-list { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + overflow: hidden; + } + .page { + position: absolute; + left: 0; + width: 100%; + height: 100%; + overflow: auto; + padding: 10px 30px; + } +} + +#guest-add-window { + .modal-body { + margin: 0; + padding: 0; + } + .modal-footer { + margin-top: 0; + } + .modal-footer .btn + .btn { + margin-left: 0; + } + .modal-footer .btn { + margin-right: 5px; + } + .modal-dialog { + width: 900px; + } + .guest-modal-container { + padding: 10px 30px; + position: relative; + } + .guest-pager { + background: $table-border-color; + overflow: hidden; + position: relative; + height: 530px; + } + &.modal-content p { + margin: 0 0 10px 0; + } + &.modal-content h5 { + font-size: 13pt; + font-weight: 400; + margin-top: 0; + } + &.modal-content label { + font-size: 16px; + font-weight: 400; + font-family: $font-family-sans-serif; + } + form#form-vm-add { + margin: 0; + } + input#guest-vm-name, + p.help-block { + width: 592px; + } +} diff --git a/ui/css/src/modules/_host.scss b/ui/css/src/modules/_host.scss deleted file mode 100644 index 5c2d9f6..0000000 --- a/ui/css/src/modules/_host.scss +++ /dev/null @@ -1,169 +0,0 @@ -// -// Project Wok -// -// Copyright IBM, Corp. 2015 -// -// 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. -// - -/* Main Host Dashboard section */ - -.host-dashboard { - padding-top: 40px; - padding-bottom: 50px; - background: #eee; - - .container { - padding-left: 83px !important; // Overriding container padding to align according to mockups - padding-right: 73px !important; - } - - h3 { - font-family: $font-family-light; - font-size: 21pt; - margin: 0 0 13px 0; - } -} - -.host-dashboard .col-md-3 { - padding: 0 14px; - - > div { - background: #fff; - padding: 13px 20px 20px; - } - -} - -/* End of Host Dashboard */ - -/* Line chart objects related to Hosts page */ - -#container-chart-cpu, -#container-chart-memory, -#container-chart-disk-io, -#container-chart-network-io { - border-top: 1px solid #eeeeee; - border-bottom: 2px solid #3a393b; - padding: 2px 0; - height: 99px; - width: 310px; -} - -/* End of Line chart objects */ - -/* Host Panels Container and Panels */ - -#host-info-container { - padding-top: 53px; - margin: 0 -8px; -} - -#host-info-container .col-md-4 { - width: 486px; - padding-left: 26px; - padding-right: 26px; -} - -#software-update-section { - margin-top: 24px; - border-top: 1px solid #b0b0b0; - padding-top: 24px; -} - - -// TEMPORARY FIX TO LAYOUT UNTIL WOK.LIST WIDGET IS DONE - -#repositories-grid, #available-reports-grid { - - .wok-list-content { - height: 517px; - overflow-x: auto; - } - - .dropdown.menu-flat { - float: right; - margin-right: 1px; - } - -} -// END OF TEMPORARY FIX - -/* Basic Information */ - -#host-info-container { - - padding-top: 10px; - - .basic-information-list { - height: 517px; - overflow-x: auto; - margin: 0; - @extend .row; // Extending bootstrap .row clearfix util - - .basic-information-list dt { - font-weight: 600; - font-size: 14.5pt; - line-height: 12px; - } - - .basic-information-list dd { - font-size: 12.5pt; - font-weight: 400; - margin-bottom: 12px; - } - - } -} - -/* End of Basic Information */ - -/* Debug Report */ - -#available-reports-grid .wok-list-cell { - padding-left: 10px; -} - -/* End of Debug Report */ - -/* Software Updates */ - - /* Colgroups for low resolution screens */ - - .software-update-name, - .software-update-repos { - min-width: 224px; - } - - .software-update-version, - .software-update-arch { - min-width: 200px; - } - - /* End of Colgroups */ - - /* Software Update Accordion */ - - .host-panel #software-updates-progress-textarea { - border: 1px solid #ddd; - box-sizing: border-box; - height: 100px; - padding: .2em .5em; - resize: vertical; - } - - /* End of Software Update Accordion */ - -/* End of Software Updates */ \ No newline at end of file diff --git a/ui/css/src/modules/_iso-list.scss b/ui/css/src/modules/_iso-list.scss new file mode 100644 index 0000000..fd1948a --- /dev/null +++ b/ui/css/src/modules/_iso-list.scss @@ -0,0 +1,121 @@ +// +// Project Wok +// +// Copyright IBM, Corp. 2015 +// +// 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. +// + +/* Template & Guests Modal Windows */ + +#template-add-window.modal-content, +#guest-add-window.modal-content { + label.box-iso-outer { + font-family: $font-family-sans-serif; + font-size: 14px !important; + font-weight: 400; + border-radius: 3px; + overflow: hidden; + display: block; + -webkit-user-select: none; + user-select: none; + } + label.box-iso-outer span.box-iso-border { + display: block; + border: 3px solid transparent; + transition: all .1s ease-in-out; + } + label.box-iso-outer .iso-radio-hidden:checked + span.box-iso-border, + label.box-iso-outer .iso-checkbox-hidden:checked + span.box-iso-border { + border-color: $guests-color; + } + label.box-iso-outer .iso-radio-hidden:checked + span.box-iso-border > .box-iso-inner, + label.box-iso-outer .iso-checkbox-hidden:checked + span.box-iso-border > .box-iso-inner { + border-color: $gray-base; + } + label.box-iso-outer span.box-iso-inner { + display: block; + border: 1px solid transparent; + background: $gray-lighter; + transition: all .1s ease-in-out; + } + ul.list-template, + ul.list-iso { + display: block; + overflow-x: hidden; + overflow-y: auto; + max-height: 462px; + list-style: none; + margin: 0 -5px 10px -5px; + padding: 0; + } + label.box-iso-outer span.box-iso-inner dl { + margin-bottom: 16px; + } + label.box-iso-outer span.box-iso-inner dt, + label.box-iso-outer span.box-iso-inner dd { + padding: 0 12px 0 20px; + } + label.box-iso-outer span.box-iso-inner dt { + padding-top: 5px; + text-transform: capitalize; + } + label.box-iso-outer span.box-iso-inner dd { + padding-bottom: 5px; + } + ul#templateTile input[type="radio"].iso-radio-hidden, + ul#list-local-iso input[type="checkbox"].iso-checkbox-hidden { + display: none; + } + label.box-iso-outer { + cursor: pointer; + } + ul#list-local-iso li.col-md-3 { + width: 241px; + margin: 10px 5px 0; + } + h3.iso-title { + font-size: 22px; + font-weight: 300; + line-height: 22px; + margin: 0; + padding: 13px 13px 13px 20px; + background-color: transparent; + background-position: right center; + background-repeat: no-repeat; + background-size: auto 33px; + background-origin: content-box; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + &.centos { + background-image: url('#{$wok-icon-path}/icon-centos.png'); + } + &.debian { + background-image: url('#{$wok-icon-path}/icon-debian.png'); + } + &.fedora { + background-image: url('#{$wok-icon-path}/icon-fedora.png'); + } + &.opensuse { + background-image: url('#{$wok-icon-path}/icon-opensuse.png'); + } + &.ubuntu { + background-image: url('#{$wok-icon-path}/icon-ubuntu.png'); + } + &.gentoo { + background-image: url('#{$wok-icon-path}/icon-gentoo.png'); + } + } +} diff --git a/ui/css/src/modules/_jqueryui.scss b/ui/css/src/modules/_jqueryui.scss new file mode 100644 index 0000000..e69de29 diff --git a/ui/css/src/modules/_menu-flat.scss b/ui/css/src/modules/_menu-flat.scss index 9d7036b..102fb1e 100644 --- a/ui/css/src/modules/_menu-flat.scss +++ b/ui/css/src/modules/_menu-flat.scss @@ -127,7 +127,7 @@ background-color: $menu-flat-dropdown-bg; border: 0; border-radius: 0; - @include box-shadow(none !important); + box-shadow: none !important; background-clip: padding-box; // Aligns the dropdown menu to right @@ -143,6 +143,10 @@ @include nav-divider($menu-flat-dropdown-divider-bg); } + > li.wok-hide-action-item { + display: none; + } + > li > a { border-top: 1px solid $menu-flat-dropdown-border; @include box-shadow(inset 0px 1px 0px 0px $menu-flat-dropdown-divider-bg); @@ -150,11 +154,12 @@ > li:first-child > a { border-top: 1px solid $menu-flat-dropdown-bg; - @include box-shadow(none); + box-shadow: none; } - > li.critical:last-child > a { - @include box-shadow(none); + > li.critical:last-child > a, + > li.critical:last-child > a:hover { + box-shadow: none; } // Links within the dropdown menu @@ -204,7 +209,8 @@ } - .dropdown-menu > li.critical > a { + .dropdown-menu > li.critical > a, + .dropdown-menu > li.critical > a:hover { background: $menu-flat-dropdown-critical-bg; } diff --git a/ui/css/src/modules/_modal-flat.scss b/ui/css/src/modules/_modal-flat.scss index 8265140..90ae44a 100644 --- a/ui/css/src/modules/_modal-flat.scss +++ b/ui/css/src/modules/_modal-flat.scss @@ -76,7 +76,7 @@ border-radius: 0; border: 3px solid #999; background-clip: padding-box; - @include box-shadow(none !important); + box-shadow: none !important; border-radius: 0; outline: 0; } diff --git a/ui/css/src/modules/_navbar-flat.scss b/ui/css/src/modules/_navbar-flat.scss index b54db68..47246a6 100644 --- a/ui/css/src/modules/_navbar-flat.scss +++ b/ui/css/src/modules/_navbar-flat.scss @@ -355,7 +355,7 @@ margin-right: 0; padding-top: 0; padding-bottom: 0; - @include box-shadow(none); + box-shadow: none; } } @@ -418,7 +418,7 @@ background-color: $menu-flat-dropdown-bg; border: 0; border-radius: 0; - @include box-shadow(none !important); + box-shadow: none !important; background-clip: padding-box; height: auto; max-height: 400px; diff --git a/ui/css/src/modules/_network.scss b/ui/css/src/modules/_network.scss new file mode 100644 index 0000000..5ce2c7a --- /dev/null +++ b/ui/css/src/modules/_network.scss @@ -0,0 +1,317 @@ +// +// Project Wok +// +// Copyright IBM, Corp. 2015 +// +// 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. +// + + +.network .list .column-name { + width: 20%; + max-width: 20%; + text-overflow: ellipsis; +} + +.network .list .column-state { + width: 10%; +} + +.network .list .column-type { + width: 15%; +} + +.network .list .column-interface { + width: 15%; +} + +.network .list .column-space { + width: 25%; +} + +.network .list .column-action { + display: inline-block; + float: right; + height: 40px; +} + +.network .list .hide-action-item { + display: none; +} + +.network .list .menu-container { + display: none; + top: 58px; +} + +.network .list .action-button { + float: right; + margin-top: 2px; + margin-left: 5px; +} + +.network .list .network-state { + display: inline-block; + height: 16px; + width: 16px; + border-radius: 8px; + margin-left: 10px; +} + +.network .list .nw-loading { + background: #c0c0c0 url(../images/theme-default/loading.gif) + center no-repeat; +} + +.network .list .fa { + background: #a8d46f; +} + +.network .list .down { + background: linear-gradient(to bottom, #AFAFAF 0%, #AFAFAF 50%, + #AFAFAF 51%, #AFAFAF 100%) repeat scroll 0 0 transparent; +} + +.network-config { + font-family: Arial; + font-size: 12px; + margin-bottom: 40px; + display: none; +} + +.network-config .section-container { + margin-top: 20px; +} + +.network-config .section-container:first-child { + margin-top: 10px; +} + +.network-config .section-container:last-child { + height: 200px; +} + +.network-config .section-container .bridged-inline { + display: inline-block; + vertical-align: top; + max-width: 520px; +} + +.network-config .section-header { + font-size: 14px; + font-weight: lighter; +} + +.network-config .section-content { + margin-top: 10px; +} + +.network-config input.invalid-field[type="text"] { + border-color: #FF4444; +} + +.network-config input.invalid-field[type="text"][disabled] { + border-color: #666666; +} + +.network-config input[type="radio"] { + margin-right: 5px; + margin-top: 0px; +} + +.network-config select { + color: #666666; + border: solid 1px; + background-color: white; + padding: 3px 4px 3px 0; +} + +.network-config .input-container { + height: 20px; +} + +.network-config label { + vertical-align: top; +} + +.network-type-wrapper-controls input[type="text"] { + height: 38px; + line-height: 38px; + background: #fff; + -webkit-border-radius: 5px; + border-radius: 5px; + box-shadow: 2px 2px 2px #eee inset; + border-top: 1px solid #bbb; + border-left: 1px solid #bbb; + padding: 0 10px; + margin-top: 5px; + width: 50px; +} + +.network-type-wrapper-controls > .dropdown { + margin: 5px 0 0 1px; + width: 180px; +} + +.network-type-wrapper-controls input[type="text"][disabled] { + color: #bbb; + background-color: #fafafa; + cursor: not-allowed; +} + +.network-type-wrapper-controls span[type="text"] { + padding: 0 10px; +} + +.bridge-option-column { + display: inline-block; + vertical-align: middle; +} + +.bridge-option-column label { + margin-left: 42px; +} + +.network-type-wrapper-controls { + width: 80px; + display: inline-block; + vertical-align: top; + padding: 5px 5px 5px 22px; +} + +#enableVlan { + margin-left: 42px; + vertical-align: middle; +} + +#labelEnableVlan { + vertical-align: middle; +} + +#labelNetworkVlanID { + margin-left: 42px; + vertical-align: middle; + display: none; +} + +#networkVlanID { + width: 80px; + vertical-align: middle; + display: none; +} + +.network-config .input-hint-icon { + margin: -1px 1px 0 0; + display: inline-block; +} + +.network-config .input-hint { + margin-top: 3px; +} + +.network-config .input-hint-text { + color: #999999; + font-weight: lighter; + font-size: 12px; +} + +.ui-state-default a { + color: #212121; +} + +#networkConfig { + padding-left: 30px; +} + +#network-root-container { + + .wok-nw-loading-icon { + background: transparent url('#{$wok-icon-path}/spin5.svg') no-repeat 50% 50%; + @include animation(spin 3s infinite linear); + height: 16px; + width: 16px; + background-size: 100%; + display: block; + position: relative; + top: 12px; + left: 50%; + margin-left: -8px; + } + + .up .wok-nw-loading-icon, + .down .wok-nw-loading-icon { + display: none; + } + + .wok-datagrid-body { + span > .fa { + font-size: 22px; + width: 20px; + height: 20px; + position: relative; + top: 10px; + } + + .up .fa { + color: #a8d46f; + } + + .loading > .fa, + .down .fa { + display: none; + } + } + + .wok-datagrid > .wok-datagrid-header, + .wok-datagrid > .wok-datagrid-body > .wok-datagrid-row { + + > span.column-state { + width: 2.92207%; + text-align: center; + } + + > span.column-name { + width: 19.2207%; + } + + > span.column-type { + width: 10.3896%; + } + + > span.column-interface { + width: 10.3896%; + } + + > span.column-space { + width: 31.169%; + } + + > span.column-action { + width: 25.909%; + text-align: right; + } + + } + + .wok-datagrid > .wok-datagrid-body > .wok-datagrid-row > span { + + &.column-state { + height: 53px; + vertical-align: middle; + } + + } + +} diff --git a/ui/css/src/modules/_storage.scss b/ui/css/src/modules/_storage.scss new file mode 100644 index 0000000..e69de29 diff --git a/ui/css/src/modules/_templates.scss b/ui/css/src/modules/_templates.scss new file mode 100644 index 0000000..522c1ce --- /dev/null +++ b/ui/css/src/modules/_templates.scss @@ -0,0 +1,99 @@ +// +// Project Wok +// +// Copyright IBM, Corp. 2015 +// +// 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. +// + +/* Add Template Modal Window */ + +.templates-modal { + .modal-dialog { + width: 1100px; + } + .page-list { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + overflow: hidden; + } + .page { + position: absolute; + left: 100%; + width: 100%; + height: 100%; + overflow: auto; + padding: 10px 30px; + } +} + +#template-add-window { + .modal-body { + margin: 0; + padding: 0; + } + .modal-footer { + margin-top: 0; + } + .modal-footer .btn + .btn { + margin-left: 0; + } + .modal-footer .btn { + margin-right: 5px; + } + .template-modal-container { + padding: 10px 30px; + position: relative; + } + .template-pager { + background: $table-border-color; + width: 1082px; + height: 689px; + position: relative; + overflow: hidden; + } + .template-pager-container { + position: absolute; + height: 664px; + width: 2164px; + left: 0; + transition: left .2s ease-in-out; + } + &.modal-content p { + margin: 0; + } + &.modal-content h5 { + font-size: 13pt; + font-weight: 400; + margin-top: 0; + } + &.modal-content label { + font-size: 16px; + font-weight: 400; + font-family: $font-family-sans-serif; + } + &.modal-content button#iso-more, + &.modal-content button#iso-more-loading { + margin-bottom: 17px; + clear: both; + } + &.modal-content div#iso-remote-box { + left: 1082px; + } + &.modal-content div#iso-local-box { + left: 0; + } +} diff --git a/ui/css/src/modules/_toolbar.scss b/ui/css/src/modules/_toolbar.scss index eaa962f..77455fd 100644 --- a/ui/css/src/modules/_toolbar.scss +++ b/ui/css/src/modules/_toolbar.scss @@ -16,7 +16,7 @@ // limitations under the License. // -.toolbar { +.navbar-default.toolbar { height: 40px; padding: 0; margin: 0; @@ -27,15 +27,29 @@ height: 40px; } - a { + .navbar-nav > li > a.dropdown-toggle > .caret { + margin-top: -5px; + width: 20px; + margin-left: 5px; + } + + .navbar-nav > li > a.dropdown-toggle > .caret:before { + top: 15px; + margin-left: 0; + } + + .navbar-right.tools > li > a { font-family: $font-family-alternate; display: inline-block; color: $highlights-color; text-decoration: none; font-size: 13pt; vertical-align: middle; - padding: 6px 0; - margin-left: 50px; + padding: 6px 0 !important; + margin-left: 50px !important; + font-weight: 400; + width: auto; + min-width: auto; } span, .fa { @@ -52,7 +66,7 @@ @each $page, $bgcolor in $colors { -##{$page}-root-container .toolbar { +##{$page}-root-container .navbar-default.toolbar.toolbar { background-color: $bgcolor !important; } } \ No newline at end of file diff --git a/ui/css/src/modules/_wok-confirm.scss b/ui/css/src/modules/_wok-confirm.scss new file mode 100644 index 0000000..21693ac --- /dev/null +++ b/ui/css/src/modules/_wok-confirm.scss @@ -0,0 +1,42 @@ +// +// Project Wok +// +// Copyright IBM, Corp. 2015 +// +// 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. +// + +#wok-confirm-modal { + + .modal-title .fa { + font-size: 47px; + color: #fdb813; + position: absolute; + left: 38px; + top: 19px; + } + + .modal-footer { + background-color: $state-warning-border; + } + + .modal-header, + .modal-body { + padding-left: 100px; + } + + .modal-header.icon { + padding: 19px 0 0 0; + } + +} \ No newline at end of file diff --git a/ui/css/src/modules/_wok-grid.scss b/ui/css/src/modules/_wok-grid.scss index cffaede..d340794 100644 --- a/ui/css/src/modules/_wok-grid.scss +++ b/ui/css/src/modules/_wok-grid.scss @@ -95,7 +95,6 @@ .wok-list-description { font-weight: 300; font-size: 10pt; - width: 196px; overflow: hidden; } @@ -108,6 +107,11 @@ cursor: pointer; } +.wok-list-content tbody tr.generating:hover { + text-decoration: none; + cursor: default; +} + .wok-list-content tbody tr.selected { background: #ddd; } @@ -119,3 +123,22 @@ span.wok-repository-status.disabled { .wok-list-cell.disabled span { color: #999; } + +.wok-single-button { + padding-bottom: 16px; + margin-top: -11px; +} + +.generating .wok-list-description { + padding-left: 24px; +} + +.generating .wok-list-loading-icon-inline { + background: transparent url('#{$wok-icon-path}/spin5.svg') no-repeat 50% 50%; + @include animation(spin 3s infinite linear); + height: 16px; + width: 16px; + background-size: 100%; + display: block; + position: absolute; +} \ No newline at end of file diff --git a/ui/css/src/wok.scss b/ui/css/src/wok.scss index 9c0dee2..ef29938 100755 --- a/ui/css/src/wok.scss +++ b/ui/css/src/wok.scss @@ -64,14 +64,14 @@ // Override panels .panel { - @include box-shadow(none); + box-shadow: none !important; + -webkit-box-shadow: none !important; } .panel-title { font-size: 21.5pt; } - // Login @import "modules/login"; @@ -84,13 +84,41 @@ // Dropdown Button - Flat @import "modules/menu-flat"; -@import "modules/host"; - +// Line Charts @import "modules/line-chart"; // Wok Grid & Wok List @import "modules/wok-grid"; +// Wok Datagrid +@import "modules/datagrid"; + +// Wok Confirm Dialog +@import "modules/wok-confirm"; + +// Wok jQuery-UI Accordion +@import "modules/jqueryui"; + +// Wok ISO / VM / Template list +@import "modules/iso-list"; + +// To do - Group into Kimchi + +// Templates - To do: move to Kimchi +@import "modules/guests"; + +// Templates - To do: move to Kimchi +@import "modules/templates"; + +// Networks - To do: move to Kimchi +@import "modules/network"; + +// Networks - To do: move to Kimchi +@import "modules/storage"; + +// Admin - To do: move to Ginger +@import "modules/administration"; + // Utils .absolute-middle { margin: auto; @@ -102,6 +130,17 @@ text-align: center; } +.wok-loading-icon { + background: transparent url('#{$wok-icon-path}/spin5.svg') no-repeat 50% 50%; + @include animation(spin 3s infinite linear); + height: 16px; + width: 16px; + background-size: 100%; + display: inline-block; + margin-right: 5px; +} + + // Animation @import "modules/animation"; -- 1.9.3

From: samhenri <samuel.guimaraes@eldorado.org.br> Signed-off-by: samhenri <samuel.guimaraes@eldorado.org.br> --- ui/images/theme-default/Makefile.am | 2 +- ui/images/theme-default/alert.png | Bin 3537 -> 0 bytes ui/images/theme-default/arrow-down-black.png | Bin 2942 -> 0 bytes ui/images/theme-default/arrow-down.png | Bin 537 -> 0 bytes ui/images/theme-default/bg-mask.png | Bin 2899 -> 0 bytes ui/images/theme-default/bg.png | Bin 35585 -> 0 bytes ui/images/theme-default/check-green.png | Bin 3501 -> 0 bytes ui/images/theme-default/check-grey.png | Bin 3535 -> 0 bytes ui/images/theme-default/folder-arrow-down.png | Bin 2956 -> 0 bytes ui/images/theme-default/folder-arrow-right.png | Bin 2958 -> 0 bytes ui/images/theme-default/icon-alert.png | Bin 3545 -> 0 bytes ui/images/theme-default/icon-centos.png | Bin 0 -> 4734 bytes ui/images/theme-default/icon-debian.png | Bin 0 -> 4239 bytes ui/images/theme-default/icon-event.png | Bin 3791 -> 0 bytes ui/images/theme-default/icon-fedora.png | Bin 0 -> 4449 bytes ui/images/theme-default/icon-gentoo.png | Bin 0 -> 15307 bytes ui/images/theme-default/icon-opensuse.png | Bin 0 -> 3046 bytes ui/images/theme-default/icon-setting.png | Bin 3664 -> 0 bytes ui/images/theme-default/icon-tool.png | Bin 4466 -> 0 bytes ui/images/theme-default/icon-ubuntu.png | Bin 0 -> 4818 bytes ui/images/theme-default/logo-flat.svg | 43 +++++++++++++++++++++++++ ui/images/theme-default/logo-plain.gif | Bin 1601 -> 0 bytes ui/images/theme-default/logo-white.png | Bin 9879 -> 7583 bytes ui/images/theme-default/nav-bg.png | Bin 3043 -> 0 bytes ui/images/theme-default/thumb-guest.png | Bin 3896 -> 0 bytes ui/images/theme-default/thumb-host.png | Bin 5069 -> 0 bytes ui/images/theme-default/user-icon.png | Bin 269 -> 0 bytes ui/images/theme-default/wok-loading.gif | Bin 6181 -> 0 bytes 28 files changed, 44 insertions(+), 1 deletion(-) delete mode 100644 ui/images/theme-default/alert.png delete mode 100644 ui/images/theme-default/arrow-down-black.png delete mode 100644 ui/images/theme-default/arrow-down.png delete mode 100644 ui/images/theme-default/bg-mask.png delete mode 100644 ui/images/theme-default/bg.png delete mode 100644 ui/images/theme-default/check-green.png delete mode 100644 ui/images/theme-default/check-grey.png delete mode 100644 ui/images/theme-default/folder-arrow-down.png delete mode 100644 ui/images/theme-default/folder-arrow-right.png delete mode 100644 ui/images/theme-default/icon-alert.png create mode 100644 ui/images/theme-default/icon-centos.png create mode 100644 ui/images/theme-default/icon-debian.png delete mode 100644 ui/images/theme-default/icon-event.png create mode 100644 ui/images/theme-default/icon-fedora.png create mode 100644 ui/images/theme-default/icon-gentoo.png create mode 100644 ui/images/theme-default/icon-opensuse.png delete mode 100644 ui/images/theme-default/icon-setting.png delete mode 100644 ui/images/theme-default/icon-tool.png create mode 100644 ui/images/theme-default/icon-ubuntu.png create mode 100644 ui/images/theme-default/logo-flat.svg delete mode 100644 ui/images/theme-default/logo-plain.gif delete mode 100644 ui/images/theme-default/nav-bg.png delete mode 100644 ui/images/theme-default/thumb-guest.png delete mode 100644 ui/images/theme-default/thumb-host.png delete mode 100644 ui/images/theme-default/user-icon.png delete mode 100644 ui/images/theme-default/wok-loading.gif diff --git a/ui/images/theme-default/Makefile.am b/ui/images/theme-default/Makefile.am index 85fdf5f..ad35a51 100644 --- a/ui/images/theme-default/Makefile.am +++ b/ui/images/theme-default/Makefile.am @@ -19,4 +19,4 @@ imagedir = $(datadir)/wok/ui/images/theme-default -dist_image_DATA = *.png *.gif +dist_image_DATA = *.png *.svg diff --git a/ui/images/theme-default/alert.png b/ui/images/theme-default/alert.png deleted file mode 100644 index 73435344db43c5ba9dccf5a227f3960782c2425c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3537 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 LNkvXXu0mjf{kNy& diff --git a/ui/images/theme-default/arrow-down-black.png b/ui/images/theme-default/arrow-down-black.png deleted file mode 100644 index 2c05f00498232213a081497051c94d16537daab8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2942 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 diff --git a/ui/images/theme-default/arrow-down.png b/ui/images/theme-default/arrow-down.png deleted file mode 100644 index 3f5239bbb93ad8660f47d3def443e42b8f57c6e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)<h;3K|Lk000e1NJLTq000sI000sQ1^@s6R?d!B00004b3#c}2nYxW zd<bNS0005dNkl<ZIE~$sze^Nw7>A$d6~#>G7g3=>Q#G^&cL#z*Q$%}FLnMWF=;0ky z&|yo<#f2xjw6^sJL}L+>rbk<lQf`6m4I+8ox1kd>!=xqXGrqjf!~62S@ZUy&d_HeP zq|VMxrlzL$3=a<v_W}piuaVE^O(~t<*x0zVwzk%>S4p8z=mPEn&wyM2ed+_?sd}|g zDEv`2GBVPo-j0Z3L|jmxbYwD_l6og14yzZ{&P*orF`Lb<HX4l`lF`x89-yE;RF9}l zbve`-b+%nN6cP8-Dsb{wNx57Obtoe4t4Gy!^@UpO$Y!%&)b|n5ubx)BBjTLem&@fE z3kwV107|7&q?E1zkJS?@?IFtQCjrLB#sGR!N;UNca6sJv-T~w4LQ3g6@CfJw)`1z| zW~<d&nVz2hdHyY<_X2sKxVf6T1Uv_ZQc9<Q@4!o-0xV5VP6BKfwPpJw;xbSN`rGAI zU|+lcHBd|`E!OMxw8`x__5A$&`oO@zVnocUXCvZxM07_)Q+=!60+uHxCbn_E{h7JB zIR*y@SJZj6S3RS?Qp*wXxmK&~V0NswHRI#sG@H$1z%}5F`k`8_wsvE7O{G$aN~QAG b{J+T$+X03p_V~Q~00000NkvXXu0mjf`lS0g diff --git a/ui/images/theme-default/bg-mask.png b/ui/images/theme-default/bg-mask.png deleted file mode 100644 index e93afac51302bb32de2e1fba046d9f6b6fa40b2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2899 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 diff --git a/ui/images/theme-default/bg.png b/ui/images/theme-default/bg.png deleted file mode 100644 index baae5bb85140cf85ce0efd87f6c4e23bb8689b0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35585 zcmWh!19V(X6yDgjZ8m9R+iC2ivDw&-(YSH8QDfU^tj4x&JOBINIr|o8X5U=Sz2ChP z`Bh081(6UD1OlPR%1EdJ?|Z=OA3P**A5teL1l|ywWOTlRKuB2szaT&vS@^(@<fbyJ ziXf0T4G0t%3<5oU0Pja2kQ+M)bo>nj;!6X8@EjA3`lUdisBl>cQFYJdpKnX<21f~h z&LE*hf)4RD9&}69>63X?-MSbOtl;CV-h=V3CSCf47M*iM6S{T3`^Rwa@9z%^2fX_N zmyZv>prD_>zYuWo@$vEUKHVP8OifMA%*@=}+ziH%85tR6XJ-SWUteE+U0klWdczM6 z4)XK!Q&UsX$b^VV{=YgpI>1?3S-*e3KVIz|Ok`_mX(=l!TUuHIcWG&9V7kATmzTG< zw~x=u>(kBI+1b<6)78~gI2zgW#(T-f%hk>xaCM&F-8H~@`ue^Ci&$A%xw-j{c6on4 z|Gl%l{S}z^`1p8tcQ;d{42*p{0VXRcE5ED(>x?5428I9^F&Wv%>(h*0!0Y1`F#7iP zw(H}iOV}Uyx-+<bcyx5MGZ+Va^#thV=lAjR6XfN!P8K)-C|+AzD^kw>ot-@~KJNei z`t<y~%wedn|Nl&2vA{!tX^S|W&CQ2yodF-~T|&ab*}s2xc68jSZgd5F0K+D-g#mhn zeIGBcucuoZFa-6g<`Hjk{YHm}WgQ=G4kmz=zCY~k?E!41qoV`Z2n>IF+TH#00I=R> z=Q%_<Tj&nK&&9{X#l^+fcQwDWv-39?3<mfLP!Ifpqod=QTN}WVdw`75(NRDEz8~*z zr>CdDzn-3!_nJcZ__ys42murZ1O&Lcy7~j8yuRMv0w30uNjEk&9&{?k0nYKc1LPcv z17clrU*FgOD7o+Tn;9OC#G3c^`*`o5@%QuV0BAL<?|fT8YbuGAJh=m?ioIt6cn{76 zZb?Z=T)>0NC0{SM#IrYl1w3Bn2E1Kv_3rGL+RnNi6DTPu>AnHNJwXGn0qS(I(bd)2 zX=rFD1Ss6|?a}*tC)pwI|I7wh3^1G9AD{%FF<Z#*SYBC4$<WB?MRH|6{c!f)+D~iY z9bg)uPypZ1(9i`hOXX3kwVWr`y}xM@PekfP!$^PItPy@iSE%0J`;X@jq3ptgPeX z<LBq+z+K4id6u%Ne=Yr7Ds}7duy|%3Hwz3l4+CTl2+-f#`}pr-;m;vp32hT^B1rF# zkDkuXQ#I$`YdL_&zTpO&0Q&J;$oFxw!7+0AaA#+yTx!E7<BR>7cTB4Ads}<E8RPo; zx`Ts5Y;3IevwwNlg$7_gfY5{if&uOoG&O@C0h!$j+54_6QQkKiHv7z%nyUjGNWeKt zbi-TeU;hA1;NlGbF6O<Ye~%AfSM8_M6F>n0u98hFe#-_#n<hKt;u^Y&!d3Ns($THq zxwW&YY;nClph9HfdZo#cMd|%d_~~Eov~#BiK=QYzr_5!qmzPe?&IwNfe0<)Xo`<Mp zWMm$pfNFRFKSJ25Egu2`%KBZ_IZwAS*A(!4%g{Dca4f0+LMH6Ly0+Fp{wCL0{<5U< za=kYSj07|fkj9H)WB!Em!2h;#G*h&yl-a|1>j{Wu(8I&S{$^=Ohps9B(4v3qyVA9t znx$%<fcLn)ovi|Nu7zp3?%r>W0++jPZRzc5M|#v1P<P$>K^8UPcn=<7;fbR9zsTRo z=Jssa);drXr6r0d4<1eo#@mT(w|af{{R_fRzqv`(MHsvRo@iVVVgfMWw>Q74nP(@j zyy#V}i)pHcMnB20obch5dwjz#%M&>dIsIkLwx$yz-pb1K@T1<f5TUw_5k7a-wK65I z6&B1ByWQ{Fm8&i(m3|ZJ550oDGc!rHNk0ygR^9-+tupEYWZ~{B=)~`{3?9#k((*nB zv=8{%U2SD3C{d^>`M5Fipq1?H>13g*>+N1oOQ3hv>o|O3V&Z}HAh|g+sLpU*@n86T z6|4EgWKWGfq^Oq4q8SoDx4je5%=5kSn}@gevayMdPY>mf=;-Kk*+KK2g5Q6b7S<n< zNIGM!eU^l9%I;!Wh5$NMOpO-Q8V29G0moPC3pf%$KP9RB<jZDduLS^Kjja_?_5AAJ z++5I?-(84b<(dD_1aIX*!ESW=%m1zf@KmAbOU>JlWo2b;ZEfp$XP533vSjObScuV^ z8^Obg75+->Q;@t0SuTZ!-SG|RLkE0q=xY=;7HsKr)-WqQ`Wk4nkxPsHTj!sA)wc|) z)+%p{mpDab$mTxoIhCgWidoW1y1eD8HCs#jkW*V_zPLR!LV-6fe9hAIAdJNi$_w5B zhYaY^zkiBCfVF-~ny>i&^?4vXJp4VY#iflSy#E`pYn=N59ulyhs>;fdKyYrQRd``s zvcDVhY1_+c_;)#iDwDLJ801EY#uF`Urb_cPVD!cLIR_2+bDVno4*E4$`pV2h_2y%m z`I#OWDJe(Cn`<F!-Kq<j#7tFHReDxY5gi26ug#~Y7WtGTL4N*G((;}2BhDni(Ewg% z5352QZN~q>$f6cJ#O0dU*UX}3S;^we39Kk|RM5C;z|EaTA9-*p_1?{1TX<f#ipX44 zzHvDdmB4bX7q9H@3|Eex?b8UdNBAgil$_5Hl+l!^b%Mc#P{rI(KX2-E4&}9yHrL_R z6-MQB|M-HNlG$?sfx&o6@f)J*<Lgr$icLRXvkqTTab|qYx9i2|q^{RJwk&Ju>cPY+ zQ0a9ML2%D8t9K(c(W>5^oGpgWq|2P0&C43X;pf}twW3%zi(r(?5I=(n%~I!Y6B4a) zadF^BPy$!Z0*2?_<8rCK?*!J6%eOx_?DlhjJ<B^I8hDoiT*vKjqu|e{RG*SrxB&J& z+^4Ort?O%!vh10QCFscxpD-xUG+h(Fmpxal+BDzyzbE;9;EKRN4kVb6BY8mIZ<N4v zVIsFQq@&G4Ju3~Pqw<5S@*4)n6r2j7;vGJ;16NjE;}a9Y5nFtr=1MHLfI^oo`9qHy z7#K8YfFn~j0mu6fS$=(u5sM9D*g4?o+B`tZf969B3rvkG);v#m$4QWe%W77{w1D;y z0Jt(5RaOy;{F{ZY#%7&9=B3_Vadej>`)`_M>DEV<f5y1ExyxNP+NPYA&Ve1iRTn~8 z(AT1q6OVF$q`?^O3fXq~U^nRRm$#9*ISs?g$>`oAg6B~#8LlOQV<!E$lamux<>uyQ zrdx99jVfQje1HvgYl{MeP51`v!hpYfzxaR45MFDYZx8qN^o$pIC<M3waQkl!pha{a z7awn3q)a#Q=|_&hF4PTUE(0c_YhGcfu^L`h2^3jS4;udL4pWCx9zo`AWbPtpT$zNB z@aoRTyA=G&Y`T#W7!oo>vU*M=(O5Q}jieNGth<M9SM9|%Cwla1Udpf9pARv-_Cuhd z4Mj4@x1q}5u`;Q+$@8bFAbdhw$KUs#-Yp?SG^zCZ!yr5zj$;K!OG3G|<scqWME~ZG zvvLpr=j8K%0X-g~WfbX?Ky#zuEo>?YQM!P)6Qh@m_7?hT93W2I<%s(F-AvHcqaL4i zLK}K!eqUeRb>8omyThJn3C@CjS*+OY+x6a_d4NtgBTPbsYe1k{sb;&E(b~m+G(VZw zKxhoKaA>l<h#{p}1&5wRx!x95AV_nAwnef-EROEsqK|l!lvvC?R>%Gm6mDBFc&A(h z4qGUm7p+92(JGhYz+NIW?ssmTxqUic4*ws5Wtz9MY`Z*AejZq)@@DzO^#Plt^`^t+ z2l3&XIz*i<wF35$$GYD6*H6idoxu|}$$<IubaslTtu$d%?*_bNvQny3<d3eq)_qsi z8?<TZDE*a3bMFR6gZnqG6_$NESD2sQHa%oE=jE839q))2bp8Cy_wsysnbS%06>6z8 zMnh>7m7&kImW`FQd)hu`bjPt(*UvOX14ULbVUV88YKmi#BL;})LSOOp5e{~bmUuJI z>3kTa&n5=o<MVcxxL};!BYdu|@08s4Y4vEgfSpn>RCCu!@5?1M5}Do9G!RWkY2sA% zvhmHFsg*e3DW&HmtwrKx?(6B1pj#jjZm;Acxj?wxswQRP#B}<+z0lm1flcf{W`r z?ykP36FYE_w@{UE1p;pmkJK*>%HXwC?+>>?Y+gUS)Yf==$Jq&}BHkMJg`1{G7D>;D zJ=F$BHXf8YHwK1)HAiz22S>*rXyqD%GEsI7K-g1RS?L+6puKU@tEU$h`F2cHcPnW4 za3JXa^7gR7uXiq?A%S4ccE8mNw<mPZHduO?_c%(<;L;<?M=Tj-0PbvpH&9)Y+BP=x z=FY<54K?-rjZ7UIDi?BtIC=D4;P-NgKw?*!%~y!Jf(s8$OrrbS)I?00cjQd6!~Le2 zJg58G%hm@R+iUBfq5hRoE%NPB%};#ZVswUr$a><nQzK=Nt;dwsygJIHsEhfC%{P_l zoU>U9s>+LG9Pa&9+jp02izXW4p}&Ew#lsh|r08E~YpW_71f@ek6t^8GV)#{i&T1m2 zD~fMr55t$%^{&jM7@g1m5O)5EK#WxTjnaA%@p%mW62MNm-@XeO)27W`%zip>BA@xH zm%VY<*4jFvQqK$nGV1g_YQ+WF)h^zh;FM<iG>+Sr^|9^>3i_s79pvNZC;i~r-;yNM zuwfMWHEU#Ga2KHWk*D|2@&OYY)l3~=1=5xy$a!a0YU}EnSe00*eqjyfoLTx>1f(lI zaKE=TWFgTlM{4+JD0FzK`dXCE*47L@!+g`MBGjDJD)xTZ2O_UZ7viuO2EQR7dhtf< zgwV>-|D7!e1XR3Ybvi<oMVKFecf1?{Chk*A&j9us$ZA(fp4;{ZeqHw=6<J*8S6W-P znNO`v2SzNW<(Zu2=%<JO1N6(wYIdX4QgUtW4KU#2fGYwLmsi&HM~VgxEv9v*c1ALI z=PG`|JB>At`snplzmF~LH1Rf`m#IZ-vy8b>xwtP4h8g?m@ygVE)}+W}yt+qV8i=d- zu|T|3EAd1u7BFkU)}?8CWEEhh2+Ch?wxZtyWNcAe18doi!&(w*vjX)(b(}|~;Qj2p z3}H`6jNeUzf#jhSp`!nI>`s-$n@cwG704+(X)|?YCfEFZecM}Fo}TY)DX{QsXHKI@ z$;ejfAc@$A=6Rl3={9$Fsl~*kyZTR|qR#>yOy)Z!RkVKk0BM(phZaTfjeWz)!w7_d zOlYg&kK8kuIt=?1PL`;{*X|u%<)LTQ1aCZ=`g!8sKc;mDq>{Vp6uDSS%2clo<A1Lj z4*jqWYn0jghSeVeni$un0}c4lJ2JO@Fz_wDv88x<Rt>!w_wW`P)+VLOY8N*r+l;np z6|}~RY00loj^C*!mvH5?EigNX+MQ_@Gsvuq{$|DJli;tJCDtQfIy=|6L!TRNSfCa! z<o|0hi>T7!mLQ&MMzruldmpbd=dpCuJs`lyF8_Y&9)V=ZQ}X&=MPZ`cUF1cJeN>b; zKX?HVo+VI#uIuBS|DvVS`lRtOVNqE=a@)as#a}Sh8E_Odnz^F2DfpE8m+knFUV2Bo zSSQP_Lgn&E73&fCk*fKf*~6#kWtfpvxzO<3LM_2TA|Zu4=@1wA*r>K2)V79j)BZkc zySWOnw`C)ft$6X#1}Dtk{3(W1vQ<^|R(pGlYu&`Nwf3#-Sz+*^*Nk(vYAGp|hcjIc zg*91U=;T_bGxzC%^l5#HqicZORe#g{tmBaDqga}T5z2-(OeC4&McvI1FDAmhYLk-x z4GwXL&*GI2B{ub%yE|0F;i9Y-$Qzjqo5)zQSALG_yOjp7w+uH!KG`x1U$-#6_G&JF zO^SLE@1Z%3z)k7!=<4V|85+&Jo0Ab6{VMv~rcRDt!#uaK)j>}3mxlAA-pao*b;IR< zO4=ScSOr6(&+u$w9^)_ata~MXo#bY+!^?VsEZQzb_nrv(W7Hf<gL%#9T}&Ig%~aGd zpYGA+`x`<_zsnn*M}oCz!dQr*k?-`*F-=5H=CDY+k=}Q12~MXoaNn-3YV@9g^iWBi zT)Vce$K!`C+9sOQMo>G<6f;s)1$UUG+IcOWoyGxei0H=OM$cOT0C3PMe|mp=0j5fL zEd|?zJJr0?ZWJF#V<NOLv5x2_XTqXfQJ0sSz;Pm<j9uWQhj?NaUt*TpBCoa?ExZ4! z(7nRTD#7n6)pf_X0-fr!P~!oLL)K7mfjUILgzZ0U3>H?hk%b|V7Aedpn{6c_0hOPt z%IFVEBa{Br7-%Cem*AA1_}(80Au1pwBn1W1WrIbnI5|8tfS{9S3O(wffbj5{kpkc# z(~UfyL^h#A+MpM+cfD)@>#Fib9T!+fKKdq$ME+=0^N`$ERk)n!ioRxhb}+<=MTPdv z-csZyP9SxDMVC+lkY#&N604oAV)JUakB;AQD|l>_I#kBh=X457Fic=UB)LU7OjG$n zh>&7O-5{;4z1Irs8ya3$kce6+UmDtMkhwqxP6r9Rg)Obw**Ic+XZ${zd!r^Oi=Iea z(DdEi2U!!bOZsaB^w<zgbW}j;LkO=)cCK>uWGkv(dVEN+fM(#0-A?>`|H%k(2f1l( z$ZoHBiahbZ7p)!Ua5arBdyXLDAkDIW3Fy?`U(_4Wt{+GX!owQf*+Qp*<hi}Q{a3u$ zXY4W#*tDMcVr?#?{4LqfEaX$(7{AKsB5k{gyDuecnJw1*7hpy&p+eQ{yJEJ=gV}R+ zlPTK-3=j?_UZzwnlE3%)CLC5LB4$E(vNlf~FuL-dsIFA_9BGHJzd!B>m&ZL8^47ms zT`vNlhh7XW7TBXV_*CaLe4YRlj)+eKgZ@{WKH382>!PmHzu}Qbu)$htixL0c^==XX zv?#sbH+60O24Fk`LqpBedEF%~UBwtygM^qLsMCd-qR=ycN9y(U_51D*bD?TdhbaA~ zlBknwzye@)@{ho?xs+R|D0<JPy@=H;Pdv`v`?i{qcEYNckj%_XWU~#@WU;Xv1u`MV zpJ7bVfqM3vB9=8xYO)s*^+>f?+<ij#ClrSrl5ty>%^b#Ysj7$Tn|gm0G>hyCdF>z^ zkv)7rFdH-r1x=1L$O;}Yg=QBYe502Rzl_Axa<k?!XPO(H7n0lUOd${WDDNCuo7u;b z{_P|uX+R59y&SXwkfyi)gYP^4r*%OE$Vg8vqb~omv4-+c9Y2*4KcAU?l$+9HmI_=- zQ&ae?ke{&`n6_)}lG10+;Hyt8`Lgj7i#J;xh$suC36LU@>Ys4O-FeP0F4)-E@HUc{ z8|%PD?D6-uPv&KuLFGHE@DJ(ioisC0DPoXYhSVATogKQV?2iRlLraW`WWR2e->*}< z9ud^bzc>m?EANLO{76UNM}aJLof6;OuIo$}+{#$TuPzuJ<VyWfdXBA+xR2WdZNL4F zu^AtDLbT+c)~|*)HR~ky?;8xyD#6y~Kmd@cp`J?MXeo9><KW4{-v82GELddZ+pHqL z6Dx$Cxk%2PQNy_igluWBYh%RXarZgi{c29`A3Zt@|T%j8VT>7>gU;evy`!qBh5B zVRx-FkHJ{Ue&0AQA+g!cttAvK0b+FxevM+ipXs@{wr{Bm*SiF=Xa0Qe82%Hi&rjbH z)CeG%M8-V+6mma`NVBP?b9jDUDb^khff>Zs$b*_h=;--<py3zO9G0a4&R~fcXk@^) z<WT+wll4y+y9rG75CHN5Sj5KKnjetleL-Ah0<(;^uo_53*JZYP)ffmyN`Vl{d^?EM zN80Rk!4u8>31NS=-*Ha&*fxkTpB?_ibP(a&E^)8u48#%FS8QWLL1$4kgoz2BQ;8S1 zD&}|7R7N1W+I4w>tc-A#F7R%lAwm(Op>Z?z6|lX4r*7#$d6Tmp8%}bE=M>i~bTfGQ z`=frTqlJS=9<2VS?K}4KP2A<;)@<k#+->|}DkW10ehF7!E#;Eyc|oAO@5<*700BKd z9_hM|URkVYm5}&pJxWn8q@KLHs)PYWx5@|8Mdb>Cr)w^Y29aIh;%JN>r=|^?gX1A( zvLH99MDB3BV))w)-fG<B=!6fZzK-!;A|u5?-dg@C)I80T-eA+rY)HsAlyMVt@2>UN zB@uuvf2B}tq;ryZ#6+xmCxGTl!<Euwof1b({ZjtG+1=^?`273~V1QmYv`^&lyr4A_ z4wQ{@a9-TM<ATXBbbjs*cerO++00RdYAk!lxcYL7l5@I`_lu9ttW_Az?rW#chSZUN z+a|eT!T6!%9q1ZMwI~D{I=P1Q`UD2?a2SHsJ$3e7T3>1E15U0*kfk7b1%pXcqPuZt zm`abBhGHnNMmj#b7z@Sw7rT~-5kb%_4#{bfJJIOI7(!&~iA!keADZI@-t_!)`8b12 zEH)<RX+uOwe1>A}s-utARgIp+64Y(1qjbOQv?6uuW=eI+l)#9dTz^`ArNwmh*;&jr zkYi~GajYX{O*E%;hSF6d(&OK<ahS0SA(seukFK_8oDaWE=e;`qL^RzGDu<wNtE561 zMBHXc($f);Qkrnxe|>(=NFz{f#6|V`?OJz?z_bE)USLCYvqn$+=8L2xA)Y;K!>VEa zm3u&W<5`kLiX?ix!-im1ER19__d-$yeRjE&4*@<3sBmo4+f6{?kV+NHD*d2O%jhaD zoc!=~)BM`rr<#!^K_P*ZjvImeS=*X%i0^aJ#Kpu4$|}uhXOD*gR6+RV0^-{-y&XF$ z3LysC+zoXGW&DI>2y~L&k&xNx9j$9D61#Se$j^#)PIdZ<k)9Q@AAu%Q>~S8pS_tUn zxOV9Uvw0PP9)Te2S=dnzQ|IXaD;#Gl+^U^#-muKffKr|UC?t@L{2u@#LHeFzi*csz zd;oBT8KO;Rzvgfd<8dKUF;#G+-I7Y)->v_5s<yT=rK|gUcR5EBHO>K-Pr~x^>9`d1 zBGE`qhNWmKXR{SJr#Bw@)jLd}iP5sg@68<_jYD~E59$E?xY6mi0@<+ujg~;To;@XZ z-h*DHpYT->2CPLH^Lk3@aMpp01F5zIi6}Zo_mFrNpBCNtFhM<kyCS>qEtaO<qhV;2 zl*NN?Zn)uMRFTnYGmOMgDMd#ZW+ooJ&DCnvRy3R%hthj5*%LWqpDw1N*FccR{HOTS z)*F7B(|5M)!p{xO`QNPMw<uc*J|8y9E2vY6Y!$LL;-lJ0&8CpPKR>rtlIkmfh|$XY z6zf>cE6df%8vZrCxR(w-i{lR=ryb|XMZs$A`UZhEQPWZ%^{~9yf-qp^AsX|~NYGW? zKAfF9F!p8~*eacT)~3DM?HM6Hu^5&`L)=fJ4H_-o<NIw1YEQ%qYT`T>2t?X{Wi#h~ z0RS}sce-vqcZM0$fQ2m$?KS7T-kBSKJQz_uq2?79j$=|Z?zf+EDNZN(W7Pk&zdvBz zn?%2NVANWOU=}QJ6UG$LGfcU|YiTchp2Y{5*>uNJBuCMDGwU!6zfg%}uSF&j9M+eU zg<K!L6f%3l^1Qg*4l1rqIKwldxVN`78ZkQAh#W4GC6&-0i^6P*aMv)_<j}=b#rGEJ zJrG|VcKEggZ~q8j*gHeSmHe`g3LT9^A+#vk$34a7$5_ZLGm9^lE4HWVb53TVxj#{M zi`6jq0*R^B7+YxRAfApx+lbbZY^t*&!w9C>ljCtb=8u$-9g%X!5Q++WnkK7$PeAgR zxG@f7f`*!OznANiF#8C_yOM-LB16>Zl3O$U)VL?=*jT8+UJP`(8gnYi+%E34VuWj@ z%UbC7GGp6yOpoJIa?<w&aF=I_SfnNOc>gOo)?^BuyYmW1YsT>Id`}CV7olIgee}d< zXAX-N?x-}P-e1EOD>cT~q|b)`&NZwk#*jLBc@0b2Ia=!7U0#9&r%HZ$w4Z503WcSp zjPX1<nH5x{@_<9W;2XW5SQ1hpz$7S@;v}6?Mo;1Kp-0>qbZA9I+<SATbmFP5i%#`O zW=lz|cdBJi!fb-nF|-F(r6fwJ-;7ckgz=)x*i33Vh#GK)U@=Qj9o5F4p1hQd3Zy4* zo}URX-hlEPpoIJjj?QN0GUce_eX8ewA@eM+t{T&%%L`8-?ZOx5K5NP>WE4KcP}Y4H z;wm<v^peLF)w^8I00Qjyo9vG<NmqjB-PU>LR*k%JixmJs4K6?!hZyJ(!Y&sy6pj@r zB~(pmEc}y4zh4a7n**u|FU7Ibi0gLQTP5h1{Iuepc*cxO^5ebGV5Vyp4Zty51Su^T zI~h6FQ{L46&Ad^FPcJ26-lGDxJk#-~6c($Rbp?6p0SAKat2oom%fkig5+d0!)T}(k zhu16g(J<~-?sb@6GQHq&4H8s5CzmS}Ldhr<x}0B5BMH)R8)2{{UKTP2t0}LI=G5tU zq1aRz1A0-e>yqwW6*ShYz!5gg1cgG-*{i}Ffr&Pl2({5RxUZN~uSl&6X;PB$nbS?8 zUt7(XNp?a9UE_KXwbaZwrNQCC-uI7QYP<ee)7V0DD+V$&EDp?=dsOv8CeKwd{KLb; z9CD4@v({f{`@s`_cz<SpS!vA#!5BO6WAR1kamF@(l|)Ws#pl!>MzbCt5Fzn#K;~lZ zZTOmJsu($EE}{WnLo2gN-46FYtFH0$+CV${a<Rp{VzJp~mbs9V)UXH+t7Yj8D5w79 z#1=zRFKJ%NwqU_(>+BFLNSD2Ot;+aSERj{dVsm?_nHORNAxe!&`u(@v)J>ts(hGU) zZSLRxv|||!Ke!UA)5T8mfuc)Ez7q59qp1#-@WoHxc7OLrIFqJ$Z(CN^N0j5&Ks!iy z;qJ>nKL3b9V(GcN`vS>N>F#pvF6qL;k3H2$h*NL`ZR1s;+qT8*s`HECfrGcg>Wg0g zWjwl~JjLD*4QeYA^j59nc%D_vdUJ!-*wThMp7;QP$rK5LWeh5tBPEjAs=9Nt)bu&J zpA1gRf=H4lnzA4A)HnivrR=C(aFg5N`P2DOQczi;@lb;bf7RrMRM&HJ<NPr8!NkMU zKgN|!gW|F*%eg%$-)X-dUu(7beFCP+KNVoHE-p*7-@I+erGjM_c(zC_!+~s8(Lp}~ z@FuulUa&q@r0o`8)_Z;K0yt4<yEl=`U(IuJJ7JA>N9?&BYb<^nM2G0sv%n&$E<?^Z zgao&itXu&lT)!i1_Mi<Ptd8SABA5Z0Yw$u3gKku7j;5ENC>b_8Roi?{skLa!57B3g z9CU1LPOhjOINdrpMFZqZB}a8!sk|83W@B+>6RASU9r{(L!k+ew?r*;Wbq7QtXui*- zg9WOeN_nm&<ruf$iR<@EO`d`J)OJYB0!&0->@uX){>Y?5ZK(6s`}ZQkB`r5eStING znTy}H@}H#SuzXK?(KgoCdzjW$>VdWe!aFOsx$}5rpm0S$%A%M_*UxP2jxDV@T<?>G zbkc0AEU9Bgf(9SO^xXZMWz>gm97As{-7RR@aibIGn>lj~!lcL4-OO;s7{plV(XYZQ zRQ)fuW;4>rI0!sN^=#4do0Cw^<}9BNG>OTt328jZY(Lc)m{XA}lgObSrr_^n_M%^F zS>GQ@n*Ln6NZ!+XdwefxE~s1KJ1Nm8De6ZYWnFKZ1FBfT-?BhEQnEIsnbx}DA1c4K z80P!uz1{w#q^=`yl|x>r9c7&@{S7K($x8if(j8vEberLvqC$*<vStFu4uRH+_a|$4 zp7bk0Xg_FFpNqTal^G+bSOL!9Z;8CBkq8}BHE4ZZM!i2Ir){TG5t>kH5`ph|$&TjT z#lc0qNAA|k7tLKgD+kK`<$G(>=UI4O%7u%|EYd{AP((-pb+%g|J1A+*PNGnh@20z@ zUhPuR*QK)t@@I*yU_u(s0m}MlYF>O>yI7*=)DMNo>IH`60&fQ}A=AOl2K>Y)e-c z8dRi34rA_?+7L$9Sb@E>heF_DZ#)5{&}syt+Ct><4x-FfSQ~zX1b@WnEK?1lAE=)f zT$b6ASH~>TVA6qkuC$^AYrzi%2c;Z=f2uAm6arpOVQVWS5x|FwkuMHYm`1>mY3JvN zCxTG-r?4C>vMZz3V$!e~2EcQ-iH1*ZH@<Jrcl-NNwtI=8byD8>D8)McUj*q25rJaz zJRA~wgjdO9eI41P)vf95)Koj(-8#6Xd?Q!aJpeU{<4{3bs*!FWD2JFo#q7s!a7*IO z$cf%}d+Igcmj$B8_c~e}c5dwhRrLcJoWPrV!djJ22t=rZRrJDlk>Etbys(YKQX=iu zxwX4Le+Gn$pid|Hc|%b=1upnV0zO_gl4Dz)zQ7X7=I|Ooj(fPG?y?Sv@};5er{pKK zR$YUvzerJz5M;zv=uUY<DQOk9%>3kSfcPob#4@FEFqjf=7@t~59a|FI4D<U;eEAcp zA6Ux9wUp$OB!aT&;w7gu<D;^Mpg<-vhMjS^t%G!1pMF#eGmGT1Q7`nzP|Bid2R9-? zr|x^8qybNjexFkH<osW&qhlJ_g=WuURG_Lx_i;t`F-3GO^aRQGGt1hkiBXs${@!hG zPGvb>_%j-$_s6OkoSwnAA(ZiO2U;Z=$m%^KA25p79{sQ1w+LtOzwQ5-v)p%Ml)GUy z7E8r~M5MAcumHCbi%^cuAESHjN%Q4rHcS*-3d=Y}2z@N2BC6gu)a!Iq#o1_$eK7|2 z_Sbfa&?U^w`$dq8IZLYAtb7cjk^daEZj*vC>Arzm>7zofNwC%k)VvjuR_SjKAE5Qa zMn-H;-KlPnlJoBQtZG9AJzbDf6r~!w5z%>>=*ja1uQvE}C!m0zwd_ex7b%%_uT*S$ z-2<ZEK^`ZCWjBh?=`4_9{8NxN3CB{JI)4rMtY`PI3sru;>rdCspVWsjKX2*BCZ*&) zmg&Q<xn|vz#7E;<jb0IdO5`q!;)o2E(_(aOpI<fk?q3r%EPwRabEGFo`1HN!{A3bf z<2rtrL(2{Orc0uND6o=?bg}81OCgwdguM-?gq3J##e2hWsDF11hNyo;h2{IxnxE5R z&OrX|GUyvr$tWLYuIu2~q})?HWGx{Luc=<}t3*;U!*prCqM|vx-*?m-OUM1m<Gdv7 zv2;lf(%?yjRBEx~XG(CwaqQi3s{QFfIX{|ThIb|+4ML)MFPPEAYRrwOTG#ku>nqEN zd#!DUh9-LzPEhmrI!y@|QCKYZRrOpAuiQepjL{ybQ3xw_w(6XraldcbtLOVY_Z~jr zoK}*S8kBlONl+o!omvyOdPLMdxRLSCVmVan@W@u$d<&0&qGk`$6dn>3d2oUB7dM1( z33JuFf-(oy0Q7fbFxik3xoTzLiQ&$*$`)CTi!lybqbt+?t9tTJ>Wk6`yNEjC9)Clm z*D&*XdkSQJ9<bqPRBd&qx2D&36H}nLYc7!fgZNf-p%_hNbn0tO2c;Z!fg(Sxhcnu} z{~m)m1pyR1to2kZNnRYIlJ#{SuFO>^wDy@|g>$}kxqZu0Uc34iCGTd@X1Lk!b4+~# zn9Tyo1Iu%%+D3yrqv_RT-1Fhew!``>*gV>cOUQ|yzJH^cG|SoaH`aZGe_k=uVl>hF z5$B1AkW5IU%<d)$QkK(>BO2;Ujc3ILI~hug-{))^_?Q_j+vlFub-t57>$r2#!NAR> zXv^B+*rHm*KboE6&!M#NXrn`Y1b#4DYQ%ruQp`?A6wBf9kMvf|(fiQ*Ou5AJtv>^v zvfs?pasGvB=qe*;SSX5cBj`k747I9`7858?n`t<OKu`ZAd11s6EleopY3{;i@mE}b z?4_kRqJXtyDp8SL8c&mJYHD&7;a)hQ8CBIH7ndqQiNM1x5iz^Pk(JSU^c_86%55*M z&`?tx{#-g>?-5*Xv>r$hQ~1ZEgvsJ0ubID8|6IW2Oa7b>1P=li?H7~XZI|vX@TU(I z4sz1D4#|V4i?S4bY`Ui49at06F<VR8FGLP_$E9I44W*>CczS0VwOaBU?^|EEGnm(Z z?541x(j;OC3Z6B>p4ef+T6DFxLW)=@N<x~KL^~qgfe1okF(i&pzQM{_iA{-bc#E-i zPGKjvM-#kSQqq#8&ZAsq|Bg8^qsB(QdmJ3nndxE9C9a>rys6e8X^+mvmgp~E)M*BD zeJ3EtDUcxHpc!6e{SK2hV_vy514d?Y>YK`28KI{<`<AAhjjlFN9CC~&&t(JAR)B|x z2aV1JQ4w1Cc05ME+gJ@`XJT!!`Y`22bT1$88z1rwPZO%rK?|%{%jGwn*F2#&BY(cV z+6zla+sTKR%N!YCM#2*j6pN}!;71+hjegS!BARvQsJ8rCjLLk@^~=Km!V4~q-T)aP zW}9913bE*1YTY+HW>~@*UsI-`T9w;Zw%(cBD>2F`+84>rog=-rCsuepuM2Z{oTKPz zVe2HY)MQ8q!Idun>Fn;Z-?5BDG0VKgQ|~KzNbe5Vp|J)koiAYea@=9ODK87V%Atb9 zxsl^?loO7G*maUgfG@S*rrwrbNZRByMQvDu?-RQJ37>!gSy}@Yf9V>3&a!B~m`DxO z7;0Bvm-{?|pk30;-=XHSf5J}rvsoN@Bv<1F3SR#ZV_fX4(3q#=PuXw^BYLp)f2Qn7 zWk3udR#Lk?9VRBm7@&KV(OQHlKpXXnUMo0W?u)UX0$pMr{q!!F#dPW-^j0EACt7{= zkWAiKZe73g(Tq^aXUlaNYQymZ<y#F9Bqrv2v6DW7Qb3xpk*Tv>%{$vZGt)drJ*YMk zVbe~U2v9i@(`=f!<WVSG=jC}3O_hlYgM3bcE2x^^(ps2JTo$SS+@7UUrf7@FR_U)a zKzAVIZ3^>Y@mtE`9BD<*u4GCXj2QYpT}uY`)#4U>UT<`(E=qe5=oD~a;O}yxOKz=r zApcof?r_!?VYt<4QnKh_Jq1fS#7XU~gR~MzAJL`XE_0PjE%KFKbGWz(@p>N2W7ve% zx&wg!ZIh=!;~Hz!ce{zd5zI?a&N}cSOd_n3-MYM&-|+GIDCyx!-Pq-wqiLf*mw;VR zs|8|U=YqX|DnL1i7pW=ZB!-=fr4p2kaOdgjp{QelS4I4A<Yeb!PjE$f#rV&^8orP| zOY<jEOoL|Kz)5G1$Js!Y^~g7VjOIqFXy{u_OxbLn=8)Eb!wT)gXBC&x4gQf&pY5MM zS;fF8FwE17P~rJ(+EFvIv=!qpxVLDYqFhllTq7KsGJr?ieU>2aSq*agJiVj>n{Z)? zEYuzG22A-&*q19B?RX97=I;raJ$DtfmJJj&{U}G-cfX;KP=v=huN>rKH*x$CL>8wm zhC((dSu=OauGH)w0f*s=Mm#G<lqdIKk*ELFa5D^+an-VkQROl4LwuWr*6Onyn8LPj zO;d1&!#WQ%4Y{g>v#4S3rB07c;LC;GtZ!;&|AE(zyqs6tTAdSVU(S(^M)#X=_g=|l zEJ1;jwa_dbRB^zzmZJGRM<CL@>oc<%XIi;`nSjev)^Yu;iECIt>>u|<uKolTNhGNL zXZlkeL*9ih&&C*c$c=m(BnVAcv}I0~UthS)k+}2GYNwXQ#Ok?W+JNHT1=_fGu3pXB z+gnFi8<1;m#@bjqbPS&8mes?Yt3wP1kIP8x*-`O3-O}{RDIyNRjB3rE_$=Augv5KG zaMhjmI;(np>^U>trm{7b&|-iD=f5?T!aY;*>U&dml&finO@_@o)Ca4gAD2zzK!}~( z!bAj3^8DZ}>>K2QHNr2#hv1|AI<A=E=Ior?UhBOv`k_0X>V4<)<(F$KtJ<MyiFVJ6 zuJK#va)%X~a!!62QhRmkJd(no{TGPbUMpjICZ(xy-Vwli;V^6ZkGkN)Vvn?82W@Bd z#APrX^P@M}*}I3o=Eco*b!#*JeNdLaFc}~vB^@#NY<+&WiFG?!CUtMgOMEG>XNT7S zi?~)gRJ%;~$q$L1;m_$L_FDd9yxc!%wr@=qCm4d7J>MebFG{H#f^QqMT%)_?bfV@* z${S3H;-{9`bFkf}HXq4WWZUbqewf|L|B=(9T63-nn`q9t#eO!RA{dHRMeY`)a%yrJ zBea`;AfWGTbp`iB9^yFtsvWY<;i4r+TA+V49=@%&`BpsQaBU+*c1U#=Lgk#ghZ%UT z-L1qp^=s8*Bb0xOucdpv%(Nru=!qUjF4VjEpL;i>yD!k^450C010V>mNTv1+G6M!N z*Egelmt#U|sGHod5dGlI|2xtRItxKSIRb-h+#?^%HX%d1vf!#HZrKQQm0x|*&wptZ zGl8c^%?t5ciEitpfc29xgyn9LZy_Y`(L<G5A#lq)3s;A}NhoLPU$WK%@;ac*HHTYk zMhPD{t^4jx<UEH#tW&Liq6{_1X#7J)YGw3y7p1vodbv^uh}LM}kIwmM&|iMjw(KJ& zF1Jx_-CnTEBhcp$B%`5&R9-9#OPAXE?U0R#N${lnwfos0uSM4@|99UfP-CAPW2I|r zkg1iWtM-Kg;=gR%dvgdS(17*&tij9Lkk)af;u6tV%Ie?8JBO{^blCXS&!@x#A4`MH zWW!4q+TNU~;hjXg+;a+)G8<1#8Tz<Vo|<kw#n5$(Glhb*dUj)KD37ki;+-g>Ys| zJBfFeR`zIxZgravZqz?5s)T@v<I!BNwfACC;#mOT1&*62j7NR2W1Tx*xDJIjGTm3O z8<LnG(C(jH)9AFxw;2Rd`bo1J{^<x(n`DOu%>22Rr^OcubB~!Z>Gaa#@D0;YWjo<5 z!qsduRpv)$iwhh7*SKHtx})Qp`nNgJD(!kmH8*RAoX$gy>uO(CD30}3VfpU)>W#}8 zH(JL#j9!gCP67mlgt(jozy11AxjIzpX`27S=0^?HJ?8PX4VOR_^8YguzzK+d|6;^G z#Tz<g_$|f90m?rf)&pC26_fH{a393#Nx|ImH40WQ^t<q+(=U+wB0nsy3c@cC-M4h3 ziUg#!f!R95R^>6K(YM=Mbxt&e)R)*M$yA#QsrW6?N}Fz2^wMTA-qO-ORm10j*@nQ^ z&m&DM&_!@$iU~T#K<m)NIdX*I_kL#7eJ9u1PXD*%D>25X3Nbh3r4~nsL&TXjH$q zS77s<SxcmP(J0gL8CKLk-R?aT$2f;khfiN1r!KfyRBV?^xLBv2&(2r|7$0g@FHTcp ztIs>!UvLVR(qqf>bzoaRh;>S_O!_J$Hi>PHHz2C@+udsbclJA>TsLsxSeTJ;*p59D zq&hc;$i6u0unDv#b(p+gf1|Hfo#}-9XABMX7>v|)<MvNJVfyLQFKoomq|JFA>*DE7 z(z(SI)m}nIENiYsVEvX3zGDeRNPPp7K?fR=czwyR79=%H_jpY>s*%N)-MX%~GsoiV zSzIgP!-Vk42Jj{_o*3tg3xoTnUTjIu4E6&FQD?>UfS6rd?7U91tn!@muL@g&P?H{{ zf^N9rz%7p_{?>|-DQZJ55(?uo`mQ7;S-taag3MX)kIy9t42lhSrTFTreZCa~sH4b) zJKsHO9kfZmfZU~>L;Rmre;5}-a)}?%AGo=2Xs4a}jVjqMVq~J)vN^2HdUA_M>v}H) zf7~9aE!F?b)o(6hP8;gYpc2VdGy0vae`PF2ROqU9itvg?Pd-e+{&>A7A71FD@{?Xa zQalo+VhzNBDgKS<V~@UcR}UM#&LXMREq%<Y!HblLe03~1|HI{BPI@^oEvH=TM7($7 zlJh%G@Ppo1sq`YA8LWnaCXrNG4_8M-t$wae#a#9+1)MwLVmA`6VFD<~F}(J0)YME9 z+J$5JXZ^Be8ASa0)h=9;*)p4&D<gHs0d6RKX@}<{BRu)E#@7|zyH@x5(A$8eM*Ehd zJgl7plUl~oC8%d8W?Lr8OZMrKt|RTkKZ>u?c2t_;H^DRyI8z#W=TS%;56Jg`-A0C9 z>$TCNOxIb%s;PQqXkUXo36Y9Gf%U{T74sL4_Rink*wjq5rAj<@gUFZYiT@1L!F!Qr zOay`l(l81qn+vtjI4#ulXttBpL_g5?IFBvH?t3d5)m-)6=M^!XujO#W&@!^2^V?Wq z-yQ5pm?xpjS<Myf&5KB;q!h)=ir@?`HP95|QgeG?5mCkawUR~;!?MfF?w`EkQfTWS z(x|U`NU=<N4-T>JxsDs11`j0-4Gbb_fv!@ZF*2{R(xxr>RHe)BB?ZZZR(Iu)7+h4Y zu9kH<l3G143b)YB!%&RK^(!77ytPs5W*P+2L$?~|;`|YO!VVl;sk7FJ@?C)o;}Lz+ zB6?d|S{mMXzvrIC!YUU(N`R>D3HtjhKtOSycjnA#GSWJoW0xNV-Azh8mVFW~CF?F- zf;~0IEJDsPZO8CDj`|@dVDiVwxzs<5_k5wAOXqzWh*9@5(-N#`DGrFJxhMV3%%w2& zq_Fu>n9j5F3K>WUdJU_-raajLPli95D{C`3v=b*09`b0aWd+lTxPobf*7q}*R0e2b z3J{P(WpCTl94cPeY#RsPt1>c@mifz22uDQ)jm<YTerOekhf6MOM|;RLD;WJv!e0?m zm8+lTx76zBg~yv#3hT1x>u-+I7>i#IgWO!${%4iLub;C<xuV#eUi%|>8pBSfo2qc~ zcH5Kj;yNLqKKkjBB(*{Cr;O94laI8!{{HT(Eaq(tFE<8*=^};Hw6-D4_q50_OQ;1n z$m1`(8-8u3b^T9Z#7E)Tu~fK7wlUmy0>e4TevkOR3B?<D=B%+AsbG%hmzS3)4Va*0 z4Z)?_KWMc4Bdh6%hjv^4dS(Z75Rf%Tt#RCP1aR0JLhU?)8%|^aB#%bnP<ILHm}kXy zQ{w*rU2)6T>XFq5w&}|s=zSdc8I3;ULuOd0-j&cuUdll{vniFs8joEZWa{+6yuYNK zm{+k-MFgS4Zsgu};4j<aW^NVdU&(2j7-{#~0{=for-r?0Ub&0vP2f5K?`az)kw<xW ziWt<P6wm<0gZDdDb_AR(^hZe6fB*=nz(*CEEu1pf&uL$>&kmjcb~1_XYTz}9BCl!h zrr{WGPMszp=N}K`y=e}wL;GR3lnQLwXE5!SQw2ct91GOwZ=3!TzP2!kI<eu)AQG~G zfedmrlG2-M3f2^bX$=T^I=oKqveChcXJ+`Fh;l|u!deaP5fEDkT3#;tNkbqK1AjIm zEvv!O-N97I4<>BKn97wjzpp_~3bCj@_x3{Jo5z`6i1bc64ZfE!wxs{#`%@zmDP_*q zz@006ka$~YvpmLiGN_7`fbBtB>qQ{8)@~p+gQeT8<lbjAJ-uaKulL!sLOmUBrcAt1 zF>IFdSGe_QtYUPxqjVNUos2Vvbyd$Mk-i2jgO{Unlb@uDoO2(ime3{p$tUQjqvYLZ zz!-HWG<UYQ^R`##*Vmzj{y#C{8I1H>)~_29d)~P0U%|Jnz1hol+*HI$QW4j9&GgqP zE|$^@H8v=S?VnLi*MamTqrYIHzecd<h|Y=NcA@z3l!p=s1`?WP)|+!Jew8<}b}b{N zhamAbNOysX7N?ds>{5(v!GNrXhI3CDr_6AXhB|4ts8XW^-G?_L+^=%0BJ(@(a!MR2 zP|)`Mf?Yy|4&zMwCWmbz4Pn)+Dl0gy`+C3P*r_nHfyftq=tHpg4IArp6B5iCk}hP+ zn8!mtdbXMvT$rcG;ccn8QOv!A)I?c3YcaGizaFU1WNfB6EO$|9SFg}Ru>F3BkBtWJ z`w#EXDA~fZBOYD-5FGsnMR%`+?EH0@%HtBu^{2C*<K_6$9=0~WAoq8nciNkhc?10V zDO5k<NmY$ujs1xnQ|A(s)n2OgB5LvB+nXTQ8PKNN_73_*CxNviN-kdvMO!7d10J3j zv1Y`uCjAAo&>7U+_Xh(Vb}~>!q10NZZevAluhfohcK!==!=iRI9m7=O<v;8qzCw7* zEZ&|!m?jh>_n)CE%uo2gO7d5dvqAm%sAgHy2_gBYRWnRgTd7TZp@|*TIl@VS%Bh0w zMcp0^#=6r{RNf0SfUA{kUSz?eS%7-~=PnyzH04fV)irQweCPjiA0r~JSqHVA%viwQ zM)`Pod~73K;Vu&TTW_EnUWIB2fetCNE!I!zTtlp}0-~%X&&h^8IZ7$K(4-2L@zm6- zqwxVJG90HkDSfz+#XqLK7A!GNZl#(P<1Kk+fKWcp*b&MH7@&|2MB>`N^`x~^$g1n1 zdB;0@GAl9CF(UD!3!k;QK#h7`aH%9Sh(mMU5Gzb~Wi01b6;8a%)%HEZ-hf1BwAT8J zf2-+p`U_}5RFCMs+i!<;H&fpv(thnQ^P7WPDss*r)zdb}U9cko6ql|o^ee}hi%O`2 z{k`@HR~D*))WR!A!->GnoZnG@f2fte8(l|(n1@!Lr#F(R#o(7jyr}j-ZU)n83>YDS zHk@ef)?>u6N#V0s(HT6=4FbjnuraT#O-xp2S<C?;i_#HlD3t;pB{c>#CB%+iHqeRn zabollmFo-~__&S>c+JljAJ<NYiw0pGe47l{ebS86l!axJ<vd2bC|3<`g<rMw+4#)< z7rtb*+_!Eh#FwsFh0<z(kR=~QIlnYe&W`l8YT_u~n2`AAo`xi6pbbLKdTeH|v(!cX zGNU^<m<LCMGP~s35c&Hh4hX`1HYnP|1G{+0^1yw!*+B9~y8Sdf>ztbHS+UHHyLPm0 z4eK6MNdh7+!9M^@Oxg(eFtApE$$NA$cPZ$wX_LaY>ZfIIUUicZavoUswdRrOJS<{| zXs(9{kYCZOtEm&lgX(dbdrSNaaz1dag$7qtb~-MQM=C%Q{>tU(CgRIXai8>V%`b9) z%!zi+VV^7{#vh_-cZ3p?rzmZdi`JmZujc76)rOenTa;%I)+?5DUy-TtRJ08qJ>SJK z2;p%^x1R|~;Z(d0;TL>r3V3P4MIs@Y_}4K1dVWpNQ@{H$H#+ZbGUVl67Ap0wwf5r= z59KRcDbspTd3#)F5|Qbw*33_g1A2Izb$HD7*;wCCGVp)#Fe(d>Te*5`CKb(*y#LKW z;Cil*thoa{4N+BiCj6hE-3#{_3B<0D4gNYUT8(_0Dqu^>%weg8ELjN-k!off;Sk_l ztPd9n{qcLKth=1vZiNHd7!YoIXJ@0|;AZLAu@Z-4hR5vK=TV;mO)g7}vHIRnt$3qP zEJGgQBPLWLddBZ-GVRuh{J_aNMe`<HiYNXOI1^Ru#X)z$Lj-j64QHQ<HfL<9aKgA^ ztUKUL?QfR$b&}j%VtPlbejEl@zIwviv5?%9u6v|D0_wJc%IkWABuLUaqo01JYLPd8 z+v_v#x%qSZ*G`z-+an6CDUbD9ab8!l+hp+Buv*62)L9Pl(c5}Jr#pZXx&kr{v0#LZ zQZ~=9{^rU3J@~3yhNU>k%q^!@;yIGq2>44AsEpUIi!_;g&o5rMWzj|EBaFq;U#&Rp zVcAwbC$Qo$U{f%kLqEZseZKI!>dmGWna8)&Uzx*6rT{Ib@~C)LWLp+J+T<3dQC=kq zT=qbx%8WHW8d!9iw-~Gt)QC66z8?f&3Vn=-RkgwiNOY`yej$nO^pD(_Bx|@%F5+K? z3C#<)fO?g-K&Mkw2#eQL=(zSy7E#PaudJ~1e+z!44Xqph5s_3}T28>B71MN6G+cA= zgV^5DRj3cU4eSxsl(6;%!gg;3=ibF~3)xqUlJ#!ed^knB`K<=YpUTN?(j#PzQGR|F zv=<?^{xmsJA*uPKNZfVVlQ^Z>DrI`ZLD#gPb!b-`^M1gh-@t%^Qd}hpM*cnrQ>dMv z4kroAaIotb@Iq9Xq%-j2Mj*csqh?1`I!(ddD~}e^(V;$2t1=f|O-X!jN#IjIQnye# z9X`wq<yOHya>?X-j(~VtOl#&e)LX!l+f=E+QFlr2*)L<7Pj4MaIHKp(_P31FJq(N5 z&Ugy?#PW*LV#fW{_%HM6Dk-7W^_JB3%gtb!E|@%w!0nlCk!8I6_RoJ?iE=7E$yLip znCeppBZQl_e`ReRJ80G-39md*3(Yy0llVMa9P|ES$*T4{C}*vTlHpbgs#)bH>SKpd zEaiXFx{~Ve52IK<3z3<2jkl<<UTyVvoo~H3gFP-zi9C@%62dN91rEKhu3|f%0Xww@ z%%A3MKuet`Nc4eIL*5`}ZQaC7W~K%?h~U~G&6au%jt)jM3-zsrhFqPI;4NPGbV+Z` z;9^7?h~!2NbXaYL^2cy<w#czL%Rr?TPl_Khu`%j5(E0Qbj@t#T@PwnLK_rca${ibC zdl%58I<(>bqQr#Xkg|?2vGSNbNLrM9!!F9zY0r04@6ad+8tiEit@YNXpnR2bgL<3X zZT|ynL6pABT8y*?tet}ChqVtVrPfYU9aVJ=Y0yj_kRsVE_~S}JimDB;U5zlKaV<4> zq0}P!JUKZbF(lvbWlfdoI`uQ1pN&Aa2Ts@YsRFk$j38R0nOcA(W|5T5V+dggn_M7F zDC(2lC!NiS7B<)$teyGUY-0!4sKBjwFFzaW4=bfK-w3gV`Ve-3raPEw+qg4kMfM_c zZvk4*Z{FYEn<XvU+496DTjY<l6%kRhp1RFUl_7xxaf_Kr3`?ls#Phan0VlSD`wT$< z!LDY{Mhl&9VA&Fhpe5^$NI-0xYVo=tLC;SVl-t|eceKH<!uGP`MR|%4NV^poVkb2F zgYDc2tDvZaPW?c{wrv4uy$E45SB@i|3Qv^zZ1c>##Td%9tyXXcs4!Fs7pkDH0i#ip zEgD-5@!x*?tw+@XTc32r7%*)qS9Wg6D?6^Tj&_i6{ojjYtPZ{57T96Ggs1-yg%$cU zMj-ly_gC>Hk%4HR)#ni~&~&yK9-c~<rBArHxM*#iSNvmjL{^sgy@DTJe0NVj-`4HU z&(Du<Z*O%_U_S`|mo0G6)aJ%Or&pFjAvE;>P(^QBs_1-}Q=r^u!(>Q1S*gX%5>uVw zs$^*$ogB9*8kd)su^nWixh>J&Qst$3#h1EJs`5L>o~=W}YWCIz1ClL+R!BN4S0Y1c zH$|qY?huaKKSi_?$>6{4ur6a^bagB5sWuh2v<vXBOdt*lk$x$)(}EcT-pN&(_Os25 z=^p43-H8EDPfr&Y7s64kL04B-y=h46uL0YDtzM(QUwH_Ls*9^ZqE}jBA1d#n5KfuC zi!0&N_#={wOR0o)gBMJXKoVG1_)5DeCG=`L@JZ$HKz)rhZL4xvnbn@$iY*InX?13v z2<#y6izoq@Ws1#Z(6O@`hOnM0nG1Mh?Q~qS_xu$YWZMn8Er3!Dv>n0X>Fff`U-L+A z?YG~4>!gaE`pIG;<7JSWrH>0)Vo1`jfcjNeqH^#qk)Wr?`P)`f?Mm4Ii00-otBz~% z64;9ttYai~P2Hr+Kn!68o~TDT_b_KXRClH&2I8)0Kt?F<udKi5gg{NV=f{s9>nvDN zePh_s_GHAko(KBtD+8zzkJ5)*DyB!L-1)Q=0Q9=FeI?GtHrY<q`P_?H1NZm$n8!g1 zy*q+VH&E-F8r6Xi1Wd`?3gxRj6}Wm2#?A%7UEayxng5zn6^~Yw^4I*>R3{F&z`4ln zd`BVM*`Z9DH;1s&q%A~FQ#aeNLLhlYY5<Tj{BD5!s&_3Tc7;*POuHM~{z{OCexNZ| z{_kqq)n4}H%NO@b(c%33JdtN$p;(1|l99;P7n#C*=R@>z;n%54vl`*b3z0IY+3&n! zt=I;^S;LBR;>(t|aswEvgzx_TzUNWaR;)HPO&<i(bA%02$%`Zy?0VqDR;R};Rn!n< z{wl!=PYutm*&16`Mv_AzCbg{U6?lRZsU4$J@#!KVv5{7gTmbmiTvmw8){0BBC@>xj zm)l{P%kM^6Ty5(Nu*?9+@b&9geP(?-3!x!#r(c^Jx;jo-abeF=Pn<>JyYf%(RrEsn zUpKM{ialFA2<{=1Yj#p?mF-jzN<WiWx!NQN1;V%csBUS-xMWUnLdi-P6M9qWL?@E_ zxr{k|{F;35r{9GU&d<-&iSAN<`t&JDO`hw|gFqE;R?1<Ax5E<<3Ceh~Ndj<2RD!bo zu^acO;&>7RIS!zBcO7t}RH%5Ua#87j@g|z(`0X<B?St56ft_hD*JRWMwL3Y?SroQv zQZ;8#qYJEt*MbmZ;!?*BzzG#nN}$XTs=u`o{o-XZy#>w<l7=Ey&sP4Y7F7d!Ke-@) zvhywlTO(?xU$Gj7^7uRe5sj1o{LlZS=2C!6WEqmD*I5YL##p{B>q!W@RRmYi&$>4T zX`_Lb9FQW@Osu2E7paA$%7%Zlj1XctGWXRT$AVa&zTHUqN^iHy8vP8!aYsWg(^qg} zj3`;jekFLA0fXTaBZ7dc&&h*Tp0suJ6-7-tSTeDFPGEw<632qH)H?eLPnG4%*JB;2 zP<q0ZZR>eBZ7qtO%kKH=ExY0LM0zl;<5#=yU;p~o?4K;J5GSaTp-Mvl&v2OoXqUQ7 zd-J*y6z<i^4fhg(@P^xGA~zBPZEVypHtZ9~XTQ~r51MaxaIk7PDIOENNce(pq*Luv za6M5B1%id5wk&P}5B=0G!-nQ=*M^4ic#PR0H?;HCHoE96cK$jgb&^1H>272Zuop}U z+1V4_w1|$nYeETEjSB45mJxp2Ig(wck}yqmD-j2Z&Pp=g=IXrL;GGe$sh@_ey2wRl zFd8C4njboFz3}JHpVNuJU!+Z$#75OD^BZC+Vi8~n6d}<eG-9s1Se)J9weY#3-ip*D zk|;FgM#$}UtaE?FLxX9MHuOvBAKv~DQAd&1jy~*LR`wdtOWnMrurdw4i+F>QN{f(a zF3E378I%|a=;j<WNV$#bM)YoJ<w8}nT%8z`n2Oo7aP_+m=#DStJvwCHzJ1g40~5qS z?JDAgATjS87f$$HRq4O}>%Wvq$j6as*omnHF3paU8^N>@O4>r?AT{2$AI5IyGAD#H zfa+jZ{VJPF?s%|`q;btuO?cHEd*T@R8(qsq&!7z2FxW;WQN?YoAYweMrl9tcO3jAC zIiFH*kamZX0-Tb4_o38erD|D<WwCf#I{iXe)^vya5h7M`?IBBQ&53rl06_<G)~Y-# zZZPHY4|hz`atOC(yVX<u)kfAF9UYzg{qKL@ykP|iwS))nFHED0Ljs6Ya4<*%A{*>X zxy0n(ZKdDIb^Yc2{e3A>L3iJ>B3Zsj0KHO-vM89Y6)zxLhU=;usSjar6Ez`M#%h9o z6#~Omy8KJJ?FFTMS`^`Q^2IP|lx<<L<Qm^VFB<V@_*w=?b(#SKP7(iFslV0l)<R4k zc&i@$JmGJo)fJ?nk;CdSaI5FHa_!Pzv~K^MI=KK|SfE6tmKfq^+w3dCGoE0_&=9y> zZgQ*KexQ9Ivw>RJ>FT9RDu7x*BrK)rMMcjX)+VhTPzv{S$FYI3reQRV%j;ZrcEv@d zjC@Na;x5L{!&tlCgBAYf{Urc9fk$Ohl~p4Eg(;F-%N!L?6Ro(vzlQ)g=p?5y#$mk% zlqPzhc=WG-{j2y@y9d*#53#d|nQoU4^jr_7U@YiPup4U5x8&I0U80_S($&xzv4KKY z_IVjwD>aXx?H%-K?1*TYL>myk*iGFgFv7?hUzKe{HlBfv(dJ(sv+deDgE;H15YQz_ z6tVkL?WZfMZmed8uc(+zKwtq>rxsV03+^W9>DUkpI73frRV4IRg+I1*2Ls~N9kt*) zYN?(HnYQ&sTFHs!f?}e1hPBFKQ;2~>rXhJHZ1=RF3P{0aX4aDs=P!Exw%P~@kkAa$ zHcDZ|z|<!YsnibWvKabN{lhL207S{rW+cQB6PsWN#$Q6rf?3Y%s%bdoc{+Ou<jZ?( zuG3zcWTXm+UyBur_TXuErahn|S;bx?#U}wDLNGn0>e8zqWJ!qt;|zt1N&XISUtV<? zbBKRxetl7?l`-LYHdQq7p8f)BE8JqFfXAyz-)#ZYa*sxS0%s_DqD;MqqX$wE0#N*& zmc}*eLZB^LwOvGFgO~%Q7ul*#TiNus7q0{{<yS~DIZiX-^@`au()wG_Lr6no>;HB@ z)w&$nTtv3;`ue(?oxq8*96cYh9SWyis%N?eg+6>PekUsK<K_I?932KwP^{H&d`7 z%Ex`#p=eI_;(EvuRQJf50Q+=s=#OG<_UJ2NtY|=%!a2!N>!aM3p>BTrScNhr<f17h zKwRYI?)~CxFGfRC7ZWtb&`Km|W!726?XIwgWT<5lDkx%c+&e|P=x`@|ECC8-Zl`f8 z5gA!wr=eO<{ZzD^U8>)dLBxxq3l094mzR`ck<kF@J!;XpsqBRZO;pn|xpt`AesgnU z61Mz->LX;Wg9{>chD7<e%kr=t4pSB@d1om!`a*@3?{^orNl6Vwsa$_A3FQ)BP1m14 zfByFETV^Z#Vf7qV?2VQ+uH)O=+wtAq9c|&xN^KP@HJWQ+#zXkp-Gi1L$f$Tu@Z?vd z<Qh$B5+doWw_<&@s`UvRU)7BWcvMKQudnNx+@4akevSEg46H67v@zk}Rl~(${tm0C zfZhix6CAWX(|3PR1YW&qaWK~Gwgj$TaS`yU<*kAXTuj87VJ=Kp;wf!t0PKdm<bVWt z@nB?`o|$!5jTay8N3jL1LtCc(^X~3W9Yk12xuX3#IyyRCv9x|7075X3X_Uz>Vh2O1 zw=Q~lpJ3+T4pW7|?eyimxuNJtOx>qOgjRr{pQ9fi96^Vx1YEyfE2R}~C*11Xw?H~_ z^({HC;Gw=<bS2oR60wcDTD`?2xhY*h`gPTH`If$yJI2D<o*znY@I=!PM8JYN$$lqk z^&AK+5UPR4wd`50c>TC|sNakI>5!podoZt1IeL3iNO^jf#;Y)wori`u9mj6zb8|x- z#}w?FHf@%vNCG!Z7kDNrux9lE@FS(4jLm8+wgfpu<C7Tvojraqnua~b1@6tM4FDYU zNGd@|n1Z4X`rUL;t;jf!&w+yKyhXvfTcmUjQv~%d*G$?WWU`mJ(azs;y_EpFnFf#T zY*=ZZZ_&9*%6Pkv2pZGn<%>`_)Iob$3~R9>V6+&rm2U-Lg%r$p=CxjE5|=HwIdG>+ z-q}TGAN5HGNUKIkelvRaGX0`XaKE_7V&+|sjX-wWS>dCOi*6R`aR{}cEd^v5Icu#o z9F7}v*{ldsJeqq27%ST*_FAp__^)pN#l=O}p7wbUu-(Z}El6``5x?>5?CkRLveO*U z)>)~x%uW|kKwDRWfXWafxAPfg7fKBBQJ&pHQaw8$sRW_Wxqp0oR1P?3>{EY{rHQrF z5hT-9n+u)4e*GG$yw?{PycYt|TUjGC_0{$lc`OvHB?}>q(JDM}FIR`KuQRR#97`GD zU}%wJ4NO)-<20E=th|L4nKVQV)ERZ!l@P>^Md4fCkNNN`vc!$%WWIm@{`KqE%gf7b zE#QnX6Wyw4>?AOJ0MvMK;mXk=stO!w7cgwVQKhL89fUaYN}B#auqz!L;t>*;nNaas zZ@{!WOS<>SNd-gcQfWf(-Q8Vv3WXbQ8gcfWn6H(289HW4u@hQQazjA}%BuW`>ZL@I zbzvzr8|6>8-x_)f{@D3ukZ=Q~R<#Oh;UF%GjsV_e#rqaM!aEOoY5D;XLM}{C%h}o4 z?d`2eI0B@VdtX`lorAUY3%43q5X+)nD16s&Aso^$(>@{(efjbw!s{mW>ZNN++QIDZ z_4RcN_3-duvvR~c4QgkohtY1gJ;-mBqW~R10OGP#2m*Y%_Ekeb=|(CXn|HGkq0k&* zR##k$h1SA0Po~+%1UKr(Z>MurTX|v+VCFD9k{o*f4M$j=&7IXNpVi|<?@h;x2v1f{ zHe#D^k<>U-t=k}la+;0^psj^A;agOV0I4_$K=||I<;CU}<R?f`THP+nELUd^I8O)z z@Jx1z_LM+25OYZ&+iA=X?9j4`j(rOkYW$ADg9kHV7WY(5=*qDggt80v!mN&tj(#Co zV*eN_*Voq{KYqNvzFtYQ_MntMFn{w?5&BA0>(KASTwGjKxL0`GhLF4%l578(SKZE1 z*$h5|btx|aF6O_m5NVET)Y(ES^7S?vFmf77wPFJq_`4+GrHmpOPGfHuSGL0ijH4IL zi>JxlR@BH4R5rtZ$BrkVw_VDFa597s4-W-$sZQmNbJjp&cpMTl^F(k?rAGK+tfVdy z(1DYU0>41v)6-LS4KACZ{S{PnAcEF9C}}Q4Ra9x{yG4iQ-7JRJ`6!cEh%|Qt?lu;S z{JyDFEmn}Q8E6OM088e-zrT;bg^t;ipwMe>=~Bf^+w>osbFrBGK6bg@M%7Wpab#9u zajv|_F82~X2_YUH9`eW$iO}5ibJxy~P;zl`k?rh0uzb>DMub`xWt9Hu=H`aMlj+Mi zU6MK!kQ_viRY?>Yivf&^CIMR|&qTD~VM!inLgiWEJvX9&S^-QKDrb9ibae86{?Gq` zJL<|>v3Be#Rek|J0lkeTjdisBI}ca5CXfJ~_*W5vX~+n#zvkNf!4B&WRGz_gD;MV; z%c)n}@PO7SUlvU3n*+^)*0o{f*YrnVa`=HAM4{T5wbQ|z2G$~OOUB>?3P43x@I;MP zT@`&%`b2iFooTux@K^W)wL>7DUAHNa{B4gBw6yGs%w~QR7IuqllY%@7K?hd_k;Qqh zN@w%40SiTK5}L(bG3)+b85%akW7<V@zU}!Av(Wph?*&v2Ja3t*LiP8B4fzO^3m^j+ zJQSif1UV(q2j$8*_Vtad{^oXa?gSBn5ipY+*;3burbm$}l-jA=8P2jdR%&^0(mugJ zhk(?p3SyD8WU;|rE0b0t>xS%LCh>YWsQK`00jVB7(7e87cy{b$q6f@iTvJnVgke;n zj0x$P7gFf0-#y#!zyD5R2n&W{D6pe#?n8YOX>fr2&PzF{2OiXKkTc?9w`2}Cgp$b0 zx(qNr(L$HCTU6Cvg<XM-POT0NzXGaT;Ws3FfwFvyuA^)W-sF-)Ls9*i4ZMAY{*Ji5 z6ojEoQ-s}8sD<$bnkbh63ow~N@U}mHwd4oX;Wql`&z~XIuoQ<I8ndURZ&%L6j9XQT zog6{5w0ryT@UWPpemF7Dd*X|NStYX^tx!@1vx;J?{<7$S^7N|3P(EB`E*YpAW~&)u z3|~`jDIV?dkRyA6)TO=T4(`FL(l5{xW^3IFAO=q=t_95Hc@?NcV4Y@BvigXR?dB8* zr)$KtY@3Ep+x&X*=A{U3Gd^*<iX)zOmG%4G3f+~yX~~$*<>u3_>ca~$E5&cUMh;+u zq-6)=rNmkcjaq$6^!@wyYD{>cJ9K2#zPf4eY~P}a#aXFv$tS|boEWvi_EK=U3gQdb zuc-W@D%3k--DAJQJ6o)qn;U_73qk&ba*2qugkT4jN+3jI8)*TXc4DO_{j7_sb(n*` zmp)d{W_LK8ym}SD74>3OEX#5bpxoG%12Z9l72i=_J^9tuRY)*Gqk+p(a+T^GGi~6l zVi@x#fY~N>go++)%Wo^7sm!#=2__&4k*l?Vr4dMm`WD)~zP`R6R+?d}SF<9+Y8A^v zqlSqSv>}&4fd`Q*lu8}as3TM~vF6Jk|MieLxQyA#HZ9w~4+&%tsA<JnUgEyv63<tm zk(#F#j+|-7%S$0d)6dcN-4Vo{=!|aP!A{E{q9bkJ`d_;fnBS&cU0wb2pZ_%3Q2#1y zwfXSf`LAEUq6pI{sXMpB9S)E;W73K~>8uG@mr~7MT5wBkd{F&G-cetjpV?d=A)B7s zdj$WFfBZvZTEV;P3xiatTitYnK{Vx<+3s<f_Z?ie^Zs%`?P55ZRp@1KomNTC7_IIY z(WLAd2u38WU2$~?JrBwR_AS|;DsXBL6oHJ%)Pj<|&*^Jx!|o%=rpV|1V6rdXtVssp z`aoQ)^8Jpb?(^lKGBdUG-ldyBOSE7~K*Bt4xdddnB5<rAt1n9F7xha5A_)G8e5kgG zeVHnL$@9FMn=&uVCZwuFQe|hYLO#w^qpmM8O&l(cLvLMu=sQ8BTmJCyuzKwZPK8a; zSX=ko+uN(FD~6mXGZN}b@oUK{ZwpioQ8!?0yB!ajYCy0&>1u-XfxUaan?`%Pa({oX zd$#g{^SwZ!Md<VE?%(R@4)$QTHZjM+YmwoST38ivlq3jcLQVwA2bwn>7o)b8At`w+ zuiYNto~;H(q2m%Jg%br-1y_U`LZ%61@VCYZ{u&gqZoPvN{JvKcBa<i<(taymMABgC zpFe*FfdvO*F)x7ZCaumg4TwxsG>evO9fUqJfeutzjM!+QWgG6`%*99h`vPB5x*`Eb z1n9Wq4@AISZ0+V0gp?I_jyewEQekKdXy7sZ8Au1;FsPC=SgfN`duTd7<bg)}fvnIH z3q!%6(Y+TD5Ny(p#6q0?eYsGlb}^}>1oPFM)a6u=vFXUs&Bc*AIXQW!qV={$=3(4b z@MyzIJljQp%gQJH_S<h;%#8k6RWQrHlY$`z$e@mXvlJyF%xCS23a!Yj%2(U5xRd9V zudLu^Gk(j=WeikV6dM1smXOPqP=bTE*HUbHAj)pRx3soJAQF~BLsP&NT7mhPmYAl! zvdb)~mv{Pm6}tsDwFB)u@70Ldz9xezM9*a!OoKkZWs6g8&DO%;@#gpq9RsH<fmjnQ z7eO7JUePNg%Yc_08O>|(Vcv7~&b_c=^v*QvwP6&ux3|~V*R^5fwNXG0#>JC2l$~rE z-mYZz1=Gm(Jg?xmCluIGJf+`O9gBD4<#j>zmkKce&K-cGD|%T-`#e|&g*1tsXj0vh zo6=>We|CW}V<Xl~h;ZmYV$iPWIYB3Bv5``JDf;$~6rjH*n32<SDN=U&q&vd{V{=;) zPIu@vbuQ-c=;$c9FEoH<I&RC3rb-jrjA>oA2NaW0S$vVjqElYS0jy`c^ZE}viOt@D z$Q_8{X8Hb#Z}whgd&|*QBFZgR=^@>^^DI&OB+iAlu2cJGB8U!N<$y)v)Fes3V(-Jx z88#gjK(shO!WgE3JucXd-LerN?sidla<i>lmt1;BhYCvs_^9<?s!AE$XYR<29?~RU zGdu`Qfcfn2DHv-9*7sy>3Fcd&ch8qehN64ulBAoP8y2GE0}-2~H7~s6Xjhq=hCLaD z<)C|iMerR=YLIL?aOSrY=-in*ssja8wr6L|?t>{2Ed$g2p`QEn^pql<NzK4PRSz4Z zB)en&cGw@1fN)lO;MR?I_Azm3P{Yc{ZcPC`(DSe0WNWpxIw_!L3VL{ShV_1~*gR#b z=jZ1d!b+N#l!6A7{cb)-Ui#$Z<Wy-unYc)CNwp?>u<APzr47#H^ttl8c3ngv@ZWkY zg_7+)+a3?uSV1kUn@*8WYXemLc9tZ(dRyLhpwu$(nfxW5@*(^{kGCRFOa0dBgDqsZ zsV4oEtKVdl+VdtinWAVk2c{kVDqwYF`2nDWYjdEK&-rF?q~~3D9n08&JJyt>+z$Ea zG%GT1HnJ?+oe*YJTTA`t!H%cm1~4!5v0bU=sWO2Ts;QDO?#PBdbcYIJR75jli=Xd= zI#J-w&CS35^{?N4`z<`Uf<g~wDkQinKeF^^&BuXFoY!)YmmMJ+czb(G{oQ;K16=`= z%6`S22PK2m4lCMAc0geraa$Rwzr-98XqDP-KLYDZ|03JgS06MF?nqPvHr52nMvz)M zsgzQsC@_3ru$#P{1@g{90!n1ShhWh7G<A@N-bnaR!pY|sj73O#2P-HM(MH5^2{bVA z?B(U<=H@2QN&u?R!l|Ly7@I-jV0AkZnd$6yxJ~QJvMQw*inlqe>@74t;0*Wl_VzZ? zS_U|nf|P*~n4Bi31`ERt*XrcdX5?bc_OFlugs+ZreTYPr!*t_P#qTUJ(qo9~QOp_$ z7;aOzY32tm&cnmQs%&(`k^d1{3@q1!L?T?mt;C?633Q4xv_qLYFdeBPer+}cH?>Ae zf*&3puCA{7F-nFe78y-LVQCpx@BJ{#3DPszitn&YobwD1#t?a1s@a?4vxs+hca{5` zwymvm6R4Sz4^Rlv11X5;Wl8>}I7JTnu~xJY`%y=c^vl%69#YHKvUt5C&WeF)_?ofK zE6X+SyaT5ZQn9+zzr3gI*bZKRJ;_Kw_m7W{*VotO<4X_&mkN}LqnQnu7h-@{l}H$^ z2S#0kT?bBKAoN9nIdt_7IM6~w@M4iq9WSDeHm(6opp~PeqvHeKn%3=A>|d<JPwJ)A zWLJ#aIZ!IIh}(*^eTW$K?Zo~4eX7Wy+@0;Q^=lHA281iah=4_7+1I523qlHu)jkve z#k(5<xv_!7LNPNUv0l0%*VotlBiCf^A;}4bu)hI#@xOrHEgx=*e13lZ_3PJa!Zab7 zE`<P0zZNGLdnK)zIy2$*c3XU9uq<K}g%Trr!0O@4x<m$4LRXAz2ipY(f&jp;bX;h- zAOM^dk7=h7ZGs}F(bLyaCa(fUMl6)_w{ZPae&3k%mF5!?bOI{jtfG0L+a^X8*ffq4 ztTo_(;h}z@pugk)%vVCzlw7awT`_>pvp%5;jQ~klg5M3VRah73AL#87;_NuC38*qm zgrYr)U7$oK6<IW%w6`V>t0V(6r=?JBRna?kWW~OH`?i|K^iY;oW)4)RR&&HokLsle zTGCL{_WWzi+-7;W&k$zbN<C(&oLlJA48!YfMN!_cb7%`aasOnpj&e4*<a+s(*^=BM zGayPMwoHtK&~A6yNFDid@0iUF)~59?ZV5`u2ILBhnDvV7M72J=l#AatTZSN9hqzp# zlW`yo&EyNpwK<68@FI4OfQDPeg&20LZ&g`1Pi^sgFC{BE*2>6j`=RMNR(K6O?2n?4 zOzHFI&yA-8a<9I`b_Bim$6}9zkhq3LNe!t-{meFWVpa^b`)wdRC8lt-T@k--a?R>% zke#ZvRi(T7xFC3yS9%vyuD8vrpkg~ew>e~Cqb3_})RoJ_veolhGjLYFwoR=52p?u# z?I`<@J^_{Y(gxT%O96!?tMbwr#ZYq-@?(;UUgZ4z{Oan;d`+xv9>Wo#a!$f*Rb=vt zG-3^c!(kF4?o8dq(G>-^xP5wh8ih?6S$wa0{EpoH+rRxA2gj{j5fuSw5zWN@vV>HU z!8YS|l@w=U=~^DBm@oE;=C=aj1pwRED`*15_E@LzFKA?Bwa-MFy>RWyjlg2=EHr z7PSLs$f!%TgLh`}>FEx7rC6=Kso*c>zqn$1Gzw<&Az~i&bbVClF9LMT3Z1?EK-2<* z+?5`zvm%qk+-+AW-3r`Jizvvk5#8;DGU&?+hoF1FhgIJ`Ag#X#d)+zCi->*lyzH5N z-25_y1$Brmv_K*Z4C*N8ZgnQ|jN65>rc^HqAi`{hotp0Y=7_W6Ewpx&I=MY3948W4 z2f_%uOlg6jafBI_o0}U*nN!tk%Cd2AtML*sr5wuK){WR*!l2Fc_EK8mx3eg}X}^r^ zB>T@VJ0<=}b%SA3<_PbML)@{hx10aemZ-zWLD%>t>y>G=arFQjOxL@B`RF;b6s@5O z6wc7GCh<0M@s4cIHkNoeGGG$b__8}&hmu*#cXxM3K+|Bz6|C&%yP%4PyITiy#@5@` zn=jf{_;u*17=<p;^`?er^!QF2g!7X(EBG_~4FR<LPh_={u`w;n&$dfUkrt!PlqG01 zhbH*zNpJ&t5xOkfk(R}Y^knS(Muf$V#4<{e%|q1v0bW4z6xy2DqZt9=vpgHZs>7CY zLZ-w%3ckA=*Vos2MofG@Jw1J|xvM6()5Q7f<}>wAK~-FA41*SXDi6gUajZ;oQzSHH zrH!QD+sYEXlAoGFxXpLE(nveWDv;~6e*lt6cZD4u$ntMMxn;m5*nj)>O$T45SN6l_ z<TpwQ@cE(C!4CRMx3di_0MN;;7u5jUb8(8;DNxfB2gtP9E$@niQcf1lBd>^+<pWz6 zBslC>wzZ)ZR%P5S9Z4QVCV3G=cBeP`OFXZ)x3^Qe0R}4Le|-P`y~Isb&`z7>BAXL| zA*lNSn&sOFE)-h{`D&P(u-o`mFpw)8$o%e5xc0uV(yFN$wy*i1rA<1!Xj~vFs;-$O zO{9BOL|saYhEOVj7G_|0?D(3E2s<2Y9z5aZ=4J(a*o90C+CKpwBk#=6Qpr<)>X3;m zR^MusSq-Y)2hN}p7B*;z^;wF-!R(L~!pMqe#Vm_jZeUra{Zy9PaoqW~XefqZZ;^M4 z@_qfvo$50t`>j%Upsfk{Q-T-TqBHw%g<zG({wz|-R_&xyc?r-5HY8I#7`x-Qc5+jm zM15=ZAVfh9N}nnEr#AsZmC68s%o-?O?>uo$kUrX!1>9TFXa`9p0~0rWp@-i6apASH z=<=1<!z)+WM16riP+m&`d|OTRk8trjzl13%i8uW)2<!a=jqF(>qaRX|-CM<1f*Z@j zcEv$dGEF>adZJsBSa~Vy3x8c}y??)87PE>^SW5<Eq@H!YW`$e8tC&Xwky1hyaOVx* zXFvS$b?P)_B!8BX!)vigZ1d8i6dqUU%^2JEqCe<B+@TUJuLj!XIS`*)0dYkZp(prE zQoqFNKesBZtaiJ`466k!q_Cv*ZK?n8;X|x^RSA<t`WqF{(~79hJG6+$A^%i*fw{MR zWbn2wE6bs~h8;zlrxVk$-aZ*BmOWy4;p%v9A)eH$grhrsdwaX8ErnS)at`Zufhw9a zz2+~hr&h=)Ow<Hl#Z@rf*KHuU_#kjita&htULw139^2gCmpJC=v$bY65g8CyxKt4C zZJ+X&I|t!ll&eC6#w4*~HeNxCiWC|rV@&N-z`6}H8uZDP$`0Qp&p_p}NYDe!BFuls zy|N#20%+@Yu@&lZ{V<@yo$bAp81<LRp5Wz5J}VKrfzeJF+frT+e|L9xadAPJM`V1U zaIws5C7D81HM4CowGD2#;A~YV4(cNU09<(O?42;pcf8ro5);~9TwJ8#Q{>mG7DbqK z(PKY8KE}$(C^&*Rnf)ugObXR7uuPTvzsyE+;GvBH4k3g3B`FbYuVssAAHzLxXnYrJ z=N+&Iq+2-Fj_wk}dEhand&-+TI=L4sPNE0cVcOR9rBUx>ADi9bs7|AuCTFqYrpqTn z(F&l>Eh0?8^EbiT-X5-ikay=PUu>2^$=phT%ci#r*9}LE6eXkfVg0e4nM}%g`Z&IQ z`xX?hN3ZPd>FFtwb%sB#LT9=Nn<5i!Q~l_MZ5MCAl{>iFtQE%03doh++}wz-TCoi9 zmH>9-swwe^B^#RK3<#z(XPKK1zBRLI#-H92O1XVyF-;0>+J%YeYU}Az+N#2uZkS-4 zJwpNtVb*Yx1-iStYtQ1*wkVi{kXphu^y&Lc(T?r!%oT~Mk&=#!5huCKVVTU<5_dPS zLRUh5MRVoIa@l1v82p(n`0cmf<XAAf0->yFhOjln@$2Vx{k!wD)q9cPg0@u;LWj>) z4~V5brPo~hYl3_o>-+or%t7^?KEDJXb-3CA{(IEy>JdoBa@N+N*Sx#C>!7Qv*F*OD z`g-!8|M{QFGa){CrQX@K-m2-r{P}}cRct!KIQD7B!-`W4;sQwV#Yl-ch3o5UWNkGV zTu;EQx)HXGDeK4?sNa3jk{`4rh;7y#!;+vp_E>u4!!=H=c9W)^ek`*gNnc^jEg3Eh zL@!ZK5dgopR$^GmNBOZ7LXj_HwC&1YzkbDq0L($7w}F;C)Imd0PbJC%LGtGidd=cM zcdyxkbdlc0Y%&;78y!^WPGsoTgy>Qvg(+JnOI=+Q52!oZrQfFNR>7z~&I|Izuw@Bi z?4t^BwWv1cN2)EWW64;{n!EkXB*?6F40a)=q?yeAnFA%j%54E<`W)^aiDZwp`O^kt zbTm;&+wzV@7_c5P{dQz%F;4Uah>_F<H@2p?wbQ|COD-TO3Nmv=L7NU5Bien#<p)ZF zM>-4u1eyuN<8lAv7)VU7uC8d89J38OM$1Gmhyl!U2XH1KuWN@}RIl3E%qz)M2g^!( zE>dkIMxhubN@;k>U*4^x6$}UG)7%m!B}jt6i$wXR)&c+0VELVMv_{(SX%oLHfhL)T znqApRT_d-!%hl;ryM_$tKXHPaK)ck4ZA>7kw1ZfIIg2YRGRub~G~_kA1FJSrKyuKe z$!t3q?E(s{FbuNJY>SSxljw%P3g6M-M@L5=Orcm&PlXwZ&+yyq+_!JvB$x%hJKPZg ztOJL^jYE{QTNBdsSoeWT)^zQ#V--0|A-{b2($XxEV$*h1Wj%U}__9)+Dg$;&9eQjC zF?qc@mWUn@I1z{w&~2uJTngUalSJtN1xOWs{`~p%>sJ+T7D33Q3@+VNurS1n;=5uM z!NbCU7ToL|wRDTtz3pYG60y^rMY6*^cA4>x+;B|WBQ?m?#Zl?d%8CV=ZGJBi{Qmpz zP)s-oRv3g*RM!$~m{j5d>1!<B8M`gtLb?3H4rXb~0j25`TQ7Zner`%AaEh|QmbJRI znt^ui*>c3Tn+2yy!Dh!;E@xTKvG6X$vHPjygD0@k_$pgn#R4J4Kb+u}3zkAjX*C4k zVr3c{C<+tl)d9}5#dkjyDHkl;v4$kqQ8%?PK%KO(ub83PD%)g51FxW8ZkjdKct~4v zCz1SuFC|s0FSmiC=@hzID0vW+G}@pK-QjoAWC|BbmoB{v$1bjj!&3U0Qhp@thRW=U zmdVw0W5*X^$wW~Gxln#(LM*+{Y45`|eJQpS27U+E!O|QLoEOWQB(>5Z)p3?7BFMH= zf(IpxAewLn6$EdpO>)UJ3MEUNu>MulaRXH8Fzc1L4#1hxHQi?0c)a~s6kOm@OJgwf zfu7d~UWQ_f#Nwc7>7b_vIWi&7oQo3%NiDP}X6V8hal4}*@s1U8cc7uBJaw9)azjlm ziXX@;Eg2M3yWlk=v9m4+gRbACRIp;_=jZ45_xDT7pg!xvsoi}4{yjXwIjH{9&0oD8 z5}6vvl-gt9^KT+3?yJv~_;*GPV%^Ctt5IH-hGSG1BS9=+RYs1RYaE&ux)nDrso0Wr zzuq}1LNE>uhy=J`zi1B7^7+N(-{GZ!YN2Zu5&o|UL<iN?)m5-4jaWxebK<ve-#SLf z28dUnt`bA4u}H)w@pTcqg~G&-A3t7RUQ!XHlU$7_x2UnC)Q#FY37y1cSysuD#wkbw zgW9Hk{`@&lk~wLs0Ol=@W(^f4Ag*d;M~9WIz~T6IOjZ86ih))eBU(?TgfxF@)G7Pv z5GY48x(9V&!z*iy!9Wm(ikmxyp%zlE&f*q6=^U=SRRaWSG-6h{;{LTyV?a+&PfvdT z{da{^lUNGXg$i4FT0uXxN0qdm!<g+%h#~Vl&fVRe>c98liI@jLy=6lCFl5;w1J-KN z-#%EPkh-H*`rV_7qV#yI%ocJ2`(g5qPEn-<VC{}PXVJ-xZ3$k2ukr%)G1_FMhkCHw zk<sI(GPQ%fX8rM7NQ>Uie{RO3)Qs<vL0L^{z~yE|ZG=H^q-$UofLnTa%b_8LUQL9% z*1h=l_IC2`|Nid<MljcYEo+>YUtNN>9K&emC=iAx15ZN2@I>!<d3o8kl^rv9&QPuK z#;53J=}BaSDIV0Nq_o=$+cp}|w${uiI|^)8T2x^|MuShQM38!x*<cIoXKqD`_}<cM zz+T<SB?N|K=d#1gDtF~ZDjalgF`H}|Dcrg$_FVQYFsuaxiu58AN>zKF;C2C}F&M3_ z(c0TUx|CF@g_4lgpjC7%M(x|ddG8F;zyJO39Yo3FQl2$oD%Gg06tCno4LEj6+#w1m z%391M{zqp5Gy%kg)o&eT@ju_Ce~1C#j9BjWsm(B;3mQP9!O&Ocd508`&(N&_{!_Td z&H>LYkM5vmyCYw8{5k8LOSOp|3#HXe&$p0lqcRK-Z$ucOpv7$7w%)n%;+*O#wa6k; zmuWRB{jWA_;f>6Ps>mWp+bCQ3j;YsOLP9@2K0f*DU;nD8;~bz(2$RLmgeT~=ko_@# zY-idY$o*}dDO56-w@rLY@Y|kX*`+{YBP!kN2M*2>1CMnt3VzsrJFV)0=%^J*%<bI| z^tH9A&@#u<-2-a2cNv)Uu85F0Ve72w)7f3U1qo%FrI8gX0{pK8#mmEjqG9yACKGLK zO#VP=U25yqRu7@WL#jh6qOFz1)ix*6-O`5A2@`hmAOG<m*4NYrIL<blw6fK^T|`2m z6wt}{u{0bLHY&0lDOMgl8($4<y~B2a_A@<j6&KIR_^nhtPZv_rpG~|WppM%hCRsDE z6l3$cEUxy+&0x%;?+I6$MI~AER@#AOp~!3vcbIZlg%!l{RRL)S19w;RN9`~@rH!+_ z%c>e?l5cNsm%**SQlB7cYtfMg_dEbV9p6d{MIWw2&F-jS5hr|oeSIIL(0ygM6pr0m ziHJ|x;$fEwi{2bj;T?**27Ik4%G~(mOcaXhjs_4aBp{bR+Pt2M#NxYBB0z6(A$j{P zKZ;YaK*(C{n69;yArhrZ##b-2)V^-Bo*3XjOxU`S8zXZ|QCUA+-yZ7J9@G5k8`(c@ zL83xIC?u|Ld3bpE^5qMWang6C;C)dZEVDu(udnl$Vu^#%Xyt`URJ4Uwbr|a0L(=Jf zeSJOt*T4RiPEKd8;7O4hsS)<8uM$WBA2rUiQxbj@rkm5(9Jf=MApk3*sj-pdgl>~k zUA1qyky?w6F7wHY{kIijr)I8K5@tog5v+sKWF8_47?xlwc_M6lWr&@w;{uC(2t#$@ zxAO<$L6O*4z@ADNt!8ebd9XU-NT&xdw|u${E3vJqvgz`LsFdk$v$Wpp_F{EBRkq^q zZe!Vw`RsSa5@wZQhMfH4AOEQ3NWoCP+2vji6mM97vW{jA&juJfNn(Zd$Ra2pZBvx% zc+j&Ce<^Rkgbe;%32er1TTr-5inde&^g-;{D&6g9{8glAunF(vABCRklLXk>24S(` zTWT3p!0J_^^ub;LyozF171X++xiyiBv>SY#8WIDHq(Q|fVx5PSWs-PuhkI1@ZQ6s2 z0J@?`Fr5}pF8)@u(^J&S6uP{}PQU;DJ5iwa+blTYk?V_@u@U4dQlYL1laVzyujF3k zB|3y0lpjBSnEJ4_=?t6Jza<!iZyz-EZwE->l-x6?wiOWLRRN{+9mH6zk}=SRa2$wN zE@x^%Rzp)2FQi8zrGhb@N)fIww-c`{)G^8o*YT!Yr^KHN-Pt}8R#kr7F46gh@}0;n zF&Le$4ua$^LFdr7WrH${hU#t8uvQ>QSK|5k`Pg_*BmatKr~-DARx{9yLW&)IRvsKS zS!CP~6BmcEtDLp{7{{G{>9gQi`$yh@U2HQjxXpXPY?6*BNUpvO{+rOY)eogN)X#}@ z0z{vtZ*I*q0+(c~O?5dlpUd)T<8gF!?Cd~p-kIlF{yY73<x_)dG2MD85LjPPY!KSr z-)k8XyCVa+QR;}2oPKN92XN^StC;NM`R(G|K4HB#khPbWms6_eTk6HnfM}{v!}&w+ za5`^pZp1oi6Pa1>x~oka+vyI_Fr&NM&xo$H<kLq{Rt2vRCh0CMF?7fLnabzv8r_j` z75D={sMhI`lyZUL4*I}W`qM{=JMEB=iHmpCmM022=utaB2BNo^#^N~yJ;T;ug_ztU zAn%~{eDxf{Rif|Z(_7>QTYxxM#xNUcYH87YI?w3mGWexBZ7{hlyYJdz#PfGvVG%K@ zVTQUxnZM}VWZSA2z+!T;CXX!=Zl^J%<b%jGH#awB71Z`5@&}}?Vt|4(j#Xt<ilbRq zhtMzld9ZQK9v*LJ%aGz{8z^(_ba(yhkeW_a|F_`<of2Yi%)DR6kzFO!Z2;a@Y5im+ zG-X!>^gz8GTGlgDYBzurazX-Mk@A<k${(<rs9gtvySj4Z1iv~qx~##{>U{J}x8(-^ zF80Oq^Yh8y|Ni&lOJjT`Kn#hv$H)<jxb$1ODpAr^3Fr*1CLD+8py#=ab0Ep4*NSK( ztFKd_kKN+1b>v1flY$eudArpo+xsF^oraw%Md^((I1t-keM?Ki%DtFT-<?!#vfx+> zE3f3vv_zMems%}Wmq3fvUT@%rTPH<B=i?ku^;tFbWGK5K7p+wwiPcy|4;uNT>>vPs zU<K{qQR)RbhtRas)6<jx`mg_@1_O%6i_xj){H;`p!R8PpEP8!*5OSm*0MH((t*2A9 zT~R97z6z>wR%nL@k{`>f2y-xA0?fHO@uI-hiP&J*kM)jJZzWhEJ8YN$8hytJ&JXHz z*D<R%OPz%p0~x@6r7b(i?REn2ioLl!yhl<uPNX}z4ILV?cmAlKH!r+EQ%hVwrtqG> zWx24fNKCXi5CH6s?UVZ@HBxV`HM+UE*(wpFw;sjb!KkO=(PfFt(sq)$X?NA`)yXz9 z?cFk*sgR;q9!%IN#)THwuDuq5VNP=ZQv37g&)eJEY`kW*VnN*jj#ps=7^Jt(RF}0> zVp#BwoGNdwGyq@+yyvX&p+w{g3TVgbKsg6jaY-s4KYpxskF+2m*%qCCs~)5bK_!gk zNYq!?-y{2?<ccrF*$UcMS68rkg7MfLIK)-UdefrHf`rNwOFKc_=~QI(KS(SVJw>&o zG?w=yV8~RgHiSj|^5u)wS0(_j780bRVURAgvft{zRr)UEQn~0uq{awMeVVC!brXP- zOO1`PM&j1$3G^wf6zp48TJKwh*S}Gswvttyi8472GhOc_PP_92Q)yT@6FX~U{oc+g zmIdaT#JD|!j^9pyv0%TV6QsxJ$~8r(#9H#igYWbXj3_lDjHM+H91Pi798K_9cHY+& zMQl|C=j7z~-+$jS4==Wj*RE#pBwMn)1T+!#g&rbg9)u>G&*MmD<z8@!0|7%VD6EB{ z_Xv<@XJ^^P?T^SXben-JE}qfX#susAlGBLhGbgT%)3ZI2NFja~&2Qs%g-U%y0Hej5 zMMP@!(#nIOCeSpo!4eKT1mY98M@AtaQlhgk6HX)j9(mzTPUVx=lZa(qTA#ntfQ$dg zR;4HhgI-QerSIegG<5iOjvR;-x@&bv*{mYXinmEr9V6XyN|e}1s0H2!(S$URg2ImF z-D>`}6V)+M@G7<1lsq>|2SkY6Nornm`6z)IJo&X@D+X_b4rz>?>zVHhMWG0!lx0-| zZ5E<eWX7S%SLk>_DllB~>({TM<PeGQoC1skrw<f@QlY%9PQ^CK886JinwSX@7u6{B z0gem=u0%qQaRp6QQ}J|_kNOEjhoaq849<9HG;mzhlq*PXL|gCwcHOXr!Wt>9!8%5R z!*2Sg0xVz+xP(GX1<3<Sp_$I*Qr-1P&=6VE*b01?6{*Uw?T6W8MQKV4^aghlhJhJu zFdhl&tr!e57-*xJY{jp8DZRmp)fqekFB9e_AysxyVIUYp|Fo(Sp9yL}z}<#69g8MP zkUOZ3NR5=ZG4h5U_g=8uD}Hq<4h6~?(G?%<@>Nn=l_58Hb<4z0Ucfny1cRPp@Vg+j zqfFXF+AcEL(UNlT3gsGL%+$l2*O*Wuyc4ny5D7Fk%x>6)i8tAydVsfw1Zc2r-(fvF zM$``<gipnMT8St$_C^><uroDG_SLx&$l?-hNkT<nhmGmf%|f>?Mvi5S#dv0wZQrF; zTE$k_;xfK*M_ZHphUNt<El~lUkiiEqrPJyqBBA9mEk|=TZ8o*COiR^ieN_iAo@k!s zm;j9%nGqJ<Av?&LP0PiD4on8K_ZUm5K_4qa!VX)l0}+*Z5-gTBFXeBV5o!TzSEzp~ z?&BZr=IM^A+G2bu18F-}zpPM_T3*MFwu2QD{PeH!S3+zevUoKSi};mD`ij2-w$<d9 zm8(S&C`$}W-U6<vxPwfmtPLTS;O^@yOdcH_op!yp=LFWnwyE4~Cm<#ljV?h&c-x<6 zBLYg(ccF%`So&6Iw<ld$1r9=S2@P^fbPz6sv9a`(d4+4i7tra#Ys~y?27JxNY=3z< zTwk%Ro|dka>6QwR_U$+~%WGldr0=vU6`=MK!%#uaHB<0IFkN`Hm&$y~-&JwZJYa(A ze^6)sU4rF++V?&8(saX>RwGfl=U_gMHmwgvsI3~nR-1IG3no?%zEyUB;0|s7!^1<b z4TtMiz$Oo*(AlKz1OEK^a{_PQzkk2Jz7`}@%p^`x<1##f1_bH?vBZu10Kf|lI0w{H z8E>5%oNv8#sGL12XjXEzy$OoLnt~o5A4Ah%z*6H?hBPjIm48G~%Z7P;d{iMX<LQ+Z zZ>gK<OIeelh^-2+Lbg~nbXQRe&}&+*43i9d$J3GOuDxgLd4CROiZM=3PL69)&tN2e zn?$m8=@Tm(t_p#xvlxd_Gl&O>Hs}=FSh8iq?ONH|*ukI+xEQ67zAg{g8L}VXnE1sz z`R(H3;_mJaT@@o@XAz<j_jV0$7q=NbV#MK22-7r1Ij<Gof}fv!czC$Jz7B^rah*^~ ziQTqStIk`%zKB`P%tt3E<fF;Z3NxQ{8)&oPE1S%bLSR}iY4zpk=@MuTlh@;{{rvg! z>go!p+>;9o8Xk+P!Pu8Z3klkzV>vrv8EK|<QAb#D%x(Gsydlh&4r5QQlB4S-NzyHY zQKisIqLJk=!BwbU$V;ULdEj8Gn>nLWpRQuu8t}EzcKTgu0}3Zpk_GpOUAPnC)XWUR z4Mp}XpK7Mxq{QE-f@a7`t?#@81LCTEWFU%k50+gM;+ALen0L0377v``MF1}@E-Dsw z$?5N^U#`}>8@QxcLA=iDwNTreDGNF}Iy#NcgE45E<L&N%mnzOn(&Hmy%^nmaSmL<u z9nkJmNs>?N4?$52FKi)APOzDKkKHbY<d;%x>#Ubo3R(d(ZQm6mGSzsuLN4QdK|DhF z72`1L;+<UlN7wwqqB~Mm{-;ag&zxnr9_kNJY{ywCt##Zru^s4&>fJEkaAQ0T8nn>^ z{_xs}H`0FFA!Iumo7loi;u)(ZS#;Pkg>+sWl_-e6ly`OE^wYH4WrD6|c!#)CgN|Av z@{XY$CMUV&^hMCYc7ip=B=CWaVF08Z+wUvh-PA3xw&zhcEAs1yHLmRFMzqVGM7K{% z2~-!2^f%?;%yw3jCN(boc41T;E?zQ8uTLv~Dgj7>0I!OaiGruH1?5x~2V17s5*M@= zq>G<*^cMLgvWJ2P7P=cQFmQ0W(<Pg0|8!tXOSLR`Jgfh(V&(7rTA3G(;*7s(n%tsh zVnENfxODEpSO6Ls&(a`rptPH%pa1;lKd-N^(NHKw?yR!|-B4+-8Ez0h%!%!_*Wy<u zw|IWHuIteN_EG^j3oe+CRTf{%5kj0TKj7>wjdi>2mU~Woz>HRaAfVJep$`rXa6M48 z#A)Wqt7*|V;vzD2MA=13L@=>_d$5&HwIe2>9*p~w2b)qxOl=35^C9-#QT{c50@1Vj z7HdQUhnuiEJA7VOgL*f7<e;0XH_XedCCD$3i&|xh_FLxLzoJ>urgZx2JYM-Xg&Yl% z%1CACx_@16ISQTt_qxq`G}J{$WS!b(1!~Cawo*ozGGCHXJ~f)+oK~j)yG-A=`Ono7 ziYUm5cge((4iI~oxzhT_&82}QxYQ(4^o5%%8fGt7dF>#`hTZOXqaM=uL9XwA43E}x zhoMsFKwQ$0QkqBGAt*Ux-V|n%U)(94h8^c4&?4IgVx{2sgCUe+EKN9qGu^7lS^5f< z;9E*ys&I`=Q0G8N{pjeZu$vmLI>qYL+NWh=tUhq-R`icvy(4+INY-1lb0~I9S}WNC zGEO^CsZT4`B;8<=LM1EE{m$9zCu{g-?<+w$6`dsEZ((|_cvEUsB*0(k%FD}3wRGPr zk#PI~juAiVTQQO9=;-JjQVml8vJ}}IaIE+{MN2R$tqo7Sg8$`1@fVvVtHX1t9vsAK z8iUpqseAgR>Y3S)WO#7hjvns5u~@-@2r))bM3z1K<39k!4qVRIgmyt8%#Fx#qh826 zn~~HX76)y4x6~)vMiEw))bj)@1e13rx--F%e5N#L30dt|RcMCLIHZt}5Q)<0P*@X= z`m<(cVqrF`Kg45h;|c&`SC_r88a^2lX!#gA%YW%>OG*|MqHI`HCkztoUSD5Jq&mKZ z_T@}P?jQojI3ENhU_Q-}V@@2noX#?`J4tI<Nn^ady*2DTtEL8qS-b`YPYSrE(kS-= z85SCu)(QLqi#i$GF1s4-?HtM}^1P^Nhqn+V0VWog@6-VJ!|m<u_4T#prvT<wX6H#M zL3ivZ2J8r+rGzg>B2!14-sG_6xFgD_x-Zd;v0#R`V`5cvwp~_8$>BdgKOcut!}hI_ z2{khJ6>sYc<evUls7jeX;A2DPC4XrDR|M)2W#!@InkYm(pe|9lS%fVaHH|I<d2Z8O zF_>5gon9*r73S*PfFoK8YGV4%!BQ}toqzxsGH?O#EH0FQQ(av}rd}rr{C+sQ0OoY& z=x*2@N2Kk*!IuGF2cY=K<EA09xSS5qHo8@q@V-4;ib<b7eG10bx4q*D{>+?)n)@;4 zU-j|j<>kFNyT}O4PmC=76TNlYc(D!I+Bve$asmxlm70u>7E@}05clj*gL0-89iT@3 zXz4hpoLDIz{^x&2Fx0mR%QS)__3^gf6ft9oNbngd)Z=v!S7Z;ftYb%16v7J1C;{!O zmrk^jjARNh8Kmb@a_YWdoCTW@HuBxbUkB47z;JxR%9!r(=mYkg&^G73UtNUODlNN% z<S62K8<Ee+VQNWueSJM$DMm^P#AXY7Hx+aE99FI;vrob;E}xj)9u)bdQLrR#1iTeS z1^vR>wgj>@UdqEO*|#)BO}VQ$(t}lhR%1+?D8p8;R4^y_A^bsiw$PBA1fFu{)96&n zRzTAg(jvs3f1vPSR%7`M7r&{JnYwr|{&%NvA^QmuvQ|bRY<Y>IZ4aY<<P+$9K*V~Z z+&5C*jsuqkZ9)(3)m`jZLJZy^`QLy4o$*_~i@+Zte+jZHB#XsEN-cX_8nLb6{9_3t z0X+_Ady$uis!WCVeW1~|04@DJJZser-TE}i<c?THW)>_91pRcoK4{Vam_!un8ftQ3 zAg=Cm_{D8Xni_Htf_2oWEpeR+E_!>&NtHNeBl|6PgXU5?m}=uYh7Cz~F)!VY2P7<d zm2wgdIqpo*4YX&GV?rLw95+)9F7&IjzL#vXH`0#;Lykf4u}v&`+iOyza=fJ%^klJ7 z$fDwMdZjy$)TjcIV1_+#e8jTb;DdhoO@<ISM4v`(tHNg^i+u|Q%!R}D+8hY%YGgBW zrDa+40)bimXBzn{)?!qKK3jO787yeEGStjxa58U$IobE-+^F7~q{m08i7;|2T&@|( z0jjnqVCaTdpKDKZ(GX9g4Hmd%eM*XevH%CM%4rlHtPVgGQwM0={;!?bgx*`eUouWI zcXcx>sGy?NzZ#IFMsN@<iR)pmbh=UgTvou7DN_PjJala*QjJVqi{9UqDUt#YgfbkW zH%hI|gzs*0Y20d0po|?Da>+!du2WbdwM3Q`7Ex!0SF{~@Ld{ru)C}ue(doXlz+Luz zkg-S>mrc419)&uwjWoA>E8Kb;NlF7$J;ik(#qD!Jajej&pYi$m`E=*gX_gA4?BIrC zC~44l(Ke|`(sHbF9k*CE-BHkQh%F(1cleY^d-EQ>|GVIb++T9GGRvy~EVNL?Na&_t zR~*ve+2L;K2??V0?C27m%{UdBbGE-%g_e2+kYAx854igD`6Y>VFQUl;u!RPI<F`GV z`0u8^uimY?x|!UNEb)M%&x(me(F6oB?HeO8E-An6m}bsX>!{h&t9Q2l_ZQ$NvP4?t z=6W(CFjqH}!ax2**tHbu<>keL-rnABt!rfy^>~>*5|YrdySuw9%<6jy-fE;=XL^5s z|KrDxWR1ydZedW>{=fhGzj=USfD}9vUN(MPh(-pqmBE?n;q^vm;raw=8R~jRFhP*E zGuJ6%E1A<@)fV)eE$q%>&;YYlQy;aB493n#IqvW8sR|(4wxs<%&_*ZRr%#_!GQ@OS zwM}!@!382Q<+N-N@~dPZ&PkTy`}gl<z|oWyiqFo@PX6+jzpR%8Zo^`khZRWMNd%Hg zjm69S$Xb8<_Dut=21XFodU=SLJ7AvEc5H7K_{tB`uG+am+h_qC`0?Y%moHy5UWO2b zNfC_c;4)VfR@N1+vB%Ug7eEm_m(}$K822rBHqH%_n)|R~w6vZy8ti2Bd{@@a?&!&D zk1Ai`-~%E%hyWHQA4w8jW(UV<#et(^L{(WZo2i3qM;2n@NfbwvIdR0^-rhdIV+8|x zAk8o$!z6OuZVf9~u-}E?F*|(CaV$1R5YdaA2`PfCMo`|CN&EKgTMy0Dfz=cslt~LS zHdN?l_Xm?zc4~l<cdwk&3=OTNBx3_Bh23;~D+1G9q#fBAild#iDC*VbWmJp*3S-KI z`rU(pphnkbidKI`8Iv0B-QC@{Z{JpR&=pFOC}oDiUlX}B3+x~e)I9#$7Wc0aS+d_b z0aD%CmRx{Mgbv2to5RgUwDRh`#}y%#uB*?6p9Qi~8iX$W0>=J;TCmDjMx80*#dx%x zZ>xeO6IzK8t?@3Ez7({H)vB<*%NsJMm<);RP;jh4IXmZ3L0X->$_gt@bx;Dp1V?9H z4M4h4qV`qXC->q;ExU+|$Dvm1kwUbmJ>=rt+PS(mCNlhaB=MHh&ErL|qBs_4Rg=9g z28{_|KD$hiSradS3<N1bVrAcj$rk8Y!u&Q`8Ds;=r-yG)e2f|Uu}5bWA^qP2ZjSRR zNM}tcARXYTVj~g4c0K5vX-l#eMCtzgU!Ho)kGd?mEr1Tt^w0kxuN39e76?4y9B4hs zb-dj+ey&nezttY^^l`KV(e^sGog?hkFuAssW4ku=m2mpoPO^pm{hR-P{)3Lm+YB7| h|9M`O-#d-}-vCFR4Y~kg_a*=U002ovPDHLkV1oG@In4k7 diff --git a/ui/images/theme-default/check-green.png b/ui/images/theme-default/check-green.png deleted file mode 100644 index 36cf0a9b510ac10330517e2dbe8ab0708e0ed9af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3501 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 bANhR%3@6-#1vRS<00000NkvXXu0mjff?tTF diff --git a/ui/images/theme-default/check-grey.png b/ui/images/theme-default/check-grey.png deleted file mode 100644 index 802dc46aabfb186fd65379a2e646be13c3557750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3535 zcmV;=4KVVFP)<h;3K|Lk000e1NJLTq000#L000yS1^@s6VoP>200009a7bBm000XU z000XU0RWnu7ytkYPiaF#P*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-oy)XH-+^7Crag z^g>IBfRsybQWXdwQbLP>6p<z>Aqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uh<iVD~V z<RPMtgQJLw%KPDaqifc@_vX$1wbwr9tn;0-&j-K=43<bUQ8j=JsX`tR;Dg7+#^K~H zK!FM*Z~zbpvt%K2{UZSY_<lS*D<Z%Lz5oGu(+dayz)hRLFdT>f59&ghTmgWD0l;*T zI7<kC6aYYajzXpYKt=(8otP$50H6c_V9R4-;{Z@C0AMG7=F<Rxo%or10RUT+Ar%3j zkpLhQWr#!oXgdI`&sK^>09Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-<?i z0%4j!F2Z@488U%158(66005wo6%pWr^Zj_v4zAA5HjcIqUoGmt2LB>rV&nehQ1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_<lS*MWK+n+1cgf z<k(8YLR(?VSAG6x!e78w{cQPuJpA|d;J)G{fihizM+Erb!p!tcr5w+a34~(Y=8s4G zw+sLL9n&JjNn*KJDiq^U5^;`1nvC-@r6P$!k}1U{(*I=Q-z@tBKHoI}uxdU5dyy@u zU1J0GOD7Ombim^G008p4Z^6_k2m^p<gW=D2|L;HjN1!DDfM!XOaR2~bL?kX$%CkSm z2mk;?pn)o|K^yeJ7%adB9Ki+L!3+FgHiSYX#KJ-lLJDMn9CBbOtb#%)hRv`YDqt_v zKpix|QD}yfa1JiQRk#j4a1Z)n2%f<xynzV>LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifq<Ex{*7`05XF7hP+2Hl!3BQJ=6@fL%FCo z8iYoo3(#bAF`ADSpqtQgv>H8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ<AYmRsNLWl*PS{AOARHt#5!wki2?K;t z!Y3k=s7tgax)J%r7-BLphge7~Bi0g+6E6^Zh(p9TBoc{3GAFr^0!gu?RMHaCM$&Fl zBk3%un>0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 z<uv66WtcKSRim0x-Ke2d5jBrmLam{;Qm;{ms1r1GnmNsb7D-E`t)i9F8fX`2_i3-_ zbh;7Ul^#x)&{xvS=|||7=mYe33=M`AgU5(xC>fg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vF<Q0r40Q)j6=sE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*SAPZv|vv@2aYYnT0 zb%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5cP6_8Ir<e17iry6O zDdH&`rZh~sF=bq9s+O0QSgS~@QL9Jmy*94xr=6y~MY~!1fet~(N+(<=M`w@D1)b+p z*;C!83a1uLJv#NSE~;y#8=<>IcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a<fJbF^|4I#xQ~n$Dc= zKYhjYmgz5NSkDm8*fZm{6U!;YX`NG>(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-k<Mujg;0Lz*3buG=3$G&ehepthlN*$KaOySSQ^nWmo<0M+(UEUMEXRQ zMBbZcF;6+KElM>iKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BK<z=<L*0kfKU@CX*zeqbYQT4(^U>T#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot<a{81DF0~rvGr5Xr~8u`lav1h z1DNytV>2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0008|Nkl<Zc-pL#Pi$0G6vlt2_r5>(&3m0>TAXRB7-nFaGO5%wCLNump+?(A0yJ)A zqhVlSq%bVpu)!D=*CxhB6BkONF2rC>3~HnsCAw(D&;X&SAR04)7O6O8W-gmoQV3LA zJ)5_<dB6L8-#O=swU+<8<UjnU02k0e16Ty=fR!}@9l!(JH;){7F$jX^l~Ql**}L~$ z;7`3uU`q`2M}~(V7#SIPLp#oBTPk&8baeDG@Gvl~R|#|he^0rb@9F7zPbpRC=;%1L zW9QD3aRgU^MZHR(Ik12Kqq$t}eWlccsZ{F1GuyU(1zZAt1b!8fx?Y84bFfl*Y(qBt zp;D@?HHxl0Jv20-wf+S-1<Z=bB5~)IItgHbX8c{=6f?GO-y<8c*$=c*ZN`{-sZ^Rs zCX+L<!Wj{%Emxrde{k#8b%2R&w!}aU_~qTZH*L!2k7}jbecz{0C`>-Ie*H8s1)KwJ zEVrfrr&6hGDfah&GCVX?N~hD`O-)VRxP95+VEe$pz(?9~vcBih+1YviiBf3-_&HX2 zMMUh~dDSzSOo!t*g&+u?eY{xw@|DAfp9K8YDDrn~-~P7aIGcUXBbiKI?=Kc7fZ14O zRYaQi+o+cD@$r`fV_pTQ)oS&tb91i&QDDrN=XoR&33_{bKg)M@eG8lfPK(Ij_w1~- z*0t8^&yOE}-Eo|+gCHObL%puO{ZMNZjk%tOF@|&|GoA11`T>{*EQa#^ol!r^k*p z=jP{M0RC7~7KR~-ARv)Q{MFaj_XThfI0MYzo#P$Q_^@uRb<5@Q?83srO8~Cx5(ELp z7;+moeiMe_Mc_2>n}{_2X|RdIZdz;AbGvqZT&vZN0w|@3qUch0clY<ed0=KG+jl_Y zYQ&9eR;$$mjYgwttz~nea6&|WkF#9S_EOzmQxUP&+Pbw?1J@=eC*RRZJ(W(U&jM$G z%OX-=(<2>2Lm&&}fNQ`{ah7(i(53Y>fFDoCbrHGwZ{NsU0|0>3-Bb1{rK|t|002ov JPDHLkV1mg#qfGz+ diff --git a/ui/images/theme-default/folder-arrow-down.png b/ui/images/theme-default/folder-arrow-down.png deleted file mode 100644 index 6e7baefac8193d8d60cabc1c7d42b5d3aa674c78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2956 zcmV;73v={|P)<h;3K|Lk000e1NJLTq000dD000RH1^@s6>3XJW00009a7bBm000XU z000XU0RWnu7ytkYPiaF#P*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-oy)XH-+^7Crag z^g>IBfRsybQWXdwQbLP>6p<z>Aqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uh<iVD~V z<RPMtgQJLw%KPDaqifc@_vX$1wbwr9tn;0-&j-K=43<bUQ8j=JsX`tR;Dg7+#^K~H zK!FM*Z~zbpvt%K2{UZSY_<lS*D<Z%Lz5oGu(+dayz)hRLFdT>f59&ghTmgWD0l;*T zI7<kC6aYYajzXpYKt=(8otP$50H6c_V9R4-;{Z@C0AMG7=F<Rxo%or10RUT+Ar%3j zkpLhQWr#!oXgdI`&sK^>09Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-<?i z0%4j!F2Z@488U%158(66005wo6%pWr^Zj_v4zAA5HjcIqUoGmt2LB>rV&nehQ1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_<lS*MWK+n+1cgf z<k(8YLR(?VSAG6x!e78w{cQPuJpA|d;J)G{fihizM+Erb!p!tcr5w+a34~(Y=8s4G zw+sLL9n&JjNn*KJDiq^U5^;`1nvC-@r6P$!k}1U{(*I=Q-z@tBKHoI}uxdU5dyy@u zU1J0GOD7Ombim^G008p4Z^6_k2m^p<gW=D2|L;HjN1!DDfM!XOaR2~bL?kX$%CkSm z2mk;?pn)o|K^yeJ7%adB9Ki+L!3+FgHiSYX#KJ-lLJDMn9CBbOtb#%)hRv`YDqt_v zKpix|QD}yfa1JiQRk#j4a1Z)n2%f<xynzV>LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifq<Ex{*7`05XF7hP+2Hl!3BQJ=6@fL%FCo z8iYoo3(#bAF`ADSpqtQgv>H8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ<AYmRsNLWl*PS{AOARHt#5!wki2?K;t z!Y3k=s7tgax)J%r7-BLphge7~Bi0g+6E6^Zh(p9TBoc{3GAFr^0!gu?RMHaCM$&Fl zBk3%un>0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 z<uv66WtcKSRim0x-Ke2d5jBrmLam{;Qm;{ms1r1GnmNsb7D-E`t)i9F8fX`2_i3-_ zbh;7Ul^#x)&{xvS=|||7=mYe33=M`AgU5(xC>fg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vF<Q0r40Q)j6=sE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*SAPZv|vv@2aYYnT0 zb%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5cP6_8Ir<e17iry6O zDdH&`rZh~sF=bq9s+O0QSgS~@QL9Jmy*94xr=6y~MY~!1fet~(N+(<=M`w@D1)b+p z*;C!83a1uLJv#NSE~;y#8=<>IcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a<fJbF^|4I#xQ~n$Dc= zKYhjYmgz5NSkDm8*fZm{6U!;YX`NG>(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-k<Mujg;0Lz*3buG=3$G&ehepthlN*$KaOySSQ^nWmo<0M+(UEUMEXRQ zMBbZcF;6+KElM>iKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BK<z=<L*0kfKU@CX*zeqbYQT4(^U>T#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot<a{81DF0~rvGr5Xr~8u`lav1h z1DNytV>2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0002DNkl<Zc-oZEF$%(942I!1_19tx?I7r)o}kwdyo2|2aB}P^I*FkC9R;PepGzxM z>|mBG-;<D-B>pW2U}igD3oHk6Ctwd8fs0AP%r<$RAHp!iIXAc=%d!xtJ2U}iMNyoS zB>4%`G+h7>;N}1%)xZ^SWm(p79Dl=g+bf`<dxWGw(n!+Cd#|dh)YeMUTv8+{=)&)D zJvjB={{}#J(+32`Km-_Y2kvIp45A(kTJ-D#fY$(%?sL@jCu{it0000<MNUMnLSTX& C%Y5ko diff --git a/ui/images/theme-default/folder-arrow-right.png b/ui/images/theme-default/folder-arrow-right.png deleted file mode 100644 index 71a1832791df9b57ecca8b184d4e0e4bcf9aea7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2958 zcmV;93vu*`P)<h;3K|Lk000e1NJLTq000R9000dL1^@s6djLcR00009a7bBm000XU z000XU0RWnu7ytkYPiaF#P*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-oy)XH-+^7Crag z^g>IBfRsybQWXdwQbLP>6p<z>Aqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uh<iVD~V z<RPMtgQJLw%KPDaqifc@_vX$1wbwr9tn;0-&j-K=43<bUQ8j=JsX`tR;Dg7+#^K~H zK!FM*Z~zbpvt%K2{UZSY_<lS*D<Z%Lz5oGu(+dayz)hRLFdT>f59&ghTmgWD0l;*T zI7<kC6aYYajzXpYKt=(8otP$50H6c_V9R4-;{Z@C0AMG7=F<Rxo%or10RUT+Ar%3j zkpLhQWr#!oXgdI`&sK^>09Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-<?i z0%4j!F2Z@488U%158(66005wo6%pWr^Zj_v4zAA5HjcIqUoGmt2LB>rV&nehQ1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_<lS*MWK+n+1cgf z<k(8YLR(?VSAG6x!e78w{cQPuJpA|d;J)G{fihizM+Erb!p!tcr5w+a34~(Y=8s4G zw+sLL9n&JjNn*KJDiq^U5^;`1nvC-@r6P$!k}1U{(*I=Q-z@tBKHoI}uxdU5dyy@u zU1J0GOD7Ombim^G008p4Z^6_k2m^p<gW=D2|L;HjN1!DDfM!XOaR2~bL?kX$%CkSm z2mk;?pn)o|K^yeJ7%adB9Ki+L!3+FgHiSYX#KJ-lLJDMn9CBbOtb#%)hRv`YDqt_v zKpix|QD}yfa1JiQRk#j4a1Z)n2%f<xynzV>LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifq<Ex{*7`05XF7hP+2Hl!3BQJ=6@fL%FCo z8iYoo3(#bAF`ADSpqtQgv>H8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ<AYmRsNLWl*PS{AOARHt#5!wki2?K;t z!Y3k=s7tgax)J%r7-BLphge7~Bi0g+6E6^Zh(p9TBoc{3GAFr^0!gu?RMHaCM$&Fl zBk3%un>0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 z<uv66WtcKSRim0x-Ke2d5jBrmLam{;Qm;{ms1r1GnmNsb7D-E`t)i9F8fX`2_i3-_ zbh;7Ul^#x)&{xvS=|||7=mYe33=M`AgU5(xC>fg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vF<Q0r40Q)j6=sE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*SAPZv|vv@2aYYnT0 zb%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5cP6_8Ir<e17iry6O zDdH&`rZh~sF=bq9s+O0QSgS~@QL9Jmy*94xr=6y~MY~!1fet~(N+(<=M`w@D1)b+p z*;C!83a1uLJv#NSE~;y#8=<>IcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a<fJbF^|4I#xQ~n$Dc= zKYhjYmgz5NSkDm8*fZm{6U!;YX`NG>(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-k<Mujg;0Lz*3buG=3$G&ehepthlN*$KaOySSQ^nWmo<0M+(UEUMEXRQ zMBbZcF;6+KElM>iKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BK<z=<L*0kfKU@CX*zeqbYQT4(^U>T#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot<a{81DF0~rvGr5Xr~8u`lav1h z1DNytV>2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0002FNkl<Zc-n-~F-pfU6bIlhC0JY<p__u>;0g3RUdqt}cn43=S#)ve2|754wBo;U zX*Bdd7zpq2ejhwSLeANLCqf9}4kviQ8{V-N)NJ);7={Pj;u>dF_S-aV+ZxC59#?x< z&>Umbb)9LN9`~@I6=IB1N(FwFd2{rVKlq$;UUJUIsKCDO&(YTF=AFC50bf`PdfkBq zADBZ3Yuth-NGV<5y9N-pZ;3eF>QaLmHQNn1)Bt`40BrC*$)(cHf&c&j07*qoM6N<$ Ef>%3z!T<mO diff --git a/ui/images/theme-default/icon-alert.png b/ui/images/theme-default/icon-alert.png deleted file mode 100644 index d1d6c2efaf6d7bdd1a52df268899506246602d57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3545 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 TGS{NN00000NkvXXu0mjfhnJ@w diff --git a/ui/images/theme-default/icon-centos.png b/ui/images/theme-default/icon-centos.png new file mode 100644 index 0000000000000000000000000000000000000000..5afb7b4b63462412d825f63542beb1f7e26b3d7f GIT binary patch literal 4734 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 M07*qoM6N<$f~4IfuK)l5 literal 0 HcmV?d00001 diff --git a/ui/images/theme-default/icon-debian.png b/ui/images/theme-default/icon-debian.png new file mode 100644 index 0000000000000000000000000000000000000000..ff49a39696fdfa5f232b0e79de04d90af6557111 GIT binary patch literal 4239 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 D^V29c literal 0 HcmV?d00001 diff --git a/ui/images/theme-default/icon-event.png b/ui/images/theme-default/icon-event.png deleted file mode 100644 index 7af992861e4085bad877fb5bf8400ac51e54808f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3791 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 FV1f(tAeI0C diff --git a/ui/images/theme-default/icon-fedora.png b/ui/images/theme-default/icon-fedora.png new file mode 100644 index 0000000000000000000000000000000000000000..7b9dd06d1f766a3285cd0fb587c0be4114bfac47 GIT binary patch literal 4449 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 S9$oyI0D9VncWN{pBmW0TFKp8Q literal 0 HcmV?d00001 diff --git a/ui/images/theme-default/icon-gentoo.png b/ui/images/theme-default/icon-gentoo.png new file mode 100644 index 0000000000000000000000000000000000000000..50d928fbfa30560fe873cf3de438a8f0c10a8f96 GIT binary patch literal 15307 zcmV;+J2b?JP)<h;3K|Lk000e1NJLTq004jh004jp1^@s6!#-il00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4#NNd4#NS*Z>VGd000McNliru-3uHIHU<90ip~H4AOJ~3 zK~#9!?Y(!HWLJ6T|2gNz%ALEXyQgPHqfrJ4fh3R+AhPZC+K<Do?Z^IMOmYC5j7{*8 z!5F+?ytYXO2X?VY0)d1C5?}*X0%eUfGa60qo}P}CZanAw{;2An>guYV9!V1bo#(lI zL*1&by6^YA`F)Qt#t5DmKexmFss9BA5Fmsw>$?33z^@qMr|^LoAq2)4zJKHPV!fvG z8io+^QmuKC)@(Ie3;-p8Fh+=~6ymUuJS?TSUnzZyZCgitUsRs=;;ogRcToJ)0ATh= znfvZK<iv@(FsP?*ier8=iX}=}Xd^K+HV|M0AVIA7r3gR@gC)VX44!AOEIy-2KGfe= zc;w2fHl$!Z0f5uy%Qe~h_1E0_`dUrDGYqXvYHV9+8`C7Zv}~kwK!^tM5eRW~FN8!| z&HF3~fQlpHC_w8JDZsWgj%5<xH#3%_|M-`Gb=x(@7+49RCjf9V3IFYH-tnUHg85hw z*;|v;v6ZngSYRZ=vXRopvTTH~5W+%Q65qFQ9f4&D3<9kUNur4&O&lwX(M_cRgk|A4 zHqy38qlhT1Auu?W!L?P8$#9>W(XV*%FK)g2XIVs?P5>}M2)_BHTmQ0Bldp^uXDrbU z#yB8sq~%~)F4A%-7F-6097;tC#}QbzKnl>hZ8Kn+$4Wtx8sgXx)KeB06RNcsgFy<g zYzJvc(j+2{L!{8Sj=^{Jo=jH!!!P{urVsrr>I<g@0E7_c+ArSn)_P#QEr^_~G9KU{ zEC<W-a2%iEVV{u=4!u1R*M(GpRx63E^-+Rr4a%%MU)qdmY$}CnEu~UPD3?RDHb_fi zSr*1<(j)|}aBNM+H<6#=V<QvJJD+;dhTvxf2&WVP4Z{D|Z-$}xw_4!33Lk`vB|U7{ zr&P)@G2yXkv&69>O*<1)H3_d;uj`}Nbr%pUAJf<`EW}hQ3H5pm7%baHU`W#ljKY?R zY}SzR#e4floWH*8(vfnKXkpvp2>`5j#8HChyXLyD{BT<sitDO1=gd_57~x~t9<G;T zpg+gi=Xh+~2uX63Sgk}`p5+>hI?4f-LD0NrRD%<A1VJ13(7N#*!%#Cj7ZTKCwAM(= zLI_Z41V-anid@FvXT@uWHu#@->Qe_orL>SzJOO}Xji20pk38^5<=yqV{njw?(PWU8 zhv(-hl?puNVwVjYFc`!Vt8OR!(yVV40j;yW{WWclo~tfgpj~&Mxu2d62!aHqQiPNU z2`Y(^LStK+Le7xM$zR*NIe+c8vkU480IV^-`lXu+Ci3@H1FxiX1|u`LUY0_k#05{v zuyre@i?>g#B3A3HS1Yfpc7nIu+YW?oAZX<}#=!J+NDxFQt+0duDNt#I6b8@M6be)d zz0O6KUq0~2Pm@SE;Q-KDV_BB@`qkfkU9IN*O%(fRkwMxSa`_%MY$$Ts(}l6u<CJa! zVFkhUN)RlGge4HHxURc!4%0=UY*j3q|95saAPgI#LCA(j5}jaK2G3EHO5)xZ|I+A_ ze_E8p6AFOYBMS@+^_pw`-}in{t9e(%I*S$=JU35I?*LD`#9?>@bKD<n5bcCt0Rq)R zaMeL1w7;*Lve+hmOjBWuW6kVrog`Hltq{^e>jWuGLs9f~+|z5l<GC*w`B1f*id@e6 z`2)bdM-GX5?zyiRSN*$dfj^O&EXWMGd@rM;Jv{9aX?*`NIu3LL2<;$f1wyMBP`ZO? z=%7e;wHTUar7?};AV`^?570(8olIa%iY*MTqbTIrIWXk@;$_bm*mb&cgcBAGy!Xf3 z&y7O=mRgX_DUm^1If^|4oOM>7^DlT5v%V90CB|xcewAu9FOQxJv5I?ibnq%b>Z32W zZkXn=ZiE<&24NtRvGLpji{*%VJwh9e5Dv;H!dQ|n>TOXJ@BGg7Q|}W(y#2KFx;~y? z${2$X!hGXP-?=0V+}rA57A3OSPJzC@A<lo2$L7tC5AnO{2CZ8=S6Jo*s<ZCUNm=a1 z1(xokDJG&=vrrCDu|gTu2vHk_B@M2vDHhpZ>~*es<}>>rKAlX)#|;3+7^IZuYgd2! z;y84FT#s@nlfm&y3=R(Rl#5-4hED+T+eE?&J)n)~t=CL*uT&S)vCY@8%>MOiAS_u5 z7+5Gr1VN0^8bd=gSORRR$YnK!qV=-py>RHCYPD2kv)0cJ0E7_c>sNp0$x-0k9mF|O zGPrJ$p^*_Txzwho=fo1flU|@y!`-Xe6-3otKWNnlRydWGh)<g%$sAP<k6H_c`T06Z zYqU}rG*TF(G<a4@Z?C*#cr0`Ilb>8je`Wx1-B)kAAgnp})WR%^EVf%<c*6!RyVRyw zIyuBYYI`D<h~5f-t{`Z$9+pKxo29Vq7w8ahY6Za3d8HB&h6&nev{ncVmNeLwqL4GD zXTW*NGoRUa,}e5@Z(DOb7fYv0`%2i86H$VZdKvU3a%k8sH)r-1m4Uu7%_mets# z1(pQaVH54wMDw~h`g+svgA|S9<xRGow{Ac_@6l7rB89}VY(SD~L85FHE0&l(l-%{* zn`S;IgfK~>fBHCpQX1Q~%-6nf^FpPTDJfF`nPF&ToJ%itO<(^h=5Gd(rfoC6Im?%> z>ki^!`C11TvT2JQn6?OGyKX>Jl$0w0X`+_7fs|kgjb|&0MIIhI%Q=5TZ$9oHaDI9? zfNfjm+N*EAvsQCU+GIg^^bd@1;f1FG@c{&8i3==kOEZ3%JIIwYe#Pu>;Q}i-0G&Ak zOQvJXebD%fQZYj|>mh{1k~Ufkl$L~v&HSR+y7z&2=DvFuE?aMM>uCXi>%V&QKL&OC zB4x4|;ZrE}bLO@z8%9qfJGUtgWDDV2iM{65B&6ghAi5H}g9vB`LdJI}6|zX#%sD`! zj3iEN7AsbMao+sbcWylV>XQkAM+E>Ogt_sX-+ywwDqa<<42BGzUu5G%FK3@~3S|DV zzOU8f1T7%ws1JzMx<RX~Z`U1`a!^GlPSASZvbP;cPbrIS*+|()XVXTIYMV;kVsSxy z{Ko4KfA(a7;J9^wG*$fQ`?qB(b78Gq&5)Wr(k?JIKE`Fwu*qajKL9N01FbrMN*h^4 zY1-XVXx9tY+B!LkTCIcD(6*tmuht@xIBA5RjY0^pq{g*VN<HQg$4}3{>N%qUConnn zxH*91*e0k&pQ;BA+IR@zQR?Yu+qTn__`2a25ZZvWFpi7yGniZfQ|iI=4`52Y;JQaS zL#qz3N*@sG-=thA3YL7!ONaTaM<(kdg+NFfV;Xuvl-SJA%Pn!;t>5tN14D4)p6hXO z0HrkFz3~T^))v$)^)QbjkLUHW?VJ%Vy7=@Vev%++HAoY%ZE(HDj0*yY!p5=VKqd>> zEZFwZ@17)x>BA7m>+=tEOffS@Q_Wg~N3EOyjvlAVP^s3NRzt(TETzGg38ex^KY8+V zpEG=)<H%FX0c_hcX{f#!B`z8dAwBx~``CKs=|OmvA`Tx$OihCCL;nD#rx%mWVsbf* z$U`Whs$r%M`={WcU9fW}V)`&bD}>`<#>O!dn=qc&BKwzgfi8+4on$^O=d9KfmRNyh z35reSP>6<tp|v2@4vQ5*T66BX`Fm5paY{Kr9L0R^+dq0)P%)pXM|m`P{OkZ1TrkMl z=bif5A4iD&2f%Y-Y#h@X1-#>K#E<Vh%#rCC3VDZO-owviDHc5jhYPqFflwd~^b}yj z2-t4pHw6Lg-E%Y}Nv($qw0H|wae)^9z$(2!L$w~FlxifJ7=x6$kz<h2Wb^7RFL>d| zhqTs02yt=&AcQd2efg%TTGbtnbrB=;jE-*PvS&DCbEg&n#=t`lA+&;X&u7ICx_dj~ z>aW~KrBcSVHJOadV!2Eqo1q>Al!`^hh6fni*vHUF54HoAg5d!eY9^~_4SOCzgyAtj zU{(i<+8soll))8%0BW^}G)<ciRX5Ao6ggj$DX4e9@P)(wD~^?TJVe5}@&RhqI^VqJ z+b>t47}j`zjqCah4V`-80~|Vtn4N*GTUV;f`zPT){&PRo>H_(!<h*UeNU5k+Ep%#O z$Z+sTg`eDWKfCw!ko6qSJZlpZTLw`_Y|3TC<})z14QFh{?Ae2;R+^$fbr1!nQI@!D z`-`IhU2)FQJcDHri=)?aIgfe(Nun@DqKyF!wGe>6yy07irR!Snh@w=uu65#dfP5im zY+=16O>K;^K{^x*J&cW?7Fs@2hoM@7$-_reyS0W-er~5wNu4vsi)`E6gI0CosEj2O zq^KZ>I6QTTfdP*&nnw^ZH8sf>ufB=<cOGQ14i9ce#8KljH*dydvmIgrZ4Mw>0nlmz zw21!ptdkY@1KEs+>)6Y6j@n3+wyB2}Va<B`4c|Ka0nf9IQu@RL;M0Hq&v}({rZx^n zG)lBeJy{B+Q$PE)Zpi5{gaiBG2R}gU+mDzn8zDtNJ}>b-O&l$vk_t(*ND?ie)FQT3 z;o|dq@kE*Px0OhAh4TCYy*a@hw>-cj`;QPN@Zf`um;%6-Eg05e0<z>PX0>Oq)f8;S zhF~S9$Yxwz$7w2u0%HWJu^J$#+kbxJ4Tt}?ZCmDq17O334WBexg0MkYIF3tCPs6iz zn%MfJsUnUw^Yd{3eelqIf-|;kK&2sZP(>#}qY7BY=(LPcRnlkyla?u!B)fO)VB>HG zDa*_)Ea1BVKlt7c33Wmc!mb@n+DJI#jE0ig&GWZJ>=jl(3$<k@4$#3*V1R7K!LjXS z>%bUEsx9iFB&^x5z2Sz#fBRVc1ji)d?LWF*danD6##jj9AT1l$^C=cNEsCd?%rs*R zN@<cr6UUl*4bIv;NEpQk5faqqsMjW`*QPLP4wEjBMl+=G3=Rtv3W_6Bd)Uw~fEuo? zIcwVxxBcKJ2nS|o6OJ5i{Nil(XiR})iGnt<Aev8o6$cQj#lsQ^G8qS_MI0E8f*`8f zuld#ulkYw;05A|G%0kGzv>j~Q!j`h(xjIeK8!fBh=n+DYDov^sNur3Nl(43`{PL$_ z+bKe%O(%=Os05=UAVv}sh4bY6gs?tO5|=q^OP0gaQ#`z54}16TWBc}pFr@5#L}40z zCfKyO$pu&g2&}$N8^>q`$qJyf>ITg~l5JTHPJn1~0-GR|sL+4Mb>BMpKORl|Kprcc zTA!cWBrL~rTo2o|acqgvDYe>(bWk4O7#Rk~wJ^q@wI)q9ahwtcF(xsDp~i6}X`&Fc zsM{D2reS7@1dD(l-?I~)ED{C_<T9F}fdX5$odG7LyjW*`wke<6l|fds^iE2l=%ygH zDTAv30c5i-mL-=#pp78WHuX>-)9e?%dHsRo4kycF*#1;&)hkjY!m;pt2iLVQMlm;M zh@#V@gU0wcrch|;BuXjLrYHzPMQt%6NhOx!5Jhq0iMRS=G0kh5dYp2>)*^?eXUX`A zAXsE_axa(&twNHd&g>D>8fsoG`#Z?}_Rw%^h`5s|Xcq&m;vtuHu`IEI6C}!_T9-H` zd&~7V9^AGtZyrA#AgtGOcieIhF*Z)t!_7Llj$vWG!v4KYu6l}xl(2Cea(NFh7-LAa zA&L!)i!tY&dl3r@bsWb*iUu1MLeS_V(g3>B3eOj$N}$3TLWkH^%s|Ouadr}w1gJEj zTuD|deWEiEIuUS{;@8FvR@~pgL<GoXJY*9D#s~}+sghJ`5?g2PxbcS%WR||?V|D}u zLHOY0)I8Rm_jB15S0S7f&yqwz!h!t}8Q&A56DwV>r(&FWCT4CP5k(&LdWbQm5dew| zLS)&p<wEYi@8)WyJom8Ym<7+by<EoWvn)Ao+cGPKz;i6-=NCwYjYZ1h;v!D$kn>WK zI;5#X9IF)yXeaY;iI~!WZaRn%O$U%^QSoUx7A==di^E8?IgXmoIpetmVchgWHbR|g z3bh)=f#T?Yl#1@t*5l>1*LJZQ@wrcY_J@L$1N-+7-t=vxo#O>Bd_I<?h=PEJAC_q2 zi17)GIK^h+MHfO8+DuM)1VMn-rtyFRjqi@}yyw5--e+8yd7kfxp!I#f^V@ISIy{j5 zaDT6VRk=D_3bl*SHobYxS?6uQBoR@d2$RN)Tk`I~Y9oHxgj;G<rdx>E^b{^joi>Gg zX{NUld<g_Bc^R8~+ZOnqO&FzU-T1Gm0g*sZ=c(VhdFFFMh~GaJ2#y&GxcXneVBLHF zBa70?WUKW8sjxX?%NbnujLR^wA_^47IE;^ZY}tA=h;ph%5WpRGAf~5ND%EO3RvLvA z;MkgcR*)~*e^M+tpSt+sOxhmrc*P(5#UIzB=<kF<^cQ@7`B#65@|;JIWI*J&@S+LM zf3h%91dr@)B$>2#Cs`37VrAm!T8Sd9A!5@4fK~gJ;~+{&6Wyp*7GMd5V=D?dO={IH z{KXfI-TRn>L2rHIyT4xx^p%d?!$L(eIzB*}W_i&szZl<kN$N34Vki|eY(4|}22L#q z(iHBz6EQVqm|v(Y^I5GEEWmLzzDJtNTR+lL{ppKeICOXWXZ-GOzvlK!o_fX8#x`6) zJ+jcoqo;R>=RQA2p@7-BqfvX%UQE(4Lb#qRp?1QrgZN9w<yxbSO5;9-V<|jGQ!Ei> zOR9Lu#XU*4QnYme;BVglk+DNl)%{88GB7wyoLG!*9OHrQlbnCy#cbO)LEg_1)nbIO z7#VSx*aY4w%n&jL4je%2*a7nk3H5r===mcc2?GoYOM+t?EU9DLGG*H)5a={X5-&}3 zU!3A6X~P4W&-e1wOY&^l0+WZJR_l-`(y0ZF>9B8Fpt=J9mc>gO2$pwk#D~V`RBLhb zGa4ae$5LcGO`+F(_u0?td2Tm4uL}S|2=gbe`t$vspBt~#HNM}=hT&nN1S&O&kv?0u zO>p_spG;Uzi6f2gIgE`7Mn=JQP8|^97<TVQ?B5TSYDy5q2q~}}8>19S9HNpKV-z&H z3pO8W<4Ie#$KX&eXP@OTz7ZDY8^mudM(vs_*ji5BDKm(+<4z!G;{vTfXbmU^p(ak! z<ri(Ka2-uPr}6UY;w!J{z3VaM1HAS1fB6qnGxb-+8idG`q&B&Ho=m1dF5g2GSqR7D z>Cd>3GdGVCRTU~RWV06I<AQ-9u<TO@geZckDa3&TP%dkNK#?fjGz1$@+h~JI8|>7v zE%F7I;bE5z8z7T`FgV(&tUY<OQ?m)v-fg5qjzGu6kWL_2OAIv6D>a2u4Io>>VA~4c zH57Zz{Ii}_?CV79bpznfU;n{Oy}nRes79Q7&IE-*fx|P3!$%@4D?_nRL<-4#EoF3U zf@eJAB6^EC;+i5&p^%e|jS2b(FqXq99n~sgZVt+2s8kzyf@#{2p|%YfUr;DOq0k__ zU?t((%gj}W-bJRpccJN=8PqXDs6`K0#roT3ek%~-*bqjI>LW>`1+HsraygBgO<wt| zEBijxPVeK&2ztY-|KjsAbG6^uG%-RpE6HWEI9{HGs>{Kt8o6vgy`?<$Bn9CyGCayz z=WU^w$q)w`l|Vix86AcGL5zKhfzbN%lBAIyu64u1x71#yy|k<o@s~=?+u8rBV$xP6 zusuVlP5En|{jHA6b{(MABCXamsctk(kWyjWnv8467Si&wpIs`o(|g^PyVhD{yq-VF zXFX=-YD`a8IdE`}IIL65M4W$SmXRUN)a(={Rd_;E4;Ogoz8&0g$NeZL#V<;N#IR$R z=B_&thxQ|q__S~*8^^);ej`0xwr29Q*!ipC`g9KXESHZR<Mp+ohil%uMh=4ON-Vk5 zFk6C=Xe~iG#T#y(e8r;{0ZR|+ZEt+{uT4#tzdSNHfJ&<Dn~r$e#iRIM5h+~|4o0}_ zJ`j@277*IT&u8c@^#eBNJZUQ#&qYOsG%`4jWMl+JHh|}!;_y<lm{jYdEPqvTX%{hI z%xW%R*61%p7Zb3X^4Codpe-h+6$Bwozd*wxaBV}z*Vvipj%Q!lb4e@Bj|%`xT|oZ$ z<!^b1u>E)Ed<$V>GWiViwV2Ht25{^gwwFN&7o`Q0vnkTfVhIN+Yzp}zem2LJGdI%P zmq!JVMg~g?`UhZa6taa=1cYYwkW!7RA=L(guDt}-vI5p=26CJZAl3ju7`7^s4FLGQ z!po*S^NO5!)BtG42FPYJ<`uvHroTbhuX9{YZy`%hDMK}gNVP#~hiooSZ~q9=a!3+b ztZ8Nz6Z(7lK?|gCDD{;XpBQCq;{a&@Ndyu@Z;xPf42nG`83-)^=(@Fb7i&3Rv*D!a zP#{7VMeuk5&;bN#dQ^NV1-1pgr}1-!#qxodz32s-KKrNv&<cWAzU(cponNf}?}33L zLp?cqOF1f)8c~v<jbw45PH$fy{evUq^L?Zm7Ai5*a}kAnFTUfE#L&}MWOU;Owrm|m z#}J1gwV_xNjEzE1Z*wt_Qw)H0bAWd3->kL-+HL=10ic`x-wpzROs-KMk;}v6!G<ry z_rcFW7#z9z%4ZHdf5|iWm>NU~A<QdY`sQC)tku6UJk&4y3NE><N4*xHQ$;qPVScg3 z!hDrtsh7TiVS0N9u^o>ib9Ls*DVF7t_X}t($>g$ZI%AxPO`}L5Na~Gr=u#61rQSwb z+=&LjvJS8$3Oe-^I*vw@-O9r{)&{f#z^wFcE(L^E0isDo--A*K`UhZW5VLo0qtwkv zuxv=<#a)*_qqJ>VKYgq{f({=k^YM@TUC-Wwv)}ey`>B0JmqIo}oWvxFCZF@k<$Mkw zS)f{tv2B<Bff0K82gzh|lxr!64p(vP3|YT`C2btnXUmxrjE)cC*fvS6@ymOAV0;1! z#S;Vqv$D(B3fsRG2xfKT$rXhntsTX>5q`Zffc1!gmiLa0!{8wF^)+sroJ1U)1YFRm zAt=ure9p6n#+T^+xHO46bnq}^<0Iw|Ui#+OXrunB;LD6HG=)+gZ6Hkr#hgn%pJ8sH z#==4!gH1kPWO!sFekMnv1iSXklF63H`Z+9NlgSm>Fh0WA#z9=^5Z4U?!Pc!XyrDBE zJkbC+o>sFRBY|xSAnkF0E*`*k=TC=2dVArFGoa9-L{HBm4jl$<L2aha%;e64zxJCK zJ-z^F7Yi?Y>07>+&x&VN7G}iI&>-1D2CW74dO}a$BVWi6Mw*$~GEoGcmtk~#Gnq^d zBWxbpeS}hR2-~)?Etj62e)7c}ThH2vNG<AR#WSw3@ck1DfQ~vqn-ZuytT|wgLjgP< z?SC!VFC|>`6v*dS-m-rhF*64<(=loF2$lH*2mj~qK7APgk9(`w<_BN(rq{l^=;a3Q zs0H;igRsuvU_XVTO%Nw6P6p&M4jV^%NHrXpsj_?L{dj(c(Xq{(b4DKq#jd?`6pQ^# zA2~=67pa%4_;!Yko5t~d>y(&^t8)H3<n}F<hne;y53@1@NF0lWwaR<3GFxbw_RatG zl&3(htxQiFDA%AiZ<w1|U~zUDPn6ALaReRL*!kci{N2Ytw^^z5mSRp1S(YH1%MztY zvonXrvnBogy(ndvnX9t65R%L18Q*vYo}VL1G``b|@0Ktk%iz!`&wo*NeeLBRgB8$G z_P6-@mFnIfU|q$bU0lCwg?&wzu=jcA9hLd5V{!qp>wd-lLkrw{?_E^ON4WIK#r^-^ z%YJEMiS8%VxY~Bk7C!cW-nHldeB%AXmB4*crDp9>sm3;fjBDX}g47r$r)Qa)Utq95 z%a$$u7#;G!eRrbM8e;=vWV{|U8F~kXdEN_75b=*G+E%83wb%Qtn6+)LUDn~wmF;~8 zTbfjf)_#U9Jqt0gX;Ww7M=4_WgNj|d5ApCL2biCq!*vqswQ$9~C*@H#(RRNOV#}*u z{<cdCdHbWiMf({U$3j_}R4bBHbNI*tj%_hCnB%Oo&Ze*DOlqNvHa`7>!#w{51>?9U zFQKHX3}_Pv%Q=4?DumlBgS)YL(}nG~R}n9X6Jua>6gF<`tQOq=0PNa*gq@E}GIMx8 zmIxW>vso-xLeui&PU>7T#)!Rp58l3c^Z4a2`Moz?JUU!>S1x1!x18^gq$!C~#A!-4 zKSFQMIn+W2WqgK)hI#Jui^lU$JkgC=hfEfoaj_!Nca3{n3AL;e98F7T#BfZLJ)4FN zzar{qU|;~YoY7f@*s%+7$L;&L^WOXLT#NJ09$?3g9ptmUR2PDql+wa#7IvO=X1Zz9 z7{(ZJ<jCBeLqq+){5!w-+Og5G(%<!!ykE_@HWTCLQpj(k-X#9W=m=L`l{c<;QeDCw zxj>8lwjvvN1qWzX_*fmXUGaG>C=g<0*6<20(DL3=sgVZX>8n4o4{`I&ySe-R2PqbO zCN{V{v~w3i*Gba?N}11EEmggz&BBrAZF`>e`q%yG;bLK9f0%d}<1w~z1JAzdB*}b( zXkB8atGTC-y~vbqi~8wq?%qdX?qzdu?zx?bf8Y?}x^L~}CwD(UU$4)m4OtFNPxHvG z?VPc31Hujtyz^bJ+Sp2So6}$z6N&4ux%ak8S@wsCj}ac5w~TY;v)z+gaALa5)b-kj z%cftG3rMqi2AfWz;~3`N(v6u6oYRH)lhcTA-+X{O?|p!gp)7+v4m);DGCjSA4gE!I z&m|1Y|NN*kf==Y@|K^wPm?>B6{zSPTGn{qy1eZQtp4@7qHYZRgkKgeoe$ohK9MkF3 z&CAz1as@cE%d&b?(}?T7wU0aQdVnn(dr5;ucI`Pttv<_!{tP2S15C|KS3dgD*A(07 zeJVMC`Pwx<=>Pf`@7TXsb~1@_v79^?J!O>hpCrx6=R(KO{yPYB(Wb$-%l}Tgz$)#3 zN#?g{`K_a;2PP&u6aVlu;+n7T=H3T(aKTx_?A@PH^~nGL8%#+=K~%GsAPK3}ry1$b zGT4`6c5ab0uK(_1N(z0vXZ>|wyY;zoXn&_xcSNFHT(8J8E+1j@7IE@Dd~NFyu37EV zVL|FOJArkP`R!oq=HwX~g5fSp?Hrs$eC2BovupQm&OLLG2OoSGFAG`+q~Rh1J$dT2 z8gXi_{_x+t`hRw!wLH1A%ruFA+Z&>~eN(mOibQ#2bNxK`c^gg*@!L$mV{rn}%|XQa za`$9=E7`Vo^s=S5(AXHJ8}aw-M_m2oUF_Sxk8PX#xc`Bj6nkwZHuhqhkWJ&m#9^I8 z8HW13mrfo!(s82OCzJS6N^{*cw|}Nywf-Os9a21c`-gbWb4n*a`=^y|ZS4YDO|w?n z-OczHq75|d9l@50JY`#az_ciPEgr_Dux_c;`3pa|(}*u$^8j&NX2Vd9?GHW7=va=S zfgDE;A7bO!0CUqvh@yy0#y;y!Z+&^an_hd;M8FrW`Kl<1jki|I*3-ho#R#9_kzt<m z+&rFl3X?&X)+JWm3p`h``Y!7WubcI+q3j6(;~OEH?O+KSxa*!&eCexqQtEL@qbgI= zhZx(CqrW#pr96vcL1kf)xw$fyE8hIU554xU*D`8O1^~=;-?+6`r1pVw*~-SLi;+H? zHjnbGXZxqTuR!ZEw5=d8W_<uyI$t7??xgK^5i9K!ma@@{u#?{-Rq&%*Lh<!)+`*aK zMmVr<KXJUk&_I@+qDvIalO!?qN`=Z|Kq}L(eE1`8`1ND8l|9iSz+8XrZJS8!Jqs0! zRQU+Y=bUrLx#Uv&)OQ$aI)7Ho*ki>4Sjnna9k=`NMcaE?DBnsJ+lI|sI`f4nMttX{ zGB<tyE-t+A3?6u32N^G9sJ}?YH$?RrqA((gB7$l}V$}CP@{u?E`eSYo@mR<8*WUJQ z6<Ob_RBaONW7!!le(E^qo-a?2_EM&Ec5ZvE{(3>M%E{j$P|ztbl*z(|4V{U<P)2<1 z>yzB~;BL-6XPgHg+(|wYFf>rW5)rk^G;y4O5`@)&Sfx8Z^3m5nXT6;LgaAMYVQ%=w zZLf~%*2n9CL#jO-FVE$dkFx0$YWnT7pDwa{6)BDZf+etY<FulSeUE{G!A66tZf4%q zU*5stnHhR}JoX<vKwnAG*Hc93h}oF~s5D06Q>#^pm0B3tlsPX9<8=$x#}xotYb?t$ zH+=K9zpgFHH#S1K9+_;3XFh9~4Wp;eq7vQGvX@=Lrn_Ihb>=TSbvl8d&G#$Xh(9vc zSd*aB*!~dWi(k2$`NhNJvssJ@819o~Gae=hIC6MDQC!EdvIJ2LrB&=?%=qj6>{aS` zp2On?fG~*2WPS6kYj6L@>VkY#5H*&R$rbx})|CSc4xdKL$uyficFM^=mUE_){lB7@ zPX|ALdpzH^V0fglkku+>FNGi8S{K(|cNbwaM<HLNr`MvC6G%dIROiU_LBhC(#3zXp zluoNy@!-4P^Tz0SAI0MWfNCY6P|TWdef_piR~N<0!q`C>k7CaNS6<mi|KRCGe4{&8 z=XR3)W*y&Lh?VADtFk9sroI9E3=DR89+fKM`WvVD-hbYMlp)1pp0N?1tPgRxK$6s% zn>kFXLeMTCNOg4N;rRm_KL3diJ*tL%_Tw@03&pIt{%g1WOLbBHUJ$z&e0qBOdFGXU zr@UWKH+O!gx;)xgKkFp^GVAZA{57wYicl<e59MBS?Ze!^{b6h;C7<&+W1@sDBdV1d zOd7H{H-{#{wX>+ykg90^dp`JQ6Z3P6kJ^}iOaRbYH`)GeU#c#MUk?)pgHN${fM;IW zd-@SyH=I7J8a2>a6dWTt=%_bObf*2Xejs3IxHHRF3hsSCi?3dL7t_--*tTL~yqErx zi_ul8<#}`xQeIrd2t^@ZA`TS^)&1}Kz@JVWIWi}DdW)PA09ck~Zv5tL*Ouq`Z;d1l zpF*jRD=t5MiLbj<<#tWb=r-$H+5H-Mf40+|<<|rF(XEmA#<y-qsSvHJJmtc3uuPpO zEE7i+(x^_YT1QAI6?;g+lrXODc;|axb9PV<g`atBsZx*06ZoC$Z~szdo?oj+9tNLm zzL%#zeUQ<Or!Vo_OSM;I?C8!FJDqCxkEJ6R1H}?1m+Soc{zHgw-FSdI@7{@!DSf>b zTQ?7(lL}hJ)a&!a)e2#h0E%KMi%wy&JoCffc*%di^89UE9v_qa(EvaQVQ#$s*8f$T z=biP)LmLl2)5}vX9_EZQPkqPGc0WJ5nV8X`PJh*=yO@Y{-**}V0~o85OIIWAx=ZoZ zYwu)!p+XSO^R%aICFdKGxPm1V)ygajb92oVO=Eg{vsl7reqrX5@BYB+U-fvp?~fY* zLI`u?b+=p<R=K%WcS*I6;}$vZ{87$5Pn_~jq3y))R-B>N=+(DM7g#6ZjcJr&m%2nY z=NAz-+&IY(ZrzDeF|L<z;dvV|X$?byG%=O(4AWCHC<Sp`rLQ-K=Xq4B<=4LF18?}) z;~l#>E*+p!4!G%t|2i|Ob8`?lDD5Jx44XC$vw8DrLj0zOZ<&?rmb9#6wP<Pg0hnWZ z|5`_>r_pC<l>{>I@FR#XedS*E95{kj0h>4VFflqp999rQg9@3MndHdy0vJK9Hb-x7 z79j=Y%Hn^2?+4#_?THB7ts4Mg5b?uXe`JX$cWbR8NwovAk+Z*PvrVCR8qNA9;g>8r z)1f-I{d|Ro(5%l2Tmph^H;6Agh`wqKam#HruD$-p)aoI=uejhz8}Xf#II18>&`FKS zLkF2(2(YA}TAQI*@Nr!ys@JPeegB8va{q~n+OAt#XR^Mr;_R1#3Vn%oFu3INJ&bS6 z(AU>Yg4E3x{N^Nf{#yEfx+SdJVG+mn(rn$0)wlZq%u0f{|FCQhdiz!rUz<jb{ujS| zkbl4Chg7Ny3=cb8`jiP=E5N7-qv|Bl9FIJ*m-)pA&$Wr81&Re9-}m;_YxUCm{_4#S zoXC*<x;enL*L?T4lZao5m4h)Zj+0@-Xdi=vAgx9mU6`Y3Pl(3qEKOVZaWCU;b-|ir zHC|k+CCjn;@pf<k2pX~bzP`>-uSbZx@78?#yZ5kX-z1Kea>->|@kBxzSHZ+2X_X|Z zv1jirMjP^3mnd8yoAt0AdB?lo|N2WRmD&lPNb3TC5W?K>^&ftsT9qi{f^;eM^wHZZ z$YdMcv|0-r&FTe}1zqgquHfj#Mb>Dq-ifelDt5=ynso&?TwRL2^!`2j5qI6S$ajBq z7nQ|DHjeeMb;|%rR6$#y(h8W6YPrn5{bd{*iUpTAu3=jeZPLGe?+4!eXD2IDYh6~r zb=Q9XS`)gzRF6DTmBsN2Ol%rs>zS~$!gjaB$BxyqodPOdT(%s;1Y65aH(j!G*42-% z!?~0VcHilHR|CX-_Zt4=hxf2+?_qQjaLLmevtE;;bx0aju<e8c2j-cXsglh)WPHFR zD3uTf_2+*0qi_4JG3Iew9QrW<K&6TsZ@N|5v54wb%L>yB8lRrt5hf-IjE%RIHnYaE z>TLixp5M2M=<P)7)@5U@>ua(7HYIS$snaQRYe4LL81B1&jyvwi2t}Y}-1-*l+=r z)Dc3FBsI_hQp7y4eTtwSQ7m~_BEfMi;;0^{X|nkvAA9@c$xhQ>697U8^OdW=bxp>~ z|4Kc~kf;ononvr#jI+<SaNVP<U#@fQyjDN@v4GIcEL$=Ap>t#9E;)I}(|OaF28YWR zI&1hd^N1ZgQht2bZtj0@ACiP8UoeUzQiM>AS)bIgWX$4Xne7iwVo5>P7g$z`@419g z__ch&|Mhph=XIxK`K_)xK$<GP@XufAEfq_@QZEZIR%6*%*T?rQtft~8m;B+f%Nn`e zW`A2sb$ebNqC=~+#_Dc}hLwkCmR>DKV)W7Tc0#wa{8gapVB!@^7`H<|f+$7o+-cac zbAj7`vYo@zb8Oo>z}Rq}I1WIhq-h<aB5WD6W9NSM?wh5M^KdNH{CtO6z4p3~{oOl0 zTCWGEEH$<(0363QSAYKNmzxxfmKb3pu&^DMY_>^!K*^&kWOZcyodD1lDO)kk#Txp+ z(#qh?KSp#>;PlZ%jP<r!Z~aGpc6GC*rS~10LOk?f%>57U=AQd@QY`vhaoJ`}8W2TQ z1QA-r2on)TW$yUNLsTm<eWg6E8)G{HgPgC|t1teCPrmoIQ(c?6rWN3M&WE%~5yC?V zi4-=Lw8`b0?NM7-#p==xdrdB2IyhF$+M=MNOSThh*Xx+=Z6anZht6UR@!)pNp1rf& ze#gDk!hk1Tu#rMm5JeSS+n~}AL<*+P<m4p(b;|?fvv~#w3OIISmCYoPcl`Z7UU126 zw{DSt|B3gU`qKPv2z<{Q-j;d#^Iud$Wr#zMIQ22YCztQ%yeH)vHh(+YmtEG(T|)sp zUS-#GAY9j4JF~`nR<nED4zBD-A$ILFJn~45oe%G4@7{g%_2<~Uv6ou4jOR&I8X$$i zsDL!7@{@ZW;=ukR3=RyC&)Y~5k*2BETE6*{pMLL0>h(ZmGCrrn=*j`kKL4C^69ulY z8mnxIqvfzmuGJ;S53+e|)}a7)QUqb$1^H_MU_CRv{WM?bT!o_y?4LwD{9wX?>3OCn zr-_pqPq}b2Nn9n4>eyBS8Z1&&S|tdp+;;nR(nPa);|5&cpjAMU$g1aMMnC$uZ?Ash zQ|~!Vmfc<h0CAiUM9F3mrg%Aluq0B0MxwP|u8NVOLt~^)BA^QgXea!!fY2>KW4aO9 ztmWEncGMKB&AO>M*tK18U}}+>>3JO2P{@Jn_{32eDHDXz7*f)>4yMlBLXDlf_L9qF z$PZ?)tdum3sRiOoPkq|Czx9WI^jn(KaM+z?ziZy}_7879Z)6*mZDFMXtp!>cRGN~e zUF7~cW&bL|i|&Dz^%B)|Jz1$cxGwZ`@ZB3=wu*T8A$WNA5e^-i!E+75#E8@&Ed@ej zTPZ4y3BwAG)zJ3m7V1n*P1E07YOJnKLZuQDN6A&6{-^hR?{7aI2u{<{RRn0Qhwr=V zL7w%TXJR`NtprLNj8>G(ibBC!a~YIlIe^yV3lO3Uk&iR7U;w9~;Nf(T^K$`W*A94S z`y_kzPGT9=SRP&pEXUw@AcZ1LV#1(;(IKv#5CjqBYMpYqLQkoHM4)xT{6g(UrPXhK z@-y!#pAJ2k9u)wLFlv6TjBq?GW3aVE8Bkg?KU*iCFDxfSwmO1zOF+o9hzL#d8VzMp zo1^FLzJXOhkSur6FfG7YPs+9>8`-#-+-fE<y@=SgD`w~RX?E@2k4Y6hMGMCfc&^0r z!IGLJj;IGUqOgMRX{3w^f|yDzBnSdL$H%0aauBdsslNPk|NQ>X96mfNKJm$SpVq`* z69ASa7K5P9p4|u7vSkyN0$YJj3}Kj{RKqvEWV>szl8Cwk7g!R4LN(4+TWx(;9Y7x+ z2Qa4b-Eui76j!b>pn-jd5ZfON*uQ6reFqMaB#OaO79$Lft;iQ_90!s(q`FWcs4rq! zid;^RBz2NRQ>z68VS<Vq*McOz-Lb;wfA(|lul&<z-zUUrPx>_gP%c-*M?U!Rot`VX z^+&fbv1Kc^Coo2%j7BNNfqiAhCyJ~5|I6&&bg%|Guzj%(CGdD3X2x%rbxup)fz%*& z><Re6_veY~Rc7X9m|rY2v0)G?3~^GYShC1vUE(lgZm~>ItDw_>QprWim?(^i6Gg2S zQm-k3T7njYQBr^1KYjN7|5&Xy!nZ#y#9z}7@V2+S|DrHRf07u7@$s|RFus{HCdLWt zhA0B99Y#irWV6n?W&fiAz?u)Ur3_n}#xg0zQX@$N(U1^9g4neu;M!{*#1;~zQw~i} zv1NP^DJ>QjD+~{1$z=se6tcK5Pf)L+Rfy{-N+p*#uA?=CK}@xpP_4v7u_7_?j;EbB za^5Rm_lMfHBtMO#D*z7d`hobshi_E9y#+Fbab{-gT=A@DGSoXjSXV@mKx@g^cn_X$ zt=9fK5dL@pAjBF(r`gacZIoN(@{rGg<3g;U62kT!Rla%6UG$W4_?ZmVT8*BfL#4b( zwQd+0$xz7BnDMhS&1GX#lDNV^zmGN%N-5IBP_Ly_$`O@D{e5a%@pC@$>G%DJpYqWa z073}!C$D_#jgI5IAP93vKhLI(V?6tL&n2lvM0HIRgE1B(8%p>YtGfx<Wxu9Rpo=Il zrm@tkv>NN<WU`G0iqeKe!)zIT_@ha7Y~M>?PYy5R02Z#3aAbOh=_8A5+1yX5U=!Bs zEY8mXAW;NCnS5U2dzv&&NK-`=X%^=LDwUXetdLgxuNyZFzwDjw{L_@5fw5*d_~kEs z%SC;~+)r#T%i(E5Z-0r=(Jeglsw+t9ny?lV#Rj7#`Fw_fA-@r=6I}?uPE)Y`eyt%0 zno5h^VD)~cQFUWvBT#wo{T1%N?=aO`jjSgzIws?LC^WOvlPoM&nV9IOuO~yLyhy!L z!?FaHG{j*QAwmiT8*NgOxIz3{C1!4}PPv+3EOo$fdH!cU^Ztj*<*FzYa{SB#-~;dZ zn7#Ai192%^B9|{RznHS^?5)f!7@qZ<D=6l2MD>IyXe<ydq)oAup;UBMu<B!SfhAL~ z2?VVmiXlmw;a}Ns;J9vs#Y-EoAOUW_{UEz{%@RccM#uCNGc1-D@w^;Tq-Y(`Q_7Ib z*euM=6GsuYC6Q8-CUsO=Czlgg7Nki+lEkDbEG~vjO_vGd6x$Uq`PYB_;J=*iHvQuc z03n2V<;&jm8<y>U(Xu@Hdxps6^UN<ML}`|Zty{S4l8ew$LL4gMNHrEvGLlTj#q%sY z&%(9^mL-r@ORT?TrLERgIg+$-k7YMzyW=$WmfP5rfXS&EJ9kX+$ivfsMhJ!L7;3dT z3ky~H`$`NCdE{~qLMv+3T9fc#bV8B@U?MU;xSl|zszG?ANfVfvtulFJ5o64!FS~5; zk6-utHz#STg!NOZ=sjuxBuUD*Z~VUa@)vKYDx))%s$qO=9N*7@%ux#r1A{|ce#NEq z_Vkd1F)CIhu|g@+QiLH92n@2RAj)Q=#OB_TSW+UbCb65F?SgcmT8lU`TV?O=BkbEd zO+5(E7^F1x_hr%Auy6k~eWffLhO+eadBkBtwNgQ=6e$f#g{UM160%u~j4#nfktQjr zQfSjye*M6qd1mIzKQ0yA|MBV1d|>y_;;dgc0G7rdzw#~b2*c!EqoX6tEhLmH38m5i zBSQmt`63dJTsF`77hizqW)MhpYS5`drHwQlt&et75(tD8SW<!|ux){~8?4<J(^xn{ zB^;hw<o<geA*{z}t*FHjT3f_P6-R0`hB!^>FSwkwbqLE6)GBp?dL6A|j7fkLbOI(J zla*w%4j9wW?$e~%6w+d@9I|Wo)IllqZ+-srfBl20sTnam+|SSYSQh|<5at!X|Hg&Q zn+Hl+-{ATMs)5J;$&kL@er(HQelcNaXn<lq!^HR~nS7p1wt(%qARF03rY-$P8%?S- z(^Io7&PU81S)^R9P_0+-{VY-#G_Y8%vRJ8+q$!p#IF4Y;ra>k~i>NfBUJHoA0G*~F z6k0_X-7x8lPVijF7yO2Pp&O1YV+;mCq72)29S$nx>K|SG?;rW+AP9x;d;GkNbr*-e z<`3WcsxVIfp^*33GSP=+c_3Vj@Ti6s`zC8t%L$oG4%_!}q=Qn1f&M;*hx@Q4gkemY zN@_twrBZ7Y^fXg<)6`(wHbGR!aU5#(ki}}1Ovb0TkfFC^G0>OCmXIV7^;!+fk{F#J z1Xz|p7==<1Vc00KwxlAL%djN7jWNp`LUP}ZL(I)rU-89%|H!9*)>-{y27nO4y!@qa zx=9<JTP$SQG+HE0B?t#US43J4J07X9?@+*#&mW_Z^@&4GkV>Xz7Kmew=lWzaS%O*> zV+^kEA*6*cid^2Mkk1oE31JYB^=*24d|XFjv|3I(H%4JhiV(V?Hwc4P32{;<3Tnhr z4JpC%Y%Hsh%+l&$Fu?r}O;M@VUzW?~|Lv2X_{%s+QeoQ`PXJ(zF*`fYXa4?QiaT~6 zTu{a^F`OriQfl=&xoiR3^Krc_`9d$Y?c=*H2%AJ{gnYkB~NC5JE1ml98sGG)<SI zI2w&(Tgc_cN*as;6vk+@N}Gj<4IrpABu(Om2+%1~N*vp6<S|&*GU=5uJoNB1<x22- zzHfi&Q=fWYcsiwKo%R4&;sSs4ia)<NOw5ndB;w3Xee{%a2n(ciNtM8HJcP7SN}{#E zc6=<$LRvOLN{-foiH0@M?5}1xn$~MjU<}6S<qfSds0Pa?0j){Xm^h9boidxia$N`4 zaj<L)jG-Px>^rn@@bFCKEmu5k%m4e+H@;f`yt4bp41gsN{K4<P`AW~v{6`^YGuZ23 zHBC7otY-gv7qBqG0xYC-uxz_A^P7&>qpZ1+Zz$x^YEsLRU^J<UQE7tKG3W$iR0AMd zH<p=8QdHV-95}Xv=XqGRL;!OOHD>2)|GDSD{9k?bD<Au2bFI852>)0Cu&fWf<SoAx zDfP9p&KR}|8Pm)N7Np96&{)Dj8H12EmUPevY}>(gJZ#57V1W@$7H`nHQC@6NO+S3t zXy~`h6-3i~Ylw_gDYVj9mWAs&IF5r-nsOzm9-LadcK>AM_22x)$ETi{?I!>LOXDBk z_hEU{kN57r_@d1d#jI}3`sLLQk1AbD8hGoB2Me>*&SOO^pyj^S`tqjsu9RwQ+F)B2 z(y~yg(T8U$d-fe%eA~ZY{Wo8DVz!?o04((e{@ves!@Hh*-sszNnN(t&Mgos$N#hZs zF~f~%h>2xtw<gNA)`+!g?#=fCN-gOG074y^tyT_B)js%d|M#!|3LuUX;W+jaR6SV$ zSen^F2tN3s&x`2;+dsBxEca^1@tb{lbX&8`l_uHIbTG4m;DSc(VVbICr;U`7AXH2q zsqU>*<F{RL*^|C7apoE37k}YO^8^`BApn-Sfl^quZC?4xcjS8u@`7UC`=>(QJy%)= zV?;~!&e0@5(>nW`38zY>D5cTb5JZY{HQ8Pdl25y?^X1ucJoAOmf2h`oQzXK+pP22Z z4FK91gAjt3yyP#6TPKPer8MViZLYE{xlKyWGKO)}6zZumsnTYz*5;8kH4iIoZWBU0 zRIaJ%eN)lFZ(j3PNs~)FA=7_~0I)pLG{te8<6_fFDIukNf;vA70C-}Y-s6dB_5=W) d7(dVB{|A}{iGK_`5CH%H002ovPDHLkV1nH%iLU?v literal 0 HcmV?d00001 diff --git a/ui/images/theme-default/icon-opensuse.png b/ui/images/theme-default/icon-opensuse.png new file mode 100644 index 0000000000000000000000000000000000000000..83fe4d5df0f59b52dd609b3bd16838f4d2570ab8 GIT binary patch literal 3046 zcmc&$i8s{i8~@HQh9R;H+2W=}wp4SGHNs%*jK<hz5C+v)$1<3yWFNYOrZjd!4B4kN z_OeFZ5HcYtdl9Z~{ibt%|HFOHdEU=?pYuMSb3V`eocDZE>}`>UU@|ZO01jDNm^yNi z@;mtXxO=xDevk{iVJ4Q&{M<$6_f6)W1&9`|Vch!@zXN2Vd_Rhtlnyt;ggagL3n$@2 zuK*+xNrP}LD9i^>yrOYE)c^jvz6<~e`dFG8J4ZcOD~QdK=#}p`3e%S;Ndc#V%ghT$ zp(kOYHqsIbHl`V6$|_^dh?MK%3Wy^%WlY3rh0i5oHgAfP%>`|a_nhlHrIeClN;cg} zykmHFk4@o&i<*6i{E8gydVh}9!aC22MebGv241g-ZBHQmTkvq*>sO3Maxs4<s}V5` z*oAF@iE?Lv{{IL*&j$0zP+`3;Y#dIiP%0}elXinK0a9&5Y-kUT_#F;DU6<liG%20M z*2GzKo;`8|W9G0zAyGa;7}t5ufYKTf)m2P_EXSS`tv;Mk%`C!iV?dSm+hAevNdU=n z05ayOis!-b>Psou1rgq>;ukbIO?xX=oc%qFL_%{AAvB_;Rmi{!P?69BA@Q<gedeVw zb+BR=?8Aq>C`Z&2(8WY=JI>sdS`S&TgNfg%Z_#nXYt}7N6quP2hsEBdjv<yb?79PS zhMWA~w?Y!&6Y*gEqh3Z{sBiAymm<oiVT$qPUcdvWP(Z_l;dwO2j}xgr{3XWu)f#W1 z$r#L?k1RV`^>Qg(>MfWA)+P`<Uo>#8DFN_Q5IcNTexql*QE1<_e}!$qxrkfQS&Qc& z)Q6F-&Tqnh3x#O##>0Z=oPFq{N$ij8p{^<8)&6|inzS25ih8LbN)3VLY7?if)Q6EK zTo0v>k3Tj1I3@~(I1n{7)sA7rOvh$po(iCqX?#C#z&mZQbir|#cM@D`A@H^Ckq-vB zPK}7LH%~?L4)fBzwc{k*tNYKixhKv~Om>C{>nN^S7kvQR7wPa#@9AkZ&ad0Ba?Py; zd*d%e@#*n>N#<yqjtLqcwgzlrH<p>oFiB7~Q)6ukOW!Dc)QV3tR*`V4wx3Cs@7e3y z7y?t|It6-oIQ;8D*-ORETWc-NFTZC~uZVUo?zKHfbX;@PkE*?QJG~jLYz|HUz7tI2 z46=UpFuX<>{G7^1na!U0E6W%%VUQ@WYD+ViUyQtnt9a=TTy1i3Cvg>}LyiK?)g%vt z{Acr{mjy?5(u$Y+3d;(!g)wr!5Kk57Oda_PYkdGXOkhSZ*r~-TMmR`0PW&lfvU?ql zh(d0|HhXXBuaqe2Y9`-kp>*|D$Z1-jzCFjLS4|(em^iPqn$xS@aRsC)jmgc@lG6$5 z`+&-YI)v*+T47%JAAT?w>3eXj=6PwB<mx=e=1m!t+c!vl#_lp)4D^_NpPflz0A4B< z2?{GSu0Ix#No(zfU*g1=q{C)|*c&ufT^?$h`%b;@oqK;cpu$4c&97*1r{pHJe=~#8 za|laME6iRwa4)ob@bk1Ld_};W@!TTO+l`}ALyS3*b8tJ?Zx<^x;QV{ky>H6j_H|j# z?M1Q;vGkU2r<|2}iSk6Uafcn{6s3h?P`?5y>k}b?UN<5JgU%|S=XS3V$8*g0B;;Bf znHHxXs6O0>6NRUaO|~XEJsPt6sz$t%yTl-*zjOp%Q&rEO9y)Yv_1lksy3C!6mNPOU zb$MlhY>^1Jn>)Y=be%^skPy1HfUnG5LI)~}bIHl_dILN7rKT;R$Y%+*Wt}A|5|=0n z;7`C+ES>SUV~7h+QxI3>ZJv3b+pu0Aw!tK(Gp`8|gj?AA5){&LcGB~hQ53oIZK~5Q zS056Lhv)r}KNx%_si4aI!%Gizsb2Ngg2mCbcJo^qCc>0itHo%0RG9T+xbGN`^Sd2= ze)qDn=&CgG)%tgKfGxDI{A_KKIKaxYh!ts-X+4345Mn6jXelN?ArI=xqRabqM}T-s z|B94Ba{A7{Eguy`2o?u39i?g82|!X_5E-7@fPasr&*3kND%8GfS5Jbo<tLAZXsZw3 zbwwDKE`#PV9e)SIT-5vow0b^g7q9#Sn(O|j&aK{KCJCd^*7>tIGk~CV-a65Q$0_h! zYe+bdMipU_f)a54xWgWGY2mnvm<_x~Uqbg!b<di-dO{!IqddEJfirZgk0CU}UW(n} z>*)_zz41~Eo+^!{-!t1U_lBlclrr^3WrCFson%eDB6GaehX*ZFwmdtjkpAZ2z)cc$ zSN0iN%|?U>+59H<@_ZBGlf*}(qxq<al7l($rvQR3Y+wqOpA?bfd`UPTGQ+Djh<sCJ zzuo!WM2Xo&A1eQh{*x>u^isv0<xnch?q+MFj%S`GuUFg4(F!1M8pamlgV~FH?@bfE zp{q*+9;#{!AvM$C4wt3T%D27ywfucHURkx7p~5`j`z#27k6PTbUnX#~V=Cv`5A-Cf zLZaVWDOIbuY#(6#<sx7QB)N?5g-l%!B9sFM-u-9qe)WY%vknn>?Z2!qZzI!4FV-D% z{N;&~%xAfNif;uF0xKZ5(WUgX-NO>0&`m2Tty<`am5hC4Vy>SwQIpB+Ld7hW=OVz$ zP5NyO%LlEu^rZp`ejgd#Sh`&kBCH8<%G;mc(p|nzN6ag`n-87iQ<Ph-dMD?2ymXH! zo1yw*{Q;nrqvJ(xk<ZWakAGy+gm_{p96BS*!Z&JeJj1kvo<4de+eMU1M-{KH&-l13 zyrEJ_M}RTd`5&9b8+E4^rC*y(<>48#y~leyhSi;HW2JVSP4xxuSw|bkDW$c`*ckA> z!Y<CD0$<!mE0<T=TRRrDx+Kn9!BZXfd-g=)gSsM=#77LWh#GdtdyQ4E#%p+JJYt{r z*a7g=I$yL`iG>oyarCV*8xNUdbn)p+jw`%k%dO5D%10gdTo`$xShV_92UnbxM{)dP z?4B;V5uxDi<?zifMa|#O)k}$6ZFJZ2!1yOreYhW^5P4Z?iyBT#bGx5aaprAU%bloO zztEh^lZ68&=R~4uJ{z>I4&$2q*J$OAtcZf0Qa?}t;bBGi8O_tQkik!J{Q2hl8W*7Y z9-DE_CJ%*iPm-n8hxNGsSiM^{;(m`)o<VYm+8mKX*3Asz6HDrS)Q^Q$ML+JZj(#kz zQ83ruzf=}3GG5C!q7u@fO+>CXLoT99>Tf=;5dV4xVyhmiSWu9)k<mr`?A?e^Z9+KJ z*Uko2F1%5D*#15}BDr9oeCkE7iiFa1-#xUkpq@D>wrR1L-qj>y{4R>pF?qLc{!YTf zSZ3XM*URCvBa?}YQA!?{C~ch7do5p0GN5WXFGd`RwBh*&lw_*@%pBkiUVfYzP&cLE zVAsGea3HB=)g&QEO~KOP@Z1ULo<Zcg$Iw|U9a`PeP+w`kDxx+q{&YInt^HVaC1;vB zor9{EY!%%zYa?w{*{=!?0W@n1&%&~h3;H!0z9%S#lW5kKhwm(9_Ch1T`Z=qxV!V<$ zYm>A1=g@f<R5s$z?NY_Tj6bIFO7Xj+rR<TRzsIesF13whyQ(F~m1s%I_S`u^0#{sd zFF#f8Io)js_WLWIx`^eZVspa`?mDz+-|BJD^Y`%rUuYZ{WI+4^2<rngns%qY{G_)| zl8i+4F3Kf(ys}JfbED0EA+vJ*LQL8#gb@n{)VTWVeE-Vn8Mq79T>WljOT1hDTy^rb k`wyDue`PEG?`HRnhNAAT>MrGXaXmR;X=ZC$Yl6G+KaKu$s{jB1 literal 0 HcmV?d00001 diff --git a/ui/images/theme-default/icon-setting.png b/ui/images/theme-default/icon-setting.png deleted file mode 100644 index f8cce62c440dc1e25cc16c4d13dde140a75e4b46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3664 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 diff --git a/ui/images/theme-default/icon-tool.png b/ui/images/theme-default/icon-tool.png deleted file mode 100644 index faf1880f955ae41ac23082e9cad637fcbd40341a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4466 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 Ef_DmS1poj5 diff --git a/ui/images/theme-default/icon-ubuntu.png b/ui/images/theme-default/icon-ubuntu.png new file mode 100644 index 0000000000000000000000000000000000000000..d92c00f357b6b0e1542413f6aaf0de8ef4b8d130 GIT binary patch literal 4818 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 T?|XFr3GiA;OR-Yk^22`sn~zF< literal 0 HcmV?d00001 diff --git a/ui/images/theme-default/logo-flat.svg b/ui/images/theme-default/logo-flat.svg new file mode 100644 index 0000000..dda5822 --- /dev/null +++ b/ui/images/theme-default/logo-flat.svg @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> + <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="387" height="366" id="svg2"> + <title id="title4148">Project Kimchi</title> + <metadata id="metadata20"> + <rdf:RDF> + <cc:Work rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title>Project Kimchi</dc:title> + <cc:license rdf:resource="http://www.apache.org/licenses/LICENSE-2.0" /> + <dc:date>2013 - 2015</dc:date> + <dc:creator> + <cc:Agent> + <dc:title>IBM, Corp.</dc:title> + </cc:Agent> + </dc:creator> + <dc:rights> + <cc:Agent> + <dc:title>IBM, Corp.</dc:title> + </cc:Agent> + </dc:rights> + <dc:publisher> + <cc:Agent> + <dc:title>IBM, Corp.</dc:title> + </cc:Agent> + </dc:publisher> + <dc:contributor> + <cc:Agent> + <dc:title>https://github.com/kimchi-project</dc:title> + </cc:Agent> + </dc:contributor> + <dc:description>An HTML5 management interface for KVM</dc:description> + </cc:Work> + </rdf:RDF> + </metadata> + <defs id="defs18" /> + <path fill="#D91F2F" d="M303.868,82.71c25.172-8.604,27.898-42.319,7.13-55.331c-1.923-1.04-16.93-10.998-43.506-11.999 c-39.783,1.486-71.632,13.167-92.662,62.139c-0.25,2.109-0.508,6.054,1.977,3.206c0,0,0.284-0.329,0.443-0.515 c15.153-23.034,69.707-29.756,88.572-8.681c0.625,0.72,1.297,1.634,2.003,2.274C276.457,82.654,293.688,86.191,303.868,82.71" id="path4" /> + <path fill="#F19125" d="M336.691,227.692c20.913,16.439,50.687,0.387,50.306-24.119c-0.174-2.18,0.018-20.188-13.601-43.033 c-22.892-32.571-50.019-52.939-102.551-43.944c-1.906,0.938-5.355,2.866-1.615,3.403c0,0,0.432,0.059,0.674,0.093 c27.571,0.183,62.889,42.3,55.469,69.596c-0.263,0.916-0.665,1.977-0.817,2.918C321.826,204.661,328.231,221.044,336.691,227.692" id="path6" /> + <path fill="#8CC643" d="M228.105,329.358c-4.421,26.23,23.926,44.686,45.259,32.619c1.831-1.197,17.731-9.65,31.27-32.543 c17.636-35.689,22.531-69.258-10.515-111.072c-1.737-1.225-5.082-3.33-3.762,0.211c0,0,0.152,0.406,0.24,0.637 c13.04,24.293-7.028,75.463-34.545,82.018c-0.932,0.207-2.055,0.361-2.955,0.68C241.207,305.282,229.893,318.749,228.105,329.358" id="path8" /> + <path fill="#27AEE4" d="M81.133,285.823c-25.04,8.973-27.272,42.725-6.314,55.43c1.939,1.01,17.088,10.746,43.677,11.357 c39.757-2.072,71.43-14.219,91.738-63.496c0.22-2.113,0.421-6.061-2.023-3.176c0,0-0.279,0.33-0.438,0.521 c-14.811,23.254-69.259,30.777-88.434,9.982c-0.637-0.711-1.321-1.615-2.038-2.246C108.544,285.476,91.262,282.192,81.133,285.823" id="path10" /> + <path fill="#06659E" d="M48.671,141.301c-21.969-14.995-50.596,3.023-48.569,27.447c0.321,2.165,1.34,20.143,16.463,42.022 c25.03,30.957,53.465,49.455,105.273,36.947c1.839-1.063,5.151-3.219,1.382-3.502c0,0-0.432-0.031-0.678-0.047 c-27.52,1.672-65.589-37.975-60.023-65.709c0.202-0.933,0.531-2.018,0.62-2.968C65.053,163.281,57.561,147.365,48.671,141.301" id="path12" /> + <path fill="#BA1E70" d="M164.882,38.837c6.497-25.793-20.29-46.448-42.516-36.122c-1.919,1.049-18.444,8.206-33.764,29.946 c-20.424,34.171-27.98,67.243,1.628,111.558c1.632,1.359,4.798,3.726,3.765,0.089c0,0-0.119-0.417-0.188-0.651 c-11.062-25.255,13.021-74.663,40.974-79.004c0.945-0.132,2.076-0.198,3-0.441C149.9,61.794,162.255,49.273,164.882,38.837" id="path14" /> + </svg> diff --git a/ui/images/theme-default/logo-plain.gif b/ui/images/theme-default/logo-plain.gif deleted file mode 100644 index 4fd30d56db7951bb3efda43ea250d6335a49e40a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1601 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 diff --git a/ui/images/theme-default/logo-white.png b/ui/images/theme-default/logo-white.png index 8ef8ae15aa40ceb7db5170c9806ac74b840eaa0f..f2630da0fd837573cd6ca69a46823260b899f9ac 100644 GIT binary patch literal 7583 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 BY-Rue literal 9879 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 JPDHLkV1gkP$2tH2 diff --git a/ui/images/theme-default/nav-bg.png b/ui/images/theme-default/nav-bg.png deleted file mode 100644 index d26a5045104bf1485bf240576f2a292e5c97785e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3043 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 diff --git a/ui/images/theme-default/thumb-guest.png b/ui/images/theme-default/thumb-guest.png deleted file mode 100644 index 6b33ed7fbd95c43bac4b3d33f1e1a0f615ce3bce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3896 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 GLSTa3NJ*>! diff --git a/ui/images/theme-default/thumb-host.png b/ui/images/theme-default/thumb-host.png deleted file mode 100644 index e6026229ff33a4250eb6dfa9347870f522966768..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5069 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 diff --git a/ui/images/theme-default/user-icon.png b/ui/images/theme-default/user-icon.png deleted file mode 100644 index 66b1da9a6471f5ed547b2789b8d148e20895d49e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE<hRxemd{22U45`9+AZi z4BWyX%*Zfnjs#GUy~NYkmHjR!H>(xv>)aJKKp~#YkcblJ{M_8syb>Unfnm?OO*4U1 zlc$Sgh{frv6Ak&A4R~BXKMb=BeRtsHE|*s^UxnU$kl+e>n)K+<k;z6bo8o2uPbp*I zGWe9p7U$q6*uZY*yn5#aHF?fs4GZeNpWxv5Q#9>L{`7Nv6aO9Iy4N`G`9;1@OI6oR zdRWqvHi^sU^~!svZ+SaRlKJT0yXVK6BdY@qei!tZi|G6|`ZeX++1lqIS9!YnxvX<a GXaWHIT4Fu` diff --git a/ui/images/theme-default/wok-loading.gif b/ui/images/theme-default/wok-loading.gif deleted file mode 100644 index 233bd5f140d63a30b1944cce33bcb68aedea2efc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6181 zcmeI0c{tQ--@t!k1~Zn78T&eB#uysehV0E^8Edi>MV2ATR-q)%$sp^<5+c-OtdVR< z+KeS+o1{{y2xY13NImD!!b_^B)9Je2bG?7O&-1*```_=s`}*DY=kvL~_ibrqp>N== z1!w{<R{#<~bq8Qpe4+;YR7)N^7e3L=g8Cr<QcHwrB1Ezhk=)L^^B5p$ij?yP!l+0Y zJt<TYNFsnI1W>lk0i;iXgn~iI;Xq6wAftmK!qj#%fHUxo=E*>MC=#WQQH}?l0(1-j zO-~+OJvns~84aB)JPP7k+9!d^t!TAv3U*z9yg9}kPBb#Z%ki25;`(q~ytJSR>>O}W zK~EN@=iw?JTmn9i*^DJ=D68piya?1i15^<Dt`h*N2GlHRNXZvCD^3Oj6stFY24qXr zCqNWz3-ZK!e*{qe8;KtQyoHVp)Z9td68Z_yu+vlO0*2I0w&b9+WXX<5a<C)O$df3J zGgIgA^(s-Vn}s^#)Qn&j>GzO25c{3>Cfd#>1X<d?AVaAjoqd3_Po#mkuH`noqmZGM zfyP!8(GIU><14g{eaKYR)xs!<q74K9!1l|4+d06~U&8sEf=isTHv;guWZ)bC_(d+G zsA}&1$y7Vl01??>ex{8mKyN>zcS*vt-rt!__SS;?Tm?en40j(nV^nKNCj)^!h&}y? zqk=#<(==Ey+bVlW+Yz#VP$say-C_q2{uuaMGCJb0VPHYwE@|Lc>c-IO2J`C`Zt`ZK z5kPDnIa;A{7e***oEc!(;v+*z;<rdZvI7l>8Im1-*mv9ZfU_<NWK|l)ciJ#6`^LEg z`IQc-JAs1B4}Bt0Y{{WenGIEfcRZdb<g+XG*W3$7J_sk=IAYzucSy4My31K*zthyM z+4tuU5hkMvzeZuE!jJzwG^rz&E>y#nslK%*m-B0k=nMmQnd$aEPSCaqrPe04?*jhs z@#;gr3<KAm8s3!nJz4l(hWYzs{BKO0H3#)9eOEx`!z1NgJKJypH|6|qsBuq>%;yp# zZz%3<ITUe&FwUHqD=>Cxxs_Pe|15Kg()Mg;FE!&*{ENKuQTEXtgKlrjJqvC{#SR6s zx)P2LJk7s%AZH}8Vfg&3&Qn>BXU{$_DS2_JYW!vUbo<K6iqeXpy}7d!mF!@yy-5=c z0sug12?9d^D*$2j8(7l>fI0vxFgaQ+ixUS$s=0U9o@-BpW2_5lb;X^jQabxayX)9p z=_qQ7oK<~E&q=(~dH0_B(%w^=^xK724Q2fW`eC!9Jq_i9XGw7a^47y%q@OKv?Wc<v zLqTmFsgNy12NWyD5+q{k#atwjV!%RpFBY7^0r6sFf6+Vw#3hRxA6#(tE{;vi6ST8% z9j7PXQK6lMKYYlKr|^O_Ba_V{2D7j>S*BK$o=T1wsH{&dfPmOuV#5@ByR#NJ6@M$M zTNjb6PTpuO(c&cDllSE6F|eS5ZFB8-dlGWv?!M-_iLMNc%^BM(^;5lhI)P97t~9(H zWKmNU?4o}DL(Bh?KNRV;L2{E%$No%qEk!@1FHbs*H)SHe%klUuBtR&ym;V_|wkcJN zwV5Rxg2AP^U9hbb-f%KOy`aXa4z_?!xX@HH3buSbTNLc3GqwWFEH3JQq&pdEs8tpG zTJE4`QNlLKL}T0EUUN%T{R2bfmsEWQ3f+1W-N&v*z8SfEcI(X>pFS+UoqINT^XAG5 zz=!uT1A%@<!+-SVRYp_@F$V~{!sb{HN~9xG@^t*~FO+V2m$bHvljYleXT=Z3reyQ< z9RpwRwkARZN^UV;!z;itW!Y2_hUVxS8-s<9mT^dyna)6b>m5{_qGWE|))4(xREK;; z4A|bFu5__Y^cZV_x%t@$vOtJfOzBN~8Z)tVpR3#*sCtt#J8kpRQKYQI0j^_zw)Ftm z9n(ajmgcl}X8Gy9dPPMU%(u30jSV;<2LJ!F`vLsQh~@wB*$w)s$U)lWZ)Rf#%}L?- zPKrvjD_qz<2GOsNw1$`={j%R2mw**%#*&HMW0nb1W9;XWiP819RidIn5VCS1imd_} z2jbv|Sv(u`r)-DgF*i{3DYX;XcgzIc6Exf4r-Vu-1uZ`^ZtFaarVpA$S5x{6w%_I{ zN%hPoTjqg#9B^ultQlebW%tS6f??O0RKk{De3Eg^@c2&AG_H@0?xV<weiO_Eu)lU< zO`E{RT9y<1GbEMS1K@1ax$5>x4fG9coc$JlT^~VW#rb_ZOoTcQ27U)k_x~Meq~fu( z{V1iyqFV2(G*A>hqXQy}CccATOUonfxuh*U>EJt1Xy^flDd2>6>3Nh3+^@h`4WW(m zAaBtL{mnJ8E<(xYiF-4(IqXBrE`v?g(j2waro)Q1NzQMA?$;EFlsx5*Z7#}_zI^Be zOX~F~?@*eTSGacHFVErGiAp(;=@c(-sU$CQ0TFM7imNScCoO876psERj_tup-WDx# z3M|p$s&?p4Fm;!tO8T%&W646N<Hi)O(VGtB1bK#lwnPPsarhik@)oSkIAcndnI;(t zndnkLM|AUrAfH4j=fVSbWXjCK@+te`9}eX4&%`9CPI1E?!uUD+yELY{!$jec)^%K1 zl!V#m+MFmrfbN({`$eBKr>HQ!;KJIAWPgK2vG<)yXR8;I6+8j515AZD3nTxdMM&N8 zB#oTzj+PXRAMsAx1tq3thcY<l{kK5rh$>b&u!E}WgHBIN`f)jPByAv7K)pQ*d}52_ zQZYfd?marS?5t}sY!k%$fElK7#4%0pX=K<SZH`dDY_6(p6Cg~B#hc4DI%DRqz6DAL z4d+JZQZ;&5cL&L7BRu`BypLT(sC6`VVWSVMz3{cTrFUT^CH`96sPWQpRQG(XPrDEw zLWtJts|0~cNTa1lq*yS&-iBWSSR@kT6punQbT1c(;guu>0p6T3FbK3klNH0DK=}B@ zxN=D>-$WGNA!vj&59WfUY^%pOIb8xsabrTigLXHw0Z+oBp~N-;MVsfQ`5)qw9+(o5 zH0Z)a7qcQ3ss@eW*p##%&BeM=ez!tcE9nrX=jo}Q_T$hpsHWd`GCfmb(8H(1l_r4* z@vSrN_X2H#r77nJV-a@Z@=azBiw9WZ%7RZSQ+$I|vruluqlN)~d(E+%i+vB+d!X{= zZ&&R|4++`3HaIM=P7ZOng{K4K&06$5ed2ftrQn&}pIpy76ai_VxC{tv0~Y>{s`2R4 z+Y_4YuP6ejP${!E2s(*H76DJSSus|Es7zwta8@!|PE4yyE+U*kJ1(`X!z7OQvU^o| z?>Qu5vk0;LI8{W4pw>uZg$>z73T>@?l2B}W0-RQFlm3u!SBUIF(Du!wZ7_qX686yh zbshM$OO;#%-dU*hH3sw>K$4ZPnT&8GPO3<VUZxM3@}?;VwIKFL9T;%q;v%gP-6+*r zO>SPFFI)LEua$N(>)@E{n9N?GZ~?6WeY%|~pQ;WFqj%cXODP@x&ffUV{wN2-)NWCl z?6P_7xgvDgHJ@#ok=>v`5s+ayO|_NVVYjhhM2Sz_pKvKb^-la!hD=}61c7SE^0qd3 zXKTd$>Pv$dd~(f~7him_Z&Lcv7f^`7V#kL+_%b>7y)VQyU%JDut?Sagu8aA{Z@N&C ztGdv`y6WZJe_hpuu|U$UWeTWk99`ALX30lKSN;P!mGfs^L?Y%!3z>Jn*Ja|j`)>ov zS9M{&Ue`tOvoDViymVdlWzl2Rmw>8uU!G@J?soX;T>qy@?nhxdio4>VeDI91Rz_Mn zo>vB_9pgz7MiELrCV73aLi4UqLMC|+)EtD~Hkbm#LYCgpE$qpbihEqS<6XIBg>B}4 z>!!4&5q6XZU#KW<&&BT=PP>qVrRCx;-><(es+>BS;(Ms|`mW3xgKPu$<|NT}^AqVI z_sZfYZZY$<cCcLI8>d1C>6MfS9wMI*1%cJiKrOO&3?FVwc#Y<rP9r0bW=UKw-D{Km zuFIk)Z&h!{#mS}g<vW!Nq94-}t=e<#9#qEa&eF0Pp(3~&*OI*HHC0~X)MB+|yPYM> zUn@KwH>d|%)ZQ+hpIBPPnC&~F7x>^2e{3jixxl_p(|?Uw(3wa^c)R2(vl!Mov(T2d z9a6%ku3Vhh8ng5nP42Ni-!MhS8ncN9-6ik+$m~67NtZ9ojzxZ9*1YyW_E%&%z9Q_> zl2v4*zah(NTt&9~Wrj>Z6Z-{a9ocKD-;j+%z+={sjs1#jk;0G2a#j;h{A1#szb2mb zdEQj~%<SZs#9v%z_R>ER|8_0$nBbavrp(MLv*cGKZPaSwd)E?=UqY+vURh0i#h;lS zw4JjpV77eEEPMX?Te-EwfBZi2ZNeAV5+AUZ_>uf|WP1pg3I86*-Vk|mo_7>JlzTH? zFbl<DKsbum5lE~SIUXu(!uR4i_6RBw9rj{)CYBcF&-g-N*<Ic$DTK@3A+%pDY`dG; z<3k}&7*VqCO&t1OJz}(ouAJ&}P@b&GU3vV@-H}D6M>uB_ds+$~Y<sX=a-<>%!M<O@ zmWXoJdV)4!JQDK`bIz>XArUv8iMg3Lk-c{LupDiyPnP#_IKXEen1@IU2Um`J8Np{i zj|g|ajR>p!VAuG;eH{@J{=^T+XEk|?e@x!=_sLtwC;ZBK^76hUZ|Pg|KI238KUFX1 zHnEnx7puuj7Elje$HzxS*JBl*%%9>jn$Ki^kI%$x*~WE#n6uxF2vv18Yy2$kT;+#E z+h9CD4<2u@<c0jD>(4(qc>f#p46Rt5_VpN;o4SoVr?t;+XH<*%L7q#hZMdVF#s}~J zzMoLEtIF<Bhl9b%>o-@<r~rH&F^+_A3ghs1Eoqg6d&({JsGXgD!wZMx?5D(^nZNh> z3iEvZ3PbpOg#m7LsSOVY6ceQN7R{x@J7{?tx{mZ>je4)eWaZOiLk|u0aMVe)>RKK_ z!`hjK0Ym%u&uz4)-(fsVR*tKd`ToWChX1TX)A?@?ZSApUECwPGFvfu5D#l1Z-^R`# n-@N{Hwo!I@I;YutlYN@J<<B1RS{i5WRybAd?l(M00*w9(wjL?v -- 1.9.3

From: samhenri <samuel.guimaraes@eldorado.org.br> Signed-off-by: samhenri <samuel.guimaraes@eldorado.org.br> --- ui/js/src/wok.confirm.js | 91 ++++++++++ ui/js/src/wok.datagrid.js | 123 +++++++++++++ ui/js/src/wok.grid.js | 416 +++++++++++--------------------------------- ui/js/src/wok.line-chart.js | 74 +++++--- ui/js/src/wok.list.js | 302 ++++++++++++++++++++++++++++++++ ui/js/src/wok.login.js | 9 +- ui/js/src/wok.main.js | 61 +++++-- ui/js/src/wok.message.js | 95 +++------- ui/js/src/wok.window.js | 31 ++-- ui/js/widgets/grid.js | 123 ------------- 10 files changed, 749 insertions(+), 576 deletions(-) create mode 100644 ui/js/src/wok.confirm.js create mode 100644 ui/js/src/wok.datagrid.js create mode 100644 ui/js/src/wok.list.js delete mode 100644 ui/js/widgets/grid.js diff --git a/ui/js/src/wok.confirm.js b/ui/js/src/wok.confirm.js new file mode 100644 index 0000000..63f01c4 --- /dev/null +++ b/ui/js/src/wok.confirm.js @@ -0,0 +1,91 @@ +/* + * Project Wok + * + * Copyright IBM, Corp. 2015 + * + * 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 public function of confirm box. + * + * @param msg + * type:[object] + * @param msg.title + * The title of the confirm box. + * @param msg.content + * The main text of the confirm box. + * @param msg.confirm + * The text of the confirm button. + * @param msg.cancel + * the text of the cancel button. + * @param confirmCallback + * the callback function of click the confirm button. + * @param cancelCallback + * The callback function of click the cancel and X button. + */ +wok.confirm = function(settings, confirmCallback, cancelCallback) { + "use strict"; + var modalStr = '<div id="wok-confirm-modal" class="modal fade host-modal" tabindex="-1" role="dialog" aria-labelledby="confirmModalLabel" aria-hidden="true"></div>'; + if ($('#wok-confirm-modal ').size() < 1 && $('#modalWindow').size() < 1 ) { + $(document.body).append(modalStr); + } else if ($('#wok-confirm-modal ').size() < 1) { + $('#modalWindow').after(modalStr); + } + + var confirmboxHeader = [ + '<div class="modal-header', (settings.title === '' || typeof settings.title === 'undefined' ? ' icon' : '' ) ,'">', + '<h4 class="modal-title"><i class="fa fa-exclamation-triangle"></i>'+(settings.title || '')+'</h4>', + '</div>' + ].join(''); + + var confirmboxHtml = [ + '<div class="modal-dialog modal-sm">', + '<div class="modal-content">', + confirmboxHeader, + '<div class="modal-body">', + settings.content, + '</div>', + '<div class="modal-footer">', + '<button id="button-confirm" class="btn btn-default">' + (settings.confirm || i18n['KCHAPI6004M']) + '</button>', + '<button id="button-cancel" class="btn btn-default">' + (settings.cancel || i18n['KCHAPI6003M']) + '</button>', + '</div>', + '</div>', + '</div>' + ].join(''); + var confirmboxNode = $(confirmboxHtml); + $('#wok-confirm-modal').append(confirmboxNode); + $('#wok-confirm-modal').modal('show'); + $('#wok-confirm-modal').on("click", "#button-confirm", function(e) { + if (confirmCallback) { + confirmCallback(); + } + $('#wok-confirm-modal').modal('hide'); + }); + $('#wok-confirm-modal').on("click", "#button-cancel", function(e) { + if (cancelCallback) { + cancelCallback(); + } + $('#wok-confirm-modal').modal('hide'); + }); + + $('#wok-confirm-modal').on('hidden.bs.modal', function () { + close(); + }); + + var close = function(){ + "use strict"; + $('#wok-confirm-modal').removeData('bs.modal'); + $('#wok-confirm-modal').remove(); + }; + +}; \ No newline at end of file diff --git a/ui/js/src/wok.datagrid.js b/ui/js/src/wok.datagrid.js new file mode 100644 index 0000000..9f2f17b --- /dev/null +++ b/ui/js/src/wok.datagrid.js @@ -0,0 +1,123 @@ +/* + * Project Wok + * + * Copyright IBM, Corp. 2015 + * + * 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. + */ + +$(function(){ +$.widget("wok.dataGrid", { + options: { + enableSorting: true + }, + _create: function() { + var that = this; + this.element.addClass('wok-datagrid'); + var head = $(this.element.children().get(0)); + var body = $(this.element.children().get(1)); + head.addClass('wok-datagrid-header'); + if(this.options.enableSorting){ + head.children().each(function(){ + var addSorting = "<span>"+$(this).html()+"</span>"; + addSorting += '<span><div class="icon-angle-up sort-up"></div><div class="icon-angle-down sort-down"></div></span>'; + $(this).empty().append(addSorting); + }); + } + $('.icon-angle-up', head).click(function(){ + that.sort(head.children().index($(this).parent().parent()), true); + }); + $('.icon-angle-down', head).click(function(){ + that.sort(head.children().index($(this).parent().parent()), false); + }); + body.addClass('wok-datagrid-body'); + body.children().addClass('wok-datagrid-row'); + this._setRowBackgroud(); + }, + _setRowBackgroud: function(){ + var i=0, classes=['odd', 'even']; + $(this.element.children().get(1)).children().each(function(){ + $(this).removeClass('odd'); + $(this).removeClass('even'); + $(this).addClass(classes[i]); + i = i==0?1:0; + }); + }, + sort: function(column, assending) { + var head = $(this.element.children().get(0)); + $('.icon-up-dir', head).removeClass('icon-up-dir').addClass('icon-angle-up'); + $('.icon-down-dir', head).removeClass('icon-down-dir').addClass('icon-angle-down'); + var columnCell = $(head.children().get(column)); + if(assending){ + $('.icon-angle-up', columnCell).removeClass('icon-angle-up').addClass('icon-up-dir'); + }else{ + $('.icon-angle-down', columnCell).removeClass('icon-angle-down').addClass('icon-down-dir'); + } + var container = $(this.element.children().get(1)); + var nodes = []; + container.children().each(function(){ + nodes.push($(this)); + }); + nodes.sort(function(a, b){ + aVal = $(a.children().get(column)).attr('val'); + bVal = $(b.children().get(column)).attr('val'); + return aVal.localeCompare(bVal); + }); + if(!assending) nodes.reverse(); + container.empty(); + for(var i=0;i<nodes.length;i++){ + container.append(nodes[i]); + } + this._setRowBackgroud(); + }, + filter: function(keyword) { + keyword = keyword.toLowerCase(); + var container = $(this.element.children().get(1)); + container.children().each(function(){ + var hide = true; + $(this).children().each(function(){ + if($(this).attr('val')&&$(this).attr('val').toLowerCase().indexOf(keyword)!=-1){ + hide = false; + return false; + } + }); + $(this).css('display', hide?'none':''); + }); + this._setRowBackgroud(); + }, + addRow: function(rowNode){ + $(rowNode).addClass('wok-datagrid-row'); + this._setRowBackgroud(); + }, + deleteRow: function(rowNode){ + $(rowNode).remove(); + this._setRowBackgroud(); + }, + _destroy: function() { + this.element.removeClass('wok-datagrid'); + var head = $(this.element.children().get(0)); + var body = $(this.element.children().get(1)); + head.removeClass('wok-datagrid-header'); + if(this.options.enableSorting){ + head.children().each(function(){ + var oriContent = $($(this).children().get(0)).html() + $(this).empty().append(oriContent); + }); + } + body.removeClass('wok-datagrid-body'); + body.children().removeClass('wok-datagrid-row odd even'); + } +}); +}); diff --git a/ui/js/src/wok.grid.js b/ui/js/src/wok.grid.js index 12f191c..0606bc6 100644 --- a/ui/js/src/wok.grid.js +++ b/ui/js/src/wok.grid.js @@ -18,106 +18,73 @@ * limitations under the License. */ wok.widget.Grid = function(opts) { + "use strict"; this.opts = $.extend({}, this.opts, opts); this.createDOM(); this.reload(); }; wok.widget.Grid.prototype = (function() { + "use strict"; var htmlStr = [ - '<div id="{id}" class="grid">', - '<div class="grid-content">', - '<div class="grid-header">', - '<div class="grid-frozen-header-view">', - '<table class="grid-frozen-header-container">', - '</table>', - '</div>', - '<div class="grid-header-view">', - '<div class="grid-header-wrapper">', - '<table class="grid-header-container">', - '</table>', - '</div>', - '</div>', - '</div>', - '<div class="grid-body">', - '<div class="grid-frozen-body-view">', - '<div class="grid-frozen-body-wrapper">', - '<table class="grid-frozen-body-container">', - '</table>', - '</div>', - '</div>', - '<div class="grid-body-view">', - '<div class="grid-body-wrapper">', - '<table class="grid-body-container">', - '</table>', - '</div>', - '</div>', + '<div id="{id}" class="grid wok-grid">', + '<div class="wok-grid-message hidden">', + '<div class="alert alert-danger fade in" role="alert">', + '<p><strong>{message}</strong> ', + '<span class="detailed-text"></span></p>', + '<p><button class="btn btn-primary btn-xs retry-button">', + '{buttonLabel}', + '</button></p>', '</div>', - '<div class="grid-resizer-leftmost hidden"></div>', - '<div class="grid-resizer hidden"></div>', '</div>', - '<div class="grid-footer"></div>', - '<div class="grid-mask hidden">', - '<div class="grid-loading">', - '<div class="grid-loading-icon"></div>', - '<div class="grid-loading-text">', - '{loading}', - '</div>', - '</div>', + '<div class="grid-content wok-grid-content">', + '<table class="wok-table table">', + '<thead class="wok-grid-header-container"></thead>', + '<tbody class="wok-grid-body-container">', + '</tbody>', + '</table>', '</div>', - '<div class="grid-message hidden">', - '<div class="grid-message-text">', - '{message}', - '<button class="retry-button btn-small">', - '{buttonLabel}', - '</button>', - '</div>', - '<div class="detailed-title">', - '{detailedLabel}', + '<div class="wok-grid-mask hidden">', + '<div class="wok-grid-loader-container">', + '<div class="wok-grid-loading">', + '<div class="wok-grid-loading-icon"></div>', + '<div class="wok-grid-loading-text">', + '{loading}', + '</div>', + '</div>', '</div>', - '<div class="detailed-text"></div>', '</div>', '</div>' ].join(''); - var CONTAINER_NORMAL = 0, CONTAINER_FROZEN = 1; - var setupHeaders = function(header, body, fields) { var colGroup = $('<colgroup></colgroup>').appendTo(header); - var headerHeader = $('<thead></thead>'); - var headerRow = $('<tr></tr>').appendTo(headerHeader); + var headerRow = $('<tr></tr>').appendTo(header); $.each(fields || [], function(i, field) { $('<col class="' + field['class'] + '"/>') .appendTo(colGroup); - $('<th><div class="cell-text-wrapper">' + + $('<th><div class="wok-text-header">' + field['label'] + '</div></th>').appendTo(headerRow); }); - headerHeader.appendTo(header); var totalWidth = 0; - $('col', colGroup).each(function(index, col) { - var width = $(col).width(); - totalWidth += width; - $(col).css('width', width + 'px'); - }); - $(body).append(colGroup.clone()); return totalWidth; }; var getValue = function(name, obj) { - var result=undefined; + var result; if(!Array.isArray(name)) { name=name.parseKey(); } - if(name.length!=0) { + if(name.length!==0) { var tmpName=name.shift(); - if(obj[tmpName]!=undefined) { + if(obj[tmpName]!==undefined) { result=obj[tmpName]; } - if(name.length!=0) { + if(name.length!==0) { result=getValue(name,obj[tmpName]); } } @@ -126,55 +93,18 @@ wok.widget.Grid.prototype = (function() { var fillBody = function(container, fields) { var data = this.data; - var tbody = ($('tbody', container).length && $('tbody', container)) - || $('<tbody></tbody>').appendTo(container); - tbody.empty(); $.each(data, function(i, row) { - var rowNode = $('<tr></tr>').appendTo(tbody); + var rowNode = $('<tr></tr>').appendTo(container); $.each(fields, function(fi, field) { var value = getValue(field['name'], row); - $('<td><div class="cell-text-wrapper"' + - (field['makeTitle'] === true - ? ' title="' + value + '"' - : '' - ) + '>' + value.toString() + '</div></td>' + $('<td><div class="wok-cell-text"' + (field['makeTitle'] === true ? ' title="' + value + '"' : '' ) + '>' + value.toString() + '</div></td>' ).appendTo(rowNode); }); }); }; - var fixTableLayout = function(style) { - $.each([ - this.frozenHeaderContainer, - this.headerContainer, - this.frozenBodyContainer, - this.bodyContainer - ], function(i, tableNode) { - $(tableNode).css('table-layout', style || 'fixed'); - }); - }; - - var initResizing = function(event) { - var resizer = event.data.resizer; - var pageX = event.pageX; - var tailPos = $(this).width() + $(this).offset()['left']; - var atResizer = Math.abs(pageX - tailPos) <= 2; - var isResizing = !$(resizer).hasClass('hidden'); - $('body')[(atResizer || isResizing) - ? 'addClass' - : 'removeClass' - ]('resizing'); - }; - - var clearResizing = function(event) { - $(event.data.resizer).hasClass('hidden') && - $('body').removeClass('resizing'); - }; - var stylingRow = function(row, className, add) { var index = $(row).index() + 1; - $('tr', this.frozenBodyContainer) - .removeClass(className); $('tr', this.bodyContainer) .removeClass(className); @@ -182,19 +112,18 @@ wok.widget.Grid.prototype = (function() { return; } - $('tr:nth-child(' + index + ')', this.frozenBodyContainer) - .addClass(className); $('tr:nth-child(' + index + ')', this.bodyContainer) .addClass(className); }; var setBodyListeners = function() { - if(this['opts']['rowSelection'] != 'disabled') { + if(this['opts']['rowSelection'] !== 'disabled') { $('tr', this.gridBody).on('mouseover', { grid: this }, function(event) { - if (! $(this).hasClass('no-hover')) + if (! $(this).hasClass('no-hover')) { stylingRow.call(event.data.grid, this, 'hover'); + } }); $('tr', this.gridBody).on('mouseout', { @@ -213,128 +142,16 @@ wok.widget.Grid.prototype = (function() { }); } - $('.grid-body-view', this.domNode).on('scroll', { - grid: this - }, function(event) { - var grid = event.data.grid; - $('.grid-header .grid-header-view', grid.domNode) - .prop('scrollLeft', this.scrollLeft); - $('.grid-body .grid-frozen-body-view', grid.domNode) - .prop('scrollTop', this.scrollTop); - }); }; var setData = function(data) { this.data = data; - fillBody.call(this, this.frozenBodyContainer, this['opts']['frozenFields']); fillBody.call(this, this.bodyContainer, this['opts']['fields']); setBodyListeners.call(this); }; var getSelected = function() { - return this.selectedIndex >= 0 - ? this.data[this.selectedIndex] - : null; - }; - - var startResizing = function(container, event) { - var grid = event.data.grid; - wok.widget.Grid.beingResized = grid; - if(!($('body').hasClass('resizing') - && $(grid.resizer).hasClass('hidden'))) { - return; - } - - grid.columnBeingResized = container; - var pageX = event.pageX; - var gridOffsetX = grid.domNode.offset()['left']; - var leftmostOffsetX = $(container).offset()['left'] - gridOffsetX; - var left = pageX - gridOffsetX; - var contentHeight = $('.grid-content', grid.domNode).height(); - $(grid.resizerLeftmost).css({ - left: leftmostOffsetX + 'px', - height: contentHeight + 'px' - }); - $(grid.resizer).css({ - left: left + 'px', - height: contentHeight + 'px' - }); - $(grid.resizerLeftmost).removeClass('hidden'); - $(grid.resizer).removeClass('hidden'); - event.preventDefault(); - }; - - var endResizing = function(event) { - var grid = wok.widget.Grid.beingResized; - if(!$('body').hasClass('resizing')) { - return; - } - $(grid.resizerLeftmost).addClass('hidden'); - $(grid.resizer).addClass('hidden'); - $('body').removeClass('resizing'); - var leftmostOffset = $(grid.columnBeingResized).offset()['left']; - var left = event.pageX; - if(leftmostOffset > left) { - return; - } - resizeColumnWidth.call( - grid, - $(grid.columnBeingResized).index(), - left - leftmostOffset - ); - fixTableLayout.call(grid); - grid.columnBeingResized = null; - wok.widget.Grid.beingResized = null; - }; - - var resizeColumnWidth = function(index, width) { - var width = Math.ceil(width); - var widthArray = []; - var totalWidth = 0; - var header = this.headerContainer; - var body = this.bodyContainer; - if(this.containerBeingResized === CONTAINER_FROZEN) { - header = this.frozenHeaderContainer; - body = this.frozenBodyContainer; - } - $('col', header).each(function(i, colNode) { - var w = index === i ? width : $(colNode).width(); - widthArray.push(w); - totalWidth += w; - }); - $.each([header, body], function(i, container) { - container.css({ - 'table-layout': 'fixed', - width: totalWidth + 'px' - }); - $('col:nth-child(' + (index + 1) + ')', container).css({ - width: width + 'px' - }); - }); - - if(this.containerBeingResized === CONTAINER_FROZEN) { - var headerView = $('.grid-header-view', this.domNode); - var bodyView = $('.grid-body-view', this.domNode); - $.each([headerView, bodyView], function(i, view) { - view.css({ - left: totalWidth + 'px' - }); - }); - } - }; - - var positionResizer = function(event) { - var grid = event.data.grid; - if($(grid.resizer).hasClass('hidden')) { - return; - } - - var pageX = event.pageX; - var gridOffsetX = $(grid.domNode).offset()['left']; - var leftMost = $(grid.resizerLeftmost).position()['left']; - var offsetX = pageX - gridOffsetX; - offsetX = offsetX >= leftMost ? offsetX : leftMost; - $(grid.resizer).css('left', offsetX + 'px'); + return this.selectedIndex >= 0 ? this.data[this.selectedIndex] : null; }; var showMessage = function(msg) { @@ -368,11 +185,6 @@ wok.widget.Grid.prototype = (function() { } }; - var destroy = function() { - $('body').off('mousemove.grid#' + this['opts']['id'], positionResizer); - $('body').off('mouseup.grid#' + this['opts']['id'], endResizing); - }; - var createDOM = function() { var containerID = this['opts']['container']; var container = $('#' + containerID); @@ -387,118 +199,91 @@ wok.widget.Grid.prototype = (function() { })).appendTo(container); this.domNode = domNode; + var theTable = $('.wok-table', domNode); + var theContainer = $('.wok-grid-content', domNode); + var headerContainer = $('.wok-grid-header-container', domNode); + var bodyContainer = $('.wok-grid-body-container', domNode); + setupHeaders(headerContainer, bodyContainer, this['opts']['fields']); + this.theTable = theTable; + this.theContainer = theContainer; + this.headerContainer = headerContainer; + this.bodyContainer = bodyContainer; + var height = domNode.height(); var width = domNode.width(); var title = this['opts']['title']; var titleNode = null; if(title) { - titleNode = $('<div class="grid-caption">' + title + '</div>') - .prependTo(domNode); + titleNode = $('<caption class="sr-only">' + title + '</caption>').prependTo(theTable); } var toolbarButtons = this['opts']['toolbarButtons']; var toolbarNode = null; + var btnHTML, dropHTML = []; if(toolbarButtons) { - toolbarNode = $('<div class="grid-toolbar"></div>'); - if(titleNode) { - titleNode.after(toolbarNode); - } - else { - toolbarNode.prependTo(domNode); + toolbarNode = $('<div class="btn-group"></div>'); + toolbarNode.prependTo(theContainer); + if(toolbarButtons.length > 1) { + dropHTML = ['<div class="dropdown menu-flat">', + '<button id="wok-dropdown-button-', containerID, '" class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">', + '<span class="edit-alt"></span>Actions<span class="caret"></span>', + '</button>', + '<ul class="dropdown-menu"></ul>', + '</div>' + ].join(''); + $(dropHTML).appendTo(toolbarNode); + $.each(toolbarButtons, function(i, button) { + btnHTML = [ + '<li role="presentation"', button.critical === true ? ' class="critical"' : '', '><a data-toggle="modal"', + button.id ? (' id="' + button.id + '"') : '', + ' class="', button.disabled === true ? ' disabled' : '', '">', + button.class ? ('<i class="' + button.class) + '"></i>' : '', + button.label, + '</a></li>' + ].join(''); + var btnNode = $(btnHTML).appendTo(toolbarNode[0].children[0].children[1]); + button.onClick && btnNode.on('click', button.onClick); + }); + }else { + $.each(toolbarButtons, function(i, button) { + btnHTML = [ + '<button data-dismiss="modal" ', + button['id'] ? (' id="' + button['id'] + '"') : '', + ' class="btn btn-primary', + button['class'] ? (' ' + button['class']) : '', + '"', + button['disabled'] === true ? ' disabled' : '', + '>', + button['label'], + '</button>' + ].join(''); + var btnNode = $(btnHTML).appendTo(toolbarNode); + button['onClick'] && + btnNode.on('click', button['onClick']); + }); } - $.each(toolbarButtons, function(i, button) { - var btnHTML = [ - '<button', - button['id'] ? (' id="' + button['id'] + '"') : '', - ' class="grid-toolbar-button', - button['class'] ? (' ' + button['class']) : '', - '"', - button['disabled'] === true ? ' disabled' : '', - '>', - button['label'], - '</button>' - ].join(''); - var btnNode = $(btnHTML).appendTo(toolbarNode); - button['onClick'] && - btnNode.on('click', button['onClick']); - }); } - var frozenHeaderContainer = $('.grid-frozen-header-container', domNode); - var frozenBodyContainer = $('.grid-frozen-body-container', domNode); - var frozenWidth = setupHeaders( - frozenHeaderContainer, - frozenBodyContainer, - this['opts']['frozenFields'] - ); - this.frozenHeaderContainer = frozenHeaderContainer; - this.frozenBodyContainer = frozenBodyContainer; - - var headerContainer = $('.grid-header-container', domNode); - var bodyContainer = $('.grid-body-container', domNode); - setupHeaders(headerContainer, bodyContainer, this['opts']['fields']); - this.headerContainer = headerContainer; - this.bodyContainer = bodyContainer; - - fixTableLayout.call(this, 'auto'); + // var domHeight = domNode && $(domNode).height() || 0; + // var toolbarHeight = toolbarNode && $(toolbarNode).height() || 0; + // var maskHeight = domHeight - toolbarHeight; - var gridContentNode = $('.grid-content', domNode); - var captionHeight = titleNode && $(titleNode).height() || 0; - var toolbarHeight = toolbarNode && $(toolbarNode).height() || 0; - gridContentNode.css('top', (captionHeight + toolbarHeight) + 'px'); + // var maskContainer = $('.wok-grid-loader-container',domNode); + // maskContainer.css({'top': toolbarHeight+'px', 'height': maskHeight+'px'}); + // this.maskContainer = maskContainer; - var maskNode = $('.grid-mask', domNode); - maskNode.css('top', captionHeight + 'px'); + var maskNode = $('.wok-grid-mask', domNode); this.maskNode = maskNode; - var messageNode = $('.grid-message', domNode); - messageNode.css('top', captionHeight + 'px'); + var messageNode = $('.wok-grid-message', domNode); this.messageNode = messageNode; - var headerView = $('.grid-header-view', domNode); - var bodyView = $('.grid-body-view', domNode); - headerView.css('left', (frozenWidth) + 'px'); - bodyView.css('left', (frozenWidth) + 'px'); + //fixTableLayout.call(this); - var bodyWidth = width - frozenWidth; - headerContainer.css('width', bodyWidth + 'px'); - bodyContainer.css('width', bodyWidth + 'px'); - - fixTableLayout.call(this); - - var gridBody = $('.grid-body', domNode); + var gridBody = $('.wok-grid-body', domNode); this.gridBody = gridBody; - this.resizerLeftmost = $('.grid-resizer-leftmost', domNode); - this.resizer = $('.grid-resizer', domNode); - var gridHeader = $('.grid-header', domNode); - $('th', gridHeader).on('mouseover mousemove', { - resizer: this.resizer - }, initResizing); - - $('th', gridHeader).on('mouseout', { - resizer: this.resizer - }, clearResizing); - - this.containerBeingResized = CONTAINER_NORMAL; - $('th', frozenHeaderContainer).on('mousedown', { - grid: this - }, function(event) { - event.data.grid.containerBeingResized = CONTAINER_FROZEN; - startResizing(this, event); - }); - $('th', headerContainer).on('mousedown', { - grid: this - }, function(event) { - event.data.grid.containerBeingResized = CONTAINER_NORMAL; - startResizing(this, event); - }); - - $('body').on('mousemove.grid#' + this['opts']['id'], { - grid: this - }, positionResizer); - $('body').on('mouseup.grid#' + this['opts']['id'], endResizing); var data = this['opts']['data']; @@ -517,14 +302,13 @@ wok.widget.Grid.prototype = (function() { onRowSelected: null, title: null, toolbarButtons: null, - frozenFields: null, fields: null }, createDOM: createDOM, setData: setData, getSelected: getSelected, reload: reload, - destroy: destroy, + //destroy: destroy, showMessage: showMessage }; -})(); +})(); \ No newline at end of file diff --git a/ui/js/src/wok.line-chart.js b/ui/js/src/wok.line-chart.js index 3c740e6..3eb3494 100644 --- a/ui/js/src/wok.line-chart.js +++ b/ui/js/src/wok.line-chart.js @@ -18,13 +18,15 @@ * limitations under the License. */ -/** +/* * new wok.widget.LineChart({ * node: 'line-chart-cpu', * id: 'line-chart', * type: 'value' * }); */ + + wok.widget.LineChart = function(params) { var container = $('#' + params['node']); container.addClass('chart-container'); @@ -82,6 +84,14 @@ wok.widget.LineChart = function(params) { } }); } + + var defs = [ + '<defs>', + '<pattern id="patternbg" x="0" y="0" width="6" height="6" patternUnits="userSpaceOnUse">', + '<rect x="0" y="0" width="3" height="6" style="stroke:none; fill: #eeeeee;"></rect>', + '</pattern>', + '</defs>' + ].join(''); var canvasNode = $('#' + canvasID); canvasNode.length && canvasNode.remove(); @@ -89,25 +99,10 @@ wok.widget.LineChart = function(params) { '<svg id="', canvasID, '" class="line-chart"', ' height="', height, '" width="', width, '"', '>', + defs, '<rect height="', height, '" width="', width, '" class="background" />' ]; - for(var x = linesOffset; x < width; x += linesSpace) { - htmlStr.push( - '<line x1="', x, '" y1="', 0, '" x2="', x, '" y2="', height, '" />' - ); - } - - linesOffset -= xFactor; - while(linesOffset < 0) { - linesOffset = linesSpace + linesOffset; - } - - for(var y = height - linesSpace; y > 0; y -= linesSpace) { - htmlStr.push( - '<line x1="', 0, '" y1="', y, '" x2="', width, '" y2="', y, '" />' - ); - } var maxValueLabel = i18n['KCHHOST6001M'] + ' ' + (type === 'value' @@ -124,12 +119,34 @@ wok.widget.LineChart = function(params) { chartVAxis.text(maxValueLabel); } + seriesNames = []; $.each(data, function(i, series) { var points = series['points']; var className = series['class']; var latestPoint = points.slice(-1).pop(); xStart = latestPoint['x'] - period; + htmlStr.push('<path', + ' class="series', className ? ' ' + className : '', '"', + ' d="M 0,92 ' + ); + var first = true; + $.each(points, function(i, point) { + if(first) { + first = false; + } + else { + htmlStr.push(' '); + } + + var x = xFactor * (point['x'] - xStart); + var y = height - yFactor * (type === 'value' ? + point['y'] * 100 / maxValue : + point['y'] + ); + htmlStr.push(x, ',', y); + }); + htmlStr.push(' 310,92z" />'); htmlStr.push('<polyline', ' class="series', className ? ' ' + className : '', '"', @@ -152,6 +169,7 @@ wok.widget.LineChart = function(params) { htmlStr.push(x, ',', y); }); htmlStr.push('" />'); + }); htmlStr.push('</svg>'); @@ -160,7 +178,7 @@ wok.widget.LineChart = function(params) { if(!chartLegend) { chartLegend = $('<div class="chart-legend-container"></div>'); - container.after(chartLegend); + container.before(chartLegend); } else { chartLegend.empty(); @@ -169,18 +187,15 @@ wok.widget.LineChart = function(params) { var wrapper = $('<div class="legend-wrapper"></div>') .appendTo(chartLegend); $([ - '<svg class="legend-icon" width="20" height="10">', - '<line x1="0" y1="5" x2="20" y2="5"/>', + '<svg class="legend-icon" width="5" height="40">', + '<rect width="5" height="40" />', '</svg>' ].join('')).appendTo(wrapper); - $('line', wrapper).css({ - stroke: $(polyline).css('stroke'), - 'stroke-width': $(polyline).css('stroke-width') + $('rect', wrapper).css({ + fill: $(polyline).css('stroke') }); var label = data[i]['legend']; var base = data[i]['base']; - $('<label class="legend-label">' + label + '</label>') - .appendTo(wrapper); var latestPoint = data[i]['points'].slice(-1).pop(); var latestValue = latestPoint['y']; if(type === 'value') { @@ -189,11 +204,12 @@ wok.widget.LineChart = function(params) { formatSettings ); } - else { - latestValue += '%'; + else { + latestValue = { v: latestValue, s: '%' }; } - $('<div class="latest-value">' + latestValue + '</div>') - .appendTo(wrapper); + $('<div class="latest-value"><span class="number">' + latestValue.v + '</span></div>').appendTo(wrapper); + $('<span class="legend-label">'+ latestValue.s +'</span><span class="legend-string">'+ label + '</span>').appendTo(wrapper[0].children[1]); + }); }; diff --git a/ui/js/src/wok.list.js b/ui/js/src/wok.list.js new file mode 100644 index 0000000..21aa9fd --- /dev/null +++ b/ui/js/src/wok.list.js @@ -0,0 +1,302 @@ +/* + * Project Wok + * + * Copyright IBM, Corp. 2013-2015 + * + * 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. + */ +wok.widget.List = function(opts) { + "use strict"; + this.opts = $.extend({}, this.opts, opts); + this.createDOM(); + this.reload(); +}; + +wok.widget.List.prototype = (function() { + "use strict"; + var htmlStr = [ + '<div id="{id}-section" class="panel panel-default">', + '<div class="panel-heading">', + '</div>', + '<div id="content-{id}" class="panel-body">', + '<div id="{id}-container">', + '<div class="wok-list-message clearfix hidden">', + '<div class="alert alert-danger fade in" role="alert">', + '<p><strong>{message}</strong> ', + '<span class="detailed-text"></span></p>', + '<p><button class="btn btn-primary btn-xs retry-button">', + '{buttonLabel}', + '</button></p>', + '</div>', + '</div>', + '<div id="{id}-btn-group" class="btn-group wok-single-button hidden">', + + '</div>', + '<div id="{id}" class="row clearfix">', + '<div class="wok-list-content">', + '<table class="wok-list-table table table-striped" id="list">', + '</table>', + '</div>', + '</div>', + '<div class="wok-list-mask hidden">', + '<div class="wok-list-loader-container">', + '<div class="wok-list-loading">', + '<div class="wok-list-loading-icon"></div>', + '<div class="wok-list-loading-text">', + '{loading}', + '</div>', + '</div>', + '</div>', + '</div>', + '</div>', + '</div>', + '</div>' + ].join(''); + + var getValue = function(name, obj) { + var result; + if (!Array.isArray(name)) { + name = name.parseKey(); + } + if (name.length !== 0) { + var tmpName = name.shift(); + if (obj[tmpName] !== undefined) { + result = obj[tmpName]; + } + if (name.length !== 0) { + result = getValue(name, obj[tmpName]); + } + } + return (result); + }; + + + var fillButton = function(btnContainer){ + var addOrGenerateBtn = this.opts.toolbarButtons[0]; + var singleBtnHTML = [ + '<a class="btn btn-primary" href="#"', (addOrGenerateBtn.id ? (' id="' + addOrGenerateBtn.id + '"') : ''),' role="button">', + addOrGenerateBtn.class ? ('<i class="' + addOrGenerateBtn.class) + '"></i> ' : '', + addOrGenerateBtn.label, + '</a>' + ].join(''); + var singleBtn = $(singleBtnHTML).appendTo(btnContainer); + $(singleBtn).click(function(e) { + e.preventDefault(); + }); + addOrGenerateBtn.onClick && singleBtn.on('click', addOrGenerateBtn.onClick); + }; + + var fillBody = function(container, fields) { + + var toolbarButtons = this.opts.toolbarButtons; + var actionDropdownHtml; + var data = this.data; + var tbody = ($('tbody', container).length && $('tbody', container)) || $('<tbody></tbody>').appendTo(container); + tbody.empty(); + if (typeof data !== 'undefined' && data.length > 0) { + $.each(data, function(i, row) { + var rowNode = $('<tr></tr>').appendTo(tbody); + var columnNodeHTML; + var columnData = ''; + var state = ''; + var styleClass = ''; + if (toolbarButtons) { + actionDropdownHtml = [ + '<td>', + '<div class="dropdown menu-flat">', + '<button id="wok-dropdown-button-', i, '" class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">', + '<span class="edit-alt"></span>Actions<span class="caret"></span>', + '</button>', + '<ul class="dropdown-menu" role="menu" aria-labelledby="action-dropdown-menu-', i, '">', + '</ul>', + '</div>', + '</td>' + ].join(''); + } + $.each(fields, function(fi, field) { + var value = getValue(field.name, row); + if (field.type === 'status' && field.name === 'enabled') { + styleClass = (value === true ? '' : ' disabled'); + state = [ + '<span class="wok-repository-status ', + value === true ? 'enabled' : 'disabled', + '"><i class="fa fa-power-off"></i></span>' + ].join(''); + } + columnData += (field.type === 'name') ? ('<span class="wok-list-name">' + value.toString() + '</span>') : (field.type !== 'status' ? '<span class="wok-list-loading-icon-inline"></span><span class="wok-list-description">' + value.toString() + '</span>' : ''); + + }); + columnNodeHTML = [ + '<td>', + '<div class="wok-list-cell', styleClass, '">', state, + columnData, + '</div>', + '</td>' + ].join(''); + $(columnNodeHTML).appendTo(rowNode); + + var actionMenuNode = $(actionDropdownHtml).appendTo(rowNode); + + $.each(toolbarButtons, function(i, button) { + var btnHTML = [ + '<li role="presentation"', button.critical === true ? ' class="critical"' : '', '>', + '<a role="menuitem" tabindex="-1" data-dismiss="modal"', (button.id ? (' id="' + button.id + '"') : ''), (button.disabled === true ? ' class="disabled"' : ''), + '>', + button.class ? ('<i class="' + button.class) + '"></i>' : '', + button.label, + '</a></li>' + ].join(''); + var btnNode = $(btnHTML).appendTo($('.dropdown-menu', rowNode)); + button.onClick && btnNode.on('click', button.onClick); + }); + }); + } + }; + + var stylingRow = function(row, className, add) { + var index = $(row).index() + 1; + $('tr', this.bodyContainer) + .removeClass(className); + if (add === false) { + return; + } + $('tr:nth-child(' + index + ')', this.bodyContainer) + .addClass(className); + }; + + var setBodyListeners = function() { + if (this['opts']['rowSelection'] != 'disabled') { + + $('tr', this.bodyContainer).on('click', { + grid: this + }, function(event) { + var grid = event.data.grid; + if (!$(this).hasClass('generating')) { + grid.selectedIndex = $(this).index(); + stylingRow.call(grid, this, 'selected'); + grid['opts']['onRowSelected'] && grid['opts']['onRowSelected'](); + } + }); + } + }; + + var setData = function(data) { + this.data = data; + fillBody.call(this, this.bodyContainer, this.opts.fields); + setBodyListeners.call(this); + }; + + var getSelected = function() { + return this.selectedIndex >= 0 ? this.data[this.selectedIndex] : null; + }; + + var showMessage = function(msg) { + $('.detailed-text', this.messageNode).text(msg); + $(this.messageNode).removeClass('hidden'); + }; + + var hideMessage = function() { + $(this.messageNode).addClass('hidden'); + }; + + var reload = function() { + var data = this.opts.data; + if (!data) { + return; + } + + if ($.isArray(data)) { + return this.setData(data); + } + + if ($.isFunction(data)) { + var loadData = data; + $(this.maskNode).removeClass('hidden'); + loadData($.proxy(function(data) { + this.setData(data); + $(this.maskNode).addClass('hidden'); + }, this)); + } + }; + + var createDOM = function() { + var containerID = this.opts.container; + var container = $('#' + containerID); + var gridID = this.opts.id; + var data = this.opts.data; + var rowSelection = this.opts.rowSelection || 'single'; + var domNode = $(wok.substitute(htmlStr, { + id: gridID, + loading: i18n.KCHGRD6001M, + message: i18n.KCHGRD6002M, + buttonLabel: i18n.KCHGRD6003M, + detailedLabel: i18n.KCHGRD6004 + })).appendTo(container); + this.domNode = domNode; + + + var titleContainer = $('.panel-heading', domNode); + this.titleContainer = titleContainer; + + var title = this.opts.title; + var titleNode = null; + + if (title) { + titleNode = $('<h3 class="panel-title">' + title + '</h3>').appendTo(titleContainer); + } + + var bodyContainer = $('.wok-list-table.table.table-striped', domNode); + this.bodyContainer = bodyContainer; + + var singleButtonContainer = $('.wok-single-button', domNode); + this.singleButtonContainer = singleButtonContainer; + + var gridBody = $('.wok-list-content', domNode); + this.gridBody = gridBody; + + var maskNode = $('.wok-list-mask', domNode); + this.maskNode = maskNode; + + var messageNode = $('.wok-list-message', domNode); + this.messageNode = messageNode; + + + fillButton.call(this,this.singleButtonContainer); + + $('.retry-button', domNode).on('click', { + grid: this + }, function(event) { + event.data.grid.reload(); + }); + + + }; + + return { + opts: { + container: null, + id: null, + rowSelection: 'single', + onRowSelected: null, + title: null, + toolbarButtons: null, + frozenFields: null, + fields: null + }, + createDOM: createDOM, + setData: setData, + getSelected: getSelected, + reload: reload, + showMessage: showMessage + }; +})(); \ No newline at end of file diff --git a/ui/js/src/wok.login.js b/ui/js/src/wok.login.js index d9ccae6..13a1da0 100644 --- a/ui/js/src/wok.login.js +++ b/ui/js/src/wok.login.js @@ -18,9 +18,12 @@ * limitations under the License. */ wok.login_main = function() { - + "use strict"; var selectedLanguage = wok.lang.get(); $('#userLang').val(selectedLanguage); + $('#userLang option[value="'+selectedLanguage+'"]').attr("selected", "selected"); + $('#userLang').next().find('.selectpicker').attr('title',$('#userLang option[value="'+selectedLanguage+'"]').text()); + $('#userLang').next().children().find('.filter-option').text($('#userLang option[value="'+selectedLanguage+'"]').text()); $('#userLang').on('change', function() { wok.lang.set($(this).val()); @@ -29,7 +32,7 @@ wok.login_main = function() { var query = window.location.search; var error = /.*error=(.*?)(&|$)/g.exec(query); - if (error && error[1] == "sessionTimeout") { + if (error && error[1] === "sessionTimeout") { $("#messSession").show(); } @@ -59,7 +62,7 @@ wok.login_main = function() { var next_url = lastPage ? lastPage.replace(/\"/g,'') : "/"; } wok.cookie.set('roles',JSON.stringify(data.roles)); - window.location.replace(window.location.pathname.replace(/\/+login.html/, '') + next_url) + window.location.replace(window.location.pathname.replace(/\/+login.html/, '') + next_url); }, function() { $("#messUserPass").show(); $("#messSession").hide(); diff --git a/ui/js/src/wok.main.js b/ui/js/src/wok.main.js index 25fed31..1330ac1 100644 --- a/ui/js/src/wok.main.js +++ b/ui/js/src/wok.main.js @@ -27,6 +27,7 @@ wok.main = function() { var tabsHtml = []; $(tabs).each(function(i, tab) { var title = tab['title']; + var cssClass = tab['css']; var path = tab['path']; var mode = tab['mode']; if (mode != 'none') { @@ -34,10 +35,10 @@ wok.main = function() { var disableHelp = (helpPath.length == 0 ? "disableHelp" : helpPath); tabsHtml.push( '<li>', - '<a class="item ', disableHelp,'" href="', path, '">', + '<a class="item ', disableHelp,' ',cssClass,'" href="', path, '">', title, '</a>', - '<input id="helpPathId" name="helpPath" value="' + helpPath + '" type="hidden"/>', + '<input id="helpPathId" name="helpPath" class="sr-only" value="' + helpPath + '" type="hidden"/>', '</li>' ); } @@ -51,6 +52,7 @@ wok.main = function() { var $tab = $(this); var titleKey = $tab.find('title').text(); var title = i18n[titleKey] ? i18n[titleKey] : titleKey; + var css = $tab.find('class').text(); var path = $tab.find('path').text(); var roles = wok.cookie.get('roles'); if (roles) { @@ -60,6 +62,7 @@ wok.main = function() { tabs.push({ title: title, path: path, + css: css, mode: mode }); } else { @@ -113,7 +116,8 @@ wok.main = function() { DEFAULT_HASH = defaultTabPath && defaultTabPath.substring(0, defaultTabPath.lastIndexOf('.')) } - $('#nav-menu').append(genTabs(tabs)); + $('#nav-menu ul.navbar-nav li.hostname').after(genTabs(tabs)); + wok.getHostname(); callback && callback(); }, function(data) { @@ -142,7 +146,7 @@ wok.main = function() { * point to the tab. If nothing found, inform user the URL is invalid * and clear location.hash to jump to home page. */ - var tab = $('#nav-menu a[href="' + url + '"]'); + var tab = $('#nav-menu ul li a[href="' + url + '"]'); if (tab.length === 0 && url!='wok-empty.html') { location.hash = ''; return; @@ -150,20 +154,14 @@ wok.main = function() { //Remove the tab arrow indicator for no plugin if(url=='wok-empty.html'){ - $('.menu-arrow').hide(); $('#main').html('No plugins installed currently.You can download the available plugins <a href="https://github.com/kimchi-project/kimchi">Kimchi</a> and <a href="https://github.com/kimchi-project/ginger">Ginger</a> from Github').addClass('noPluginMessage'); }else{ - // Animate arrow indicator. - var left = $(tab).parent().position().left; - var width = $(tab).parent().width(); - $('.menu-arrow').stop().animate({ - left : left + width / 2 - 10 - }); - + // Update the visual style of tabs; focus the selected one. - $('#nav-menu a').removeClass('current'); - $(tab).addClass('current'); + $('#nav-menu ul li').removeClass('active'); + $(tab).parent().addClass('active'); $(tab).focus(); + // Disable Help button according to selected tab if ($(tab).hasClass("disableHelp")) { $('#btn-help').css('cursor', "not-allowed"); @@ -240,7 +238,7 @@ wok.main = function() { * Register click listener of tabs. Replace the default reloading page * behavior of <a> with Ajax loading. */ - $('#nav-menu').on('click', 'a.item', function(event) { + $('#nav-menu ul li').on('click', 'a.item', function(event) { var href = $(this).attr('href'); // Remove file extension from 'href' location.hash = href.substring(0,href.lastIndexOf('.')) @@ -279,7 +277,7 @@ wok.main = function() { $('#peers').on('click', function() { // Check if any request is in progress - if ($('.popover', '#peers').is(':visible') || searchingPeers == true) + if ($('.dropdown', '#peers').is('.open') || searchingPeers == true) return $('#search-peers').show(); @@ -294,7 +292,7 @@ wok.main = function() { $('#no-peers').removeClass('hide-content'); for(var i=0; i<data.length; i++){ - $('.dropdown', '#peers').append("<a href='"+data[i]+"' target='_blank'>"+data[i]+"</a>"); + $('.dropdown-menu ', '#peers').append("<li><a href='"+data[i]+"' target='_blank'>"+data[i]+"</a></li>"); } searchingPeers = false; }); @@ -329,6 +327,28 @@ wok.main = function() { wok.user.showUser(true); initListeners(); updatePage(); + + // Overriding Bootstrap Modal windows to allow a stack of modal windows and backdrops + $(document).on({ + 'show.bs.modal': function () { + var zIndex = 1040 + (10 * $('.modal:visible').length); + $(this).css('z-index', zIndex); + setTimeout(function() { + $('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack'); + }, 0); + }, + 'hidden.bs.modal': function() { + if ($('.modal:visible').length > 0) { + // restore the modal-open class to the body element, so that scrolling works + // properly after de-stacking a modal. + setTimeout(function() { + $(document.body).addClass('modal-open'); + }, 0); + } + } + }, '.modal'); + + }; // Load i18n translation strings first and then render the page. @@ -361,10 +381,15 @@ wok.checkHelpFile = function(path) { return url; }; +wok.getHostname = function(e) { + host = window.location.hostname; + $('span.host-location').text(host); + return host; +} wok.openHelp = function(e) { var tab = $('#nav-menu a.current'); var url = $(tab).parent().find("input[name='helpPath']").val(); window.open(url, "Wok Help"); e.preventDefault(); -}; +}; \ No newline at end of file diff --git a/ui/js/src/wok.message.js b/ui/js/src/wok.message.js index bd650e0..ce6ba25 100644 --- a/ui/js/src/wok.message.js +++ b/ui/js/src/wok.message.js @@ -18,101 +18,48 @@ * limitations under the License. */ wok.message = function(msg, level, node) { - var container = node || $('#messageField'); + "use strict"; + var container = node || $('#alert-fields'); if ($(container).size() < 1) { - container = $('<div id="messageField"/>').appendTo(document.body); + container = $('<div id="alert-fields"/>').appendTo($('#alert-container')); } - var message = '<div class="message ' + (level || '') + '" style="display: none;">'; + var message = '<div role="alert" class="alert ' + (level || '') + ' alert-dismissible fade in" style="display: none;">'; if(!node) { - message += '<div class="close">X</div>'; + message += '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true"><i class="fa fa-times-circle"></i></span></button>'; } - message += '<div class="content">' + msg + '</div>'; + message += msg; message += '</div>'; var $message = $(message); $(container).append($message); + $message.alert(); $message.fadeIn(100); setTimeout(function() { $message.fadeOut(2000, function() { + $message.alert('close'); $(this).remove(); + $(container).remove(); + if ($(container).children().length < 1) { + $(container).remove(); + } }); }, 4000); - - $(container).on("click", ".close", function(e) { - $(this).parent().fadeOut(200, function() { - $(this).remove(); - }); - }); -}; - -/** - * A public function of confirm box. - * - * @param msg - * type:[object] - * @param msg.title - * The title of the confirm box. - * @param msg.content - * The main text of the confirm box. - * @param msg.confirm - * The text of the confirm button. - * @param msg.cancel - * the text of the cancel button. - * @param confirmCallback - * the callback function of click the confirm button. - * @param cancelCallback - * The callback function of click the cancel and X button. - */ -wok.confirm = function(settings, confirmCallback, cancelCallback) { - if ($('#confirmbox-container ').size() < 1) { - $(document.body).append('<div id="confirmbox-container" class="bgmask"></div>'); - } - var confirmboxHtml = '<div class="confirmbox">'; - confirmboxHtml += '<header>'; - confirmboxHtml += '<h4 class="title">' + (settings.title || '') + '</h4>'; - confirmboxHtml += '<div class="close cancel">X</div>'; - confirmboxHtml += '</header>'; - confirmboxHtml += '<div class="content">'; - confirmboxHtml += settings.content + '</div>'; - confirmboxHtml += '<footer>'; - confirmboxHtml += '<div class="btn-group">'; - confirmboxHtml += '<button id="button-confirm" class="btn-small"><span class="text">' + (settings.confirm || i18n['KCHAPI6004M']) + '</span></button>'; - confirmboxHtml += '<button id="button-cancel" class="btn-small cancel"><span class="text">' + (settings.cancel || i18n['KCHAPI6003M']) + '</span></button>'; - confirmboxHtml += '</div>'; - confirmboxHtml += '</footer>'; - confirmboxHtml += '</div>'; - var confirmboxNode = $(confirmboxHtml); - $('#confirmbox-container').append(confirmboxNode); - confirmboxNode.fadeIn(); - - $('#confirmbox-container').on("click", "#button-confirm", function(e) { - if (confirmCallback) { - confirmCallback(); - } - confirmboxNode.fadeOut(1, function() { - $('#confirmbox-container').remove(); - }); - }); - $('#confirmbox-container').on("click", ".cancel", function(e) { - if (cancelCallback) { - cancelCallback(); - } - confirmboxNode.fadeOut(1, function() { - $('#confirmbox-container').remove(); - }); - }); }; wok.message.warn = function(msg, node) { - wok.message(msg, 'warn', node); + "use strict"; + wok.message(msg, 'alert-warning', node); }; wok.message.error = function(msg, node) { - wok.message(msg, 'error', node); + "use strict"; + wok.message(msg, 'alert-danger', node); }; wok.message.error.code = function(code) { - msg = code + ": " + i18n[code] - wok.message(msg, 'error'); + "use strict"; + msg = code + ": " + i18n[code]; + wok.message(msg, 'alert-danger'); }; wok.message.success = function(msg, node) { - wok.message(msg, 'success', node); + "use strict"; + wok.message(msg, 'alert-success', node); }; diff --git a/ui/js/src/wok.window.js b/ui/js/src/wok.window.js index ef00a77..d50fc6d 100644 --- a/ui/js/src/wok.window.js +++ b/ui/js/src/wok.window.js @@ -18,13 +18,16 @@ * limitations under the License. */ wok.window = (function() { + "use strict"; var _windows = []; var _listeners = {}; - var open = function(settings) { - var settings = jQuery.type(settings) === 'object' ? settings : { + var open = function(settings, target) { + settings = jQuery.type(settings) === 'object' ? settings : { url: settings }; + target = (typeof target === 'undefined') ? 'modalWindow' : target; + var windowID = settings['id'] || 'window-' + _windows.length; if ($('#' + windowID).length) { @@ -33,14 +36,15 @@ wok.window = (function() { _windows.push(windowID); _listeners[windowID] = settings['close']; - var windowNode = $('<div></div>', { - id: windowID, - 'class': settings['class'] ? settings['class'] + ' bgmask remove-when-logged-off' : 'bgmask remove-when-logged-off' - }); + var windowNode = $('<div id="' + windowID + '" class="modal-dialog"></div>'); - $(windowNode).css(settings['style'] || ''); + $('#' + target).modal('show'); - $(windowNode).appendTo('body').on('click', '.window .close', function() { + $('#' + target).on('hidden.bs.modal', function() { + $('#' + windowID).remove(); + }); + + $(windowNode).appendTo('#' + target).on('click', '.window .close', function() { wok.window.close(); }); @@ -54,15 +58,16 @@ wok.window = (function() { var close = function() { var windowID = _windows.pop(); - if(_listeners[windowID]) { + if (_listeners[windowID]) { _listeners[windowID](); _listeners[windowID] = null; } - delete _listeners[windowID]; + $('#' + windowID).parent().modal('toggle'); + $('#' + windowID).parent().on('hidden.bs.modal', function() { + delete _listeners[windowID]; + $('#' + windowID).remove(); + }) - $('#' + windowID).fadeOut(100, function() { - $(this).remove(); - }); }; return { diff --git a/ui/js/widgets/grid.js b/ui/js/widgets/grid.js deleted file mode 100644 index 1f47495..0000000 --- a/ui/js/widgets/grid.js +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Project Wok - * - * Copyright IBM, Corp. 2015 - * - * 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. - */ - -$(function(){ -$.widget("wok.grid", { - options: { - enableSorting: true - }, - _create: function() { - var that = this; - this.element.addClass('grid'); - var head = $(this.element.children().get(0)); - var body = $(this.element.children().get(1)); - head.addClass('header c1 bold grey'); - if(this.options.enableSorting){ - head.children().each(function(){ - var addSorting = "<span>"+$(this).html()+"</span>"; - addSorting += "<span><div class='icon-angle-up sort-up'></div><div class='icon-angle-down sort-down'></div></span>"; - $(this).empty().append(addSorting); - }); - } - $('.icon-angle-up', head).click(function(){ - that.sort(head.children().index($(this).parent().parent()), true); - }); - $('.icon-angle-down', head).click(function(){ - that.sort(head.children().index($(this).parent().parent()), false); - }); - body.addClass('body c1 normal dark-grey'); - body.children().addClass('row'); - this._setRowBackgroud(); - }, - _setRowBackgroud: function(){ - var i=0, classes=['odd', 'even']; - $(this.element.children().get(1)).children().each(function(){ - $(this).removeClass('odd'); - $(this).removeClass('even'); - $(this).addClass(classes[i]); - i = i==0?1:0; - }); - }, - sort: function(column, assending) { - var head = $(this.element.children().get(0)); - $('.icon-up-dir', head).removeClass('icon-up-dir').addClass('icon-angle-up'); - $('.icon-down-dir', head).removeClass('icon-down-dir').addClass('icon-angle-down'); - var columnCell = $(head.children().get(column)); - if(assending){ - $('.icon-angle-up', columnCell).removeClass('icon-angle-up').addClass('icon-up-dir'); - }else{ - $('.icon-angle-down', columnCell).removeClass('icon-angle-down').addClass('icon-down-dir'); - } - var container = $(this.element.children().get(1)); - var nodes = []; - container.children().each(function(){ - nodes.push($(this)); - }); - nodes.sort(function(a, b){ - aVal = $(a.children().get(column)).attr('val'); - bVal = $(b.children().get(column)).attr('val'); - return aVal.localeCompare(bVal); - }); - if(!assending) nodes.reverse(); - container.empty(); - for(var i=0;i<nodes.length;i++){ - container.append(nodes[i]); - } - this._setRowBackgroud(); - }, - filter: function(keyword) { - keyword = keyword.toLowerCase(); - var container = $(this.element.children().get(1)); - container.children().each(function(){ - var hide = true; - $(this).children().each(function(){ - if($(this).attr('val')&&$(this).attr('val').toLowerCase().indexOf(keyword)!=-1){ - hide = false; - return false; - } - }); - $(this).css('display', hide?'none':''); - }); - this._setRowBackgroud(); - }, - addRow: function(rowNode){ - $(rowNode).addClass('row'); - this._setRowBackgroud(); - }, - deleteRow: function(rowNode){ - $(rowNode).remove(); - this._setRowBackgroud(); - }, - _destroy: function() { - this.element.removeClass('grid'); - var head = $(this.element.children().get(0)); - var body = $(this.element.children().get(1)); - head.removeClass('header c1 bold grey'); - if(this.options.enableSorting){ - head.children().each(function(){ - var oriContent = $($(this).children().get(0)).html() - $(this).empty().append(oriContent); - }); - } - body.removeClass('body c1 normal dark-grey'); - body.children().removeClass('row odd even'); - } -}); -}); -- 1.9.3

From: samhenri <samuel.guimaraes@eldorado.org.br> Signed-off-by: samhenri <samuel.guimaraes@eldorado.org.br> --- src/wok/plugins/kimchi/ui/config/tab-ext.xml | 8 +- ui/js/widgets/samples/grid.html | 4 +- ui/pages/login.html.tmpl | 186 +++++++++++----------- ui/pages/wok-ui.html.tmpl | 222 ++++++++++++++------------- 4 files changed, 225 insertions(+), 195 deletions(-) diff --git a/src/wok/plugins/kimchi/ui/config/tab-ext.xml b/src/wok/plugins/kimchi/ui/config/tab-ext.xml index 48ec9ec..415dbf1 100644 --- a/src/wok/plugins/kimchi/ui/config/tab-ext.xml +++ b/src/wok/plugins/kimchi/ui/config/tab-ext.xml @@ -3,28 +3,28 @@ <tab> <access role="admin" mode="admin"/> <access role="user" mode="byInstance"/> - + <class>guests</class> <title>Guests</title> <path>plugins/kimchi/guests.html</path> </tab> <tab> <access role="admin" mode="admin"/> <access role="user" mode="none"/> - + <class>templates</class> <title>Templates</title> <path>plugins/kimchi/templates.html</path> </tab> <tab> <access role="admin" mode="admin"/> <access role="user" mode="read-only"/> - + <class>storage</class> <title>Storage</title> <path>plugins/kimchi/storage.html</path> </tab> <tab> <access role="admin" mode="admin"/> <access role="user" mode="read-only"/> - + <class>network</class> <title>Network</title> <path>plugins/kimchi/network.html</path> </tab> diff --git a/ui/js/widgets/samples/grid.html b/ui/js/widgets/samples/grid.html index 860874f..ac667ac 100644 --- a/ui/js/widgets/samples/grid.html +++ b/ui/js/widgets/samples/grid.html @@ -57,9 +57,9 @@ input { </style> <script> function init(){ - $('#ibmers').grid({enableSorting: true}); + $('#ibmers').dataGrid({enableSorting: true}); $('input').on('keyup', function(){ - $('#ibmers').grid('filter', ($(this).val())); + $('#ibmers').dataGrid('filter', ($(this).val())); }); } </script> diff --git a/ui/pages/login.html.tmpl b/ui/pages/login.html.tmpl index 2703d02..92eb3d5 100644 --- a/ui/pages/login.html.tmpl +++ b/ui/pages/login.html.tmpl @@ -28,95 +28,109 @@ <!DOCTYPE html> <html lang="$lang.lang[0]"> <head> -<meta charset="UTF-8"> -<title>Kimchi</title> -<meta http-equiv="X-UA-Compatible" content="IE=edge"/> -<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> -<meta name="apple-mobile-web-app-capable" content="yes"> -<meta name="apple-mobile-web-app-title" content="Wok"> -<link href="images/apple-touch-icon-152.png" sizes="152x152" rel="apple-touch-icon-precomposed"> -<link href="images/apple-touch-icon-144.png" sizes="144x144" rel="apple-touch-icon-precomposed"> -<link href="images/apple-touch-icon-76.png" sizes="76x76" rel="apple-touch-icon-precomposed"> -<link href="images/apple-touch-icon-72.png" sizes="72x72" rel="apple-touch-icon-precomposed"> -<link href="images/apple-touch-icon-180x180.png" sizes="120x120" rel="apple-touch-icon-precomposed"> -<link href="images/apple-touch-icon-114x114.png" sizes="114x114" rel="apple-touch-icon-precomposed"> -<link href="images/apple-touch-icon-57x57.png" sizes="57x57" rel="apple-touch-icon-precomposed"> -<link rel="icon" type="image/png" href="images/android-chrome-192x192.png" sizes="192x192"> -<!--[if IE lte 9]><link rel="shortcut icon" href="images/favicon.ico"><![endif]--> -<link rel="shortcut icon" href="images/favicon.png"> -<meta name="application-name" content="Wok"> -<meta name="msapplication-config" content="none" /> -<meta name="msapplication-TileColor" content="#4f4f4f"/> -<meta name="msapplication-square70x70logo" content="images/tiny.png"/> -<meta name="msapplication-square150x150logo" content="images/square.png"/> -<meta name="msapplication-wide310x150logo" content="images/wide.png"/> -<meta name="msapplication-square310x310logo" content="images/large.png"/> -<link rel="stylesheet" href="$href('libs/jquery-ui/themes/base/jquery-ui.min.css')"> -<link rel="stylesheet" href="$href('css/jquery-ui.custom.css')"> -<link rel="stylesheet" href="$href('css/theme-default.min.css')"> -<script src="$href('libs/jquery/jquery.min.js')"></script> -<script src="$href('libs/jquery-ui/jquery-ui.min.js')"></script> -<script src="$href('libs/jquery-ui/jquery-ui-i18n.min.js')"></script> -<script src="$href('js/wok.min.js')"></script> -<style type="text/css"> -.topbar select { - float: right; - margin-top: 12px; - margin-right: 10px; -} -.login-area { - margin: 120px auto 0; -} -#login-window { - width: 315px; -} -.err-area { - height: auto; - margin-bottom: 10px; -} -.err-mess { - color: #C85305; -} -</style> + <meta charset="UTF-8"> + <title>Kimchi</title> + <meta http-equiv="X-UA-Compatible" content="IE=edge" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> + <meta name="apple-mobile-web-app-capable" content="yes"> + <meta name="apple-mobile-web-app-title" content="Wok"> + <link href="images/apple-touch-icon-152.png" sizes="152x152" rel="apple-touch-icon-precomposed"> + <link href="images/apple-touch-icon-144.png" sizes="144x144" rel="apple-touch-icon-precomposed"> + <link href="images/apple-touch-icon-76.png" sizes="76x76" rel="apple-touch-icon-precomposed"> + <link href="images/apple-touch-icon-72.png" sizes="72x72" rel="apple-touch-icon-precomposed"> + <link href="images/apple-touch-icon-180x180.png" sizes="120x120" rel="apple-touch-icon-precomposed"> + <link href="images/apple-touch-icon-114x114.png" sizes="114x114" rel="apple-touch-icon-precomposed"> + <link href="images/apple-touch-icon-57x57.png" sizes="57x57" rel="apple-touch-icon-precomposed"> + <link rel="icon" type="image/png" href="images/android-chrome-192x192.png" sizes="192x192"> + <!--[if IE lte 9]><link rel="shortcut icon" href="images/favicon.ico"><![endif]--> + <link rel="shortcut icon" href="images/favicon.png"> + <meta name="application-name" content="Wok"> + <meta name="msapplication-config" content="none" /> + <meta name="msapplication-TileColor" content="#4f4f4f" /> + <meta name="msapplication-square70x70logo" content="images/tiny.png" /> + <meta name="msapplication-square150x150logo" content="images/square.png" /> + <meta name="msapplication-wide310x150logo" content="images/wide.png" /> + <meta name="msapplication-square310x310logo" content="images/large.png" /> + <link rel="stylesheet" href="$href('libs/jquery-ui/themes/base/jquery-ui.min.css')"> + <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('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/wok.css')"> + <script src="$href('libs/es5-shim/es5-shim.min.js')"></script> + <script src="$href('libs/jquery/jquery.min.js')"></script> + <script src="$href('libs/jquery-ui/jquery-ui.min.js')"></script> + <script src="$href('libs/jquery-ui/jquery-ui-i18n.min.js')"></script> + <script src="$href('libs/jquery-i18n/jquery.i18n.min.js')"></script> + <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('js/wok.min.js')"></script> </head> <body onload="wok.login_main()"> -<div class="container topbar"> - <span id="logo"><img alt="Project Wok" src="images/theme-default/logo-white.png"></span> - <select id="userLang"> - <option value="en_US">English (US)</option> - <option value="zh_CN">中文(简体)</option> - <option value="pt_BR">Português (Brasil)</option> - <option value="de_DE">Deutsch (Deutschland)</option> - <option value="es_ES">Español (España)</option> - <option value="fr_FR">Français (France)</option> - <option value="it_IT">Italiano (Italia)</option> - <option value="ja_JP">日本語 (日本)</option> - <option value="ko_KR">한국어 (대한민국)</option> - <option value="ru_RU">Русский (Россия)</option> - <option value="zh_TW">中文(繁體)</option> - </select> -</div> -<div id="login-window" class="login-area"> - <div class="err-area"> - <div id="messUserPass" class="err-mess" style="display: none;">$_("The username or password you entered is incorrect. Please try again.")</div> - <div id="messSession" class="err-mess" style="display: none;">$_("Session timeout, please re-login.")</div> + <div class="topbar"> + <nav class="navbar navbar-inverse"> + <div class="container"> + <div class="navbar-header"> + <a class="navbar-brand" href="#">Kimchi</a> + </div> + </div> + </nav> + <nav class="navbar navbar-default"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav-menu" aria-expanded="false"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"><!-- Hamburguer button here --></span> + </button> + </div> + <div class="collapse navbar-collapse" id="nav-menu"> + <ul class="nav navbar-nav"> + <li class="hostname"><span class="host-location"></span></li> + </ul> + </div> + </div> + </nav> </div> - <form id="form-login" class="login-panel" method="post"> - <div class="row"> - <input type="text" id="username" name="username" required="required" placeholder="$_("User Name")" autofocus/> - <div id="username-msg" class="msg-required"></div> + <div class="content"> + <div id="login-window" class="login-area"> + <div class="err-area"> + <div id="messUserPass" class="alert alert-danger" style="display: none;">$_("The username or password you entered is incorrect. Please try again.")</div> + <div id="messSession" class="alert alert-danger" style="display: none;">$_("Session timeout, please re-login.")</div> + </div> + <form id="form-login" class="form-horizontal" method="post"> + <div class="form-group"> + <label for="username" class="sr-only">$_("User Name")</label> + <input type="text" class="form-control" id="username" name="username" required="required" placeholder="$_(" User Name ")" autofocus autocomplete="off" /> + <div id="username-msg" class="msg-required"></div> + </div> + <div class="form-group"> + <label for="password" class="sr-only">$_("Password")</label> + <input type="password" class="form-control" id="password" name="password" required="required" placeholder="$_(" Password ")" autocomplete="off" /> + <div id="password-msg" class="msg-required"></div> + </div> + <div class="form-group"> + <button id="btn-login" class="btn btn-login col-md-12 col-lg-12"> + <span id="login">$_("Log in")</span> + <span id="logging" style="display: none;">$_("Logging in...")</span> + </button> + </div> + <select id="userLang" class="selectpicker col-md-12 col-lg-12"> + <option value="en_US">English (US)</option> + <option value="zh_CN">中文(简体)</option> + <option value="pt_BR">Português (Brasil)</option> + <option value="de_DE">Deutsch (Deutschland)</option> + <option value="es_ES">Español (España)</option> + <option value="fr_FR">Français (France)</option> + <option value="it_IT">Italiano (Italia)</option> + <option value="ja_JP">日本語 (日本)</option> + <option value="ko_KR">한국어 (대한민국)</option> + <option value="ru_RU">Русский (Россия)</option> + <option value="zh_TW">中文(繁體)</option> + </select> + </form> </div> - <div class="row"> - <input type="password" id="password" name="password" required="required" placeholder="$_("Password")" /> - <div id="password-msg" class="msg-required"></div> - </div> - <div class="row"> - <button id="btn-login" class="btn-normal-1"> - <label id="login">$_("Log in")</label> - <label id="logging" style="display: none;">$_("Logging in...")</label> - </button> - </div> - </form> -</div> + </div> </body> </html> diff --git a/ui/pages/wok-ui.html.tmpl b/ui/pages/wok-ui.html.tmpl index f2a09f5..acfae27 100644 --- a/ui/pages/wok-ui.html.tmpl +++ b/ui/pages/wok-ui.html.tmpl @@ -24,118 +24,134 @@ #silent _ = t.gettext #silent _t = t.gettext #from wok.config import get_version -<!DOCTYPE html> <html lang="$lang.lang[0]"> <head> -<meta charset="UTF-8"> -<title>Kimchi</title> -<meta http-equiv="X-UA-Compatible" content="IE=edge"/> -<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> -<meta name="apple-mobile-web-app-capable" content="yes"> -<meta name="apple-mobile-web-app-title" content="Wok"> -<link href="images/apple-touch-icon-152.png" sizes="152x152" rel="apple-touch-icon-precomposed"> -<link href="images/apple-touch-icon-144.png" sizes="144x144" rel="apple-touch-icon-precomposed"> -<link href="images/apple-touch-icon-76.png" sizes="76x76" rel="apple-touch-icon-precomposed"> -<link href="images/apple-touch-icon-72.png" sizes="72x72" rel="apple-touch-icon-precomposed"> -<link href="images/apple-touch-icon-180x180.png" sizes="120x120" rel="apple-touch-icon-precomposed"> -<link href="images/apple-touch-icon-114x114.png" sizes="114x114" rel="apple-touch-icon-precomposed"> -<link href="images/apple-touch-icon-57x57.png" sizes="57x57" rel="apple-touch-icon-precomposed"> -<link rel="icon" type="image/png" href="images/android-chrome-192x192.png" sizes="192x192"> -<!--[if IE lte 9]><link rel="shortcut icon" href="images/favicon.ico"><![endif]--> -<link rel="shortcut icon" href="images/favicon.png"> -<meta name="application-name" content="Wok"> -<meta name="msapplication-config" content="none" /> -<meta name="msapplication-TileColor" content="#4f4f4f"/> -<meta name="msapplication-square70x70logo" content="images/tiny.png"/> -<meta name="msapplication-square150x150logo" content="images/square.png"/> -<meta name="msapplication-wide310x150logo" content="images/wide.png"/> -<meta name="msapplication-square310x310logo" content="images/large.png"/> -<link rel="stylesheet" href="$href('libs/jquery-ui/themes/base/jquery-ui.min.css')"> -<link rel="stylesheet" href="$href('css/jquery-ui.custom.css')"> -<link rel="stylesheet" href="$href('css/theme-default.min.css')"> - -<script src="$href('libs/jquery/jquery.min.js')"></script> -<script src="$href('libs/jquery-ui/jquery-ui.min.js')"></script> -<script src="$href('libs/jquery-ui/jquery-ui-i18n.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 --> -<style type="text/css"> -#buildme { - position: fixed; - background: rgba(0, 0, 0, 0.5); - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 10000; -} - -#buildme div { - background-color: #FFB2C0; - border-style: solid; - border-color: #FF0000; - padding: 30px; - width: 75%; - margin-left: auto; - margin-right: auto; - margin-top: 50px; - -moz-border-radius: 15px; - border-radius: 15px; -} -</style> -</head> + <meta charset="UTF-8"> + <title>Kimchi</title> + <meta http-equiv="X-UA-Compatible" content="IE=edge" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> + <meta name="apple-mobile-web-app-capable" content="yes"> + <meta name="apple-mobile-web-app-title" content="Wok"> + <link href="images/apple-touch-icon-152.png" sizes="152x152" rel="apple-touch-icon-precomposed"> + <link href="images/apple-touch-icon-144.png" sizes="144x144" rel="apple-touch-icon-precomposed"> + <link href="images/apple-touch-icon-76.png" sizes="76x76" rel="apple-touch-icon-precomposed"> + <link href="images/apple-touch-icon-72.png" sizes="72x72" rel="apple-touch-icon-precomposed"> + <link href="images/apple-touch-icon-180x180.png" sizes="120x120" rel="apple-touch-icon-precomposed"> + <link href="images/apple-touch-icon-114x114.png" sizes="114x114" rel="apple-touch-icon-precomposed"> + <link href="images/apple-touch-icon-57x57.png" sizes="57x57" rel="apple-touch-icon-precomposed"> + <link rel="icon" type="image/png" href="images/android-chrome-192x192.png" sizes="192x192"> + <!--[if IE lte 9]><link rel="shortcut icon" href="images/favicon.ico"><![endif]--> + <link rel="shortcut icon" href="images/favicon.png"> + <meta name="application-name" content="Wok"> + <meta name="msapplication-config" content="none" /> + <meta name="msapplication-TileColor" content="#4f4f4f" /> + <meta name="msapplication-square70x70logo" content="images/tiny.png" /> + <meta name="msapplication-square150x150logo" content="images/square.png" /> + <meta name="msapplication-wide310x150logo" content="images/wide.png" /> + <meta name="msapplication-square310x310logo" content="images/large.png" /> + <link rel="stylesheet" href="$href('libs/jquery-ui/themes/base/jquery-ui.min.css')"> + <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('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/wok.css')"> + <script src="$href('libs/es5-shim/es5-shim.min.js')"></script> + <script src="$href('libs/jquery/jquery.min.js')"></script> + <script src="$href('libs/jquery-ui/jquery-ui.min.js')"></script> + <script src="$href('libs/jquery-ui/jquery-ui-i18n.min.js')"></script> + <script src="$href('libs/jquery-i18n/jquery.i18n.min.js')"></script> + <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('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 --> + <style type="text/css"> + #buildme { + position: fixed; + background: rgba(0, 0, 0, 0.5); + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 10000; + } + #buildme div { + background-color: #FFB2C0; + border-style: solid; + border-color: #FF0000; + padding: 30px; + width: 75%; + margin-left: auto; + margin-right: auto; + margin-top: 50px; + -moz-border-radius: 15px; + border-radius: 15px; + } + </style> + </head> <body onload="wok.main()"> -<div class="container"> -<header class="topbar"> - <h1 id="logo"><img alt="Project Wok" src="images/theme-default/logo-white.png"></h1> - <ul class="nav-top"> - <li> - <div id="peers" class="peers hide-content popable"> - <span>$_("Peers")</span> - <span class="arrow"></span> - <div class="dropdown popover right-side"> - <p id="search-peers">$_("Searching")...</p> - <p id="no-peers" class="hide-content">$_("No peers found.")</p> - </div> + <div class="topbar"> + <nav class="navbar navbar-inverse"> + <div class="container"> + <div class="navbar-header"> + <a id="logo" class="navbar-brand" href="#" title="Project Kimchi">Kimchi</a> </div> - </li> - <li> - <div id="user" class="popable"> - <span id="user-icon"></span> - <span id="user-name" class="empty-when-logged-off"></span> - <span class="arrow"></span> - <div class="action-panel popover right-side"> - <a id="btn-help" class="user-menu-item" href="javascript:void(0);">$_("Help")</a> - <br/> - <br/> - <a id="btn-about" class="user-menu-item" href="javascript:void(0);">$_("About")</a> - <br/> - <hr/> - <a id="btn-logout" class="user-menu-item" href="javascript: void(0);">$_("Log out")</a> - </div> + <ul class="nav navbar-nav navbar-right"> + <li class="dropdown hide-content peers" id="peers"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="topbar-text">$_("Peers")</span><span class="caret"></span></a> + <ul class="dropdown-menu"> + <li id="search-peers"><span>$_("Searching")...</span></li> + <li id="no-peers" class="hide-content">$_("No peers found.")</li> + </ul> + </li> + <li class="dropdown" id="user"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> + <i class="fa fa-user" id="user-icon"></i><span class="topbar-text empty-when-logged-off" id="user-name"></span><span class="caret"></span> + </a> + <ul class="dropdown-menu"> + <li class="critical"><a id="btn-logout" href="javascript: void(0);"><i class="fa fa-ban"></i><span>$_("Log out")</span></a></li> + </ul> + </li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><i class="fa fa-question-circle"></i><span class="topbar-text">$_("Help")</span><span class="caret"></span></a> + <ul class="dropdown-menu"> + <li><a id="btn-help" href="javascript: void(0);">$_("Help")</a></li> + <li><a id="btn-about" href="javascript:void(0);">$_("About")</a></li> + </ul> + </li> + </ul> + </div> + </nav> + <nav class="navbar navbar-default"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#nav-menu" aria-expanded="false"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"><!-- Hamburguer button here --></span> + </button> + </div> + <div class="collapse navbar-collapse" id="nav-menu"> + <ul class="nav navbar-nav"> + <li class="hostname"><span class="host-location"></span></li> + </ul> </div> - </li> - </ul> -</header> -<div class="content"> - <nav class="navbar"> - <ul id="nav-menu" class="nav-menu"> - <li class="menu-arrow"></li> - </ul> - </nav> - <div id="main"> + </div> + </nav> + </div> + <div class="content"> + <div id="main"> + </div> + </div> </div> -</div> -</div> -<div id="buildme"> - <div><p>Oops! It looks like I am running from a source tree and you forgot to build! + <div id="buildme" style="display:none"> + <div><p>Oops! It looks like I am running from a source tree and you forgot to build! Please run the following command from the wok and kimchi directories and reload this page:</p> - <p><code>make</code></p> + <p><code>make</code></p> + </div> </div> -</div> <script id="about-tmpl" type="wok/template"> <div class="window about-window"> -- 1.9.3

From: samhenri <samuel.guimaraes@eldorado.org.br> Signed-off-by: samhenri <samuel.guimaraes@eldorado.org.br> --- src/wok/plugins/gingerbase/.gitignore | 2 +- src/wok/plugins/gingerbase/configure.ac | 1 - src/wok/plugins/gingerbase/ui/config/tab-ext.xml | 2 +- src/wok/plugins/gingerbase/ui/css/Makefile.am | 11 +- .../plugins/gingerbase/ui/css/src/gingerbase.scss | 29 + .../gingerbase/ui/css/src/modules/_host.scss | 172 ++++++ .../gingerbase/ui/css/theme-default/host.css | 289 ---------- .../gingerbase/ui/css/theme-default/report-add.css | 39 -- .../ui/css/theme-default/report-rename.css | 41 -- .../ui/css/theme-default/repository-add.css | 44 -- .../ui/css/theme-default/repository-edit.css | 90 --- src/wok/plugins/gingerbase/ui/images/Makefile.am | 2 - src/wok/plugins/gingerbase/ui/images/logo.ico | Bin 1214 -> 15086 bytes .../gingerbase/ui/images/theme-default/Makefile.am | 20 - .../ui/images/theme-default/host-icon-sprite.png | Bin 1034 -> 0 bytes .../images/theme-default/kimchi-loading15x15.gif | Bin 1653 -> 0 bytes .../gingerbase/ui/js/src/gingerbase.host.js | 642 +++++++++++---------- src/wok/plugins/gingerbase/ui/pages/host.html.tmpl | 211 +++---- .../gingerbase/ui/pages/report-add.html.tmpl | 46 +- .../gingerbase/ui/pages/report-rename.html.tmpl | 42 +- .../gingerbase/ui/pages/repository-add.html.tmpl | 124 ++-- .../gingerbase/ui/pages/repository-edit.html.tmpl | 138 ++--- 22 files changed, 759 insertions(+), 1186 deletions(-) create mode 100644 src/wok/plugins/gingerbase/ui/css/src/gingerbase.scss create mode 100644 src/wok/plugins/gingerbase/ui/css/src/modules/_host.scss delete mode 100644 src/wok/plugins/gingerbase/ui/css/theme-default/host.css delete mode 100644 src/wok/plugins/gingerbase/ui/css/theme-default/report-add.css delete mode 100644 src/wok/plugins/gingerbase/ui/css/theme-default/report-rename.css delete mode 100644 src/wok/plugins/gingerbase/ui/css/theme-default/repository-add.css delete mode 100644 src/wok/plugins/gingerbase/ui/css/theme-default/repository-edit.css delete mode 100644 src/wok/plugins/gingerbase/ui/images/theme-default/Makefile.am delete mode 100644 src/wok/plugins/gingerbase/ui/images/theme-default/host-icon-sprite.png delete mode 100644 src/wok/plugins/gingerbase/ui/images/theme-default/kimchi-loading15x15.gif diff --git a/src/wok/plugins/gingerbase/.gitignore b/src/wok/plugins/gingerbase/.gitignore index 96e8ab4..fd46e05 100644 --- a/src/wok/plugins/gingerbase/.gitignore +++ b/src/wok/plugins/gingerbase/.gitignore @@ -22,7 +22,6 @@ contrib/DEBIAN/control contrib/gingerbase.spec.fedora contrib/gingerbase.spec.suse contrib/make-deb.sh -*.min.css *.min.js *.gmo stamp-po @@ -35,3 +34,4 @@ po/gen-pot *.rej *.pem ui/pages/help/*/*.html +ui/css/gingerbase.css \ No newline at end of file diff --git a/src/wok/plugins/gingerbase/configure.ac b/src/wok/plugins/gingerbase/configure.ac index 00aba89..055c8f8 100644 --- a/src/wok/plugins/gingerbase/configure.ac +++ b/src/wok/plugins/gingerbase/configure.ac @@ -75,7 +75,6 @@ AC_CONFIG_FILES([ ui/config/Makefile ui/css/Makefile ui/images/Makefile - ui/images/theme-default/Makefile ui/js/Makefile ui/pages/Makefile ui/pages/help/Makefile diff --git a/src/wok/plugins/gingerbase/ui/config/tab-ext.xml b/src/wok/plugins/gingerbase/ui/config/tab-ext.xml index 2d2d9bd..8366f1f 100644 --- a/src/wok/plugins/gingerbase/ui/config/tab-ext.xml +++ b/src/wok/plugins/gingerbase/ui/config/tab-ext.xml @@ -3,7 +3,7 @@ <tab> <access role="admin" mode="admin"/> <access role="user" mode="none"/> - + <class>host</class> <title>Host</title> <path>plugins/gingerbase/host.html</path> </tab> diff --git a/src/wok/plugins/gingerbase/ui/css/Makefile.am b/src/wok/plugins/gingerbase/ui/css/Makefile.am index 3e19c65..dd0676f 100644 --- a/src/wok/plugins/gingerbase/ui/css/Makefile.am +++ b/src/wok/plugins/gingerbase/ui/css/Makefile.am @@ -15,12 +15,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -EXTRA_DIST = theme-default - cssdir = $(datadir)/wok/plugins/gingerbase/ui/css -dist_css_DATA = theme-default.min.css - -theme-default.min.css: theme-default/*.css - cat $^ > $@ +dist_css_DATA = gingerbase.css -CLEANFILES = theme-default.min.css +gingerbase.css: src/gingerbase.scss + echo "Compiling .scss file $<" + sassc -s expanded $< $(@:.scss=.css) diff --git a/src/wok/plugins/gingerbase/ui/css/src/gingerbase.scss b/src/wok/plugins/gingerbase/ui/css/src/gingerbase.scss new file mode 100644 index 0000000..d279a8b --- /dev/null +++ b/src/wok/plugins/gingerbase/ui/css/src/gingerbase.scss @@ -0,0 +1,29 @@ +/* + * Ginger Base + * + * Copyright IBM, Corp. 2015 + * + * 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. + */ + +// Core variables +@import "../../../../../../../ui/css/src/modules/wok-variables"; + +// Compass Mixins +@import "../../../../../../../ui/css/src/vendor/compass-mixins/lib/compass"; + +// Hosts + +@import "modules/host" \ No newline at end of file diff --git a/src/wok/plugins/gingerbase/ui/css/src/modules/_host.scss b/src/wok/plugins/gingerbase/ui/css/src/modules/_host.scss new file mode 100644 index 0000000..b986278 --- /dev/null +++ b/src/wok/plugins/gingerbase/ui/css/src/modules/_host.scss @@ -0,0 +1,172 @@ +// +// Project Wok +// +// Copyright IBM, Corp. 2015 +// +// 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. +// + +/* Main Host Dashboard section */ + +.host-dashboard { + padding-top: 40px; + padding-bottom: 50px; + background: #eee; + .container { + padding-left: 83px !important; // Overriding container padding to align according to mockups + padding-right: 73px !important; + } + h3 { + font-family: $font-family-light; + font-size: 21pt; + margin: 0 0 13px 0; + } +} + +.host-dashboard .col-md-3 { + padding: 0 14px; + > div { + background: #fff; + padding: 13px 20px 20px; + } +} + + +/* End of Host Dashboard */ + + +/* Line chart objects related to Hosts page */ + +#container-chart-cpu, +#container-chart-memory, +#container-chart-disk-io, +#container-chart-network-io { + border-top: 1px solid #eeeeee; + border-bottom: 2px solid #3a393b; + padding: 2px 0; + height: 99px; + width: 310px; +} + + +/* End of Line chart objects */ + + +/* Host Panels Container and Panels */ + +#host-info-container { + padding-top: 53px; + margin: 0 -8px; +} + +#host-info-container .col-md-4 { + width: 486px; + padding-left: 26px; + padding-right: 26px; +} + +#software-update-section { + margin-top: 24px; + border-top: 1px solid #b0b0b0; + padding-top: 24px; +} + +// TEMPORARY FIX TO LAYOUT UNTIL WOK.LIST WIDGET IS DONE +#repositories-grid, +#available-reports-grid { + .wok-list-content { + height: 517px; + overflow-x: hidden; + overflow-y: auto; + } + .dropdown.menu-flat { + float: right; + margin-right: 1px; + } +} + +// END OF TEMPORARY FIX + +/* Basic Information */ + +#host-info-container { + padding-top: 10px; + .basic-information-list { + height: 517px; + overflow-x: hidden; + overflow-y: auto; + margin: 0; + @extend .row; // Extending bootstrap .row clearfix util + .basic-information-list dt { + font-weight: 600; + font-size: 14.5pt; + line-height: 12px; + } + .basic-information-list dd { + font-size: 12.5pt; + font-weight: 400; + margin-bottom: 12px; + } + } +} + + +/* End of Basic Information */ + + +/* Debug Report */ + +#available-reports-grid .wok-list-cell { + padding-left: 10px; +} + + +/* End of Debug Report */ + + +/* Software Updates */ + + +/* Colgroups for low resolution screens */ + +.software-update-name, +.software-update-repos { + min-width: 224px; +} + +.software-update-version, +.software-update-arch { + min-width: 200px; +} + + +/* End of Colgroups */ + + +/* Software Update Accordion */ + +.host-panel #software-updates-progress-textarea { + border: 1px solid #ddd; + box-sizing: border-box; + height: 100px; + padding: .2em .5em; + resize: vertical; +} + + +/* End of Software Update Accordion */ + + +/* End of Software Updates */ diff --git a/src/wok/plugins/gingerbase/ui/css/theme-default/host.css b/src/wok/plugins/gingerbase/ui/css/theme-default/host.css deleted file mode 100644 index 59c0595..0000000 --- a/src/wok/plugins/gingerbase/ui/css/theme-default/host.css +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Project Ginger Base - * - * Copyright IBM, Corp. 2013-2015 - * - * 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. - */ -.host-panel { - font-size: 12px; - margin-bottom: 100px; -} - -.host-panel .logo-container, .host-panel .info-container, -.host-panel .section-label, .host-panel .section-value { - display: inline-block; - vertical-align: top; -} - -.host-panel .section-label { - display: inline-block; - margin-right: 1em; - vertical-align: top; -} - -.host-panel .logo { - background: url("plugins/gingerbase/images/icon-vm.png") no-repeat left top; - height: 128px; - width: 128px; -} - -.host-panel .hostname { - text-decoration: underline; -} - -.host-panel .action-panel { - margin-top: 2em; - padding-left: 10px; -} - -.host-panel .button-icon { - background: url("../images/theme-default/host-icon-sprite.png") no-repeat - left top; - display: inline-block; - height: 12px; - width: 12px; -} - -.host-panel .action-icon-stop { - background-position: -14px 0; -} - -.host-panel .action-icon-restart { - background-position: -28px 0; -} - -.host-panel .action-icon-download { - background-position: -42px 0; -} - -.host-panel .action-icon-connect { - background-position: -56px 0; -} - -.host-panel .action-icon-add { - background-position: -70px 0; -} - -.host-panel .action-icon-edit { - background-position: -84px 0; -} - -.host-panel .action-icon-remove { - background-position: -98px 0; -} - -.host-panel button:disabled .action-icon-start { - background-position: 0 -14px; -} - -.host-panel button:disabled .action-icon-stop { - background-position: -14px -14px; -} - -.host-panel button:disabled .action-icon-restart { - background-position: -28px -14px; -} - -.host-panel button:disabled .action-icon-download { - background-position: -42px -14px; -} - -.host-panel button:disabled .action-icon-connect { - background-position: -56px -14px; -} - -.host-panel button:disabled .action-icon-add { - background-position: -70px -14px; -} - -.host-panel button:disabled .action-icon-edit { - background-position: -84px -14px; -} - -.host-panel button:disabled .action-icon-remove { - background-position: -98px -14px; -} - -.host-panel .info-container { - padding-top: 16px; - width: 890px; -} - -.host-panel .section-header { - background: #EEE; - border-radius: 5px; - cursor: pointer; - line-height: 2em; - margin: 1em 0 1em; - padding-left: 6px; -} - -.host-panel .section-header:hover { - background: #06f; - color: white; -} - -.host-panel .section-content { - padding-left: 1em; -} - -.host-panel .section-header .arrow { - border-color: transparent; - border-style: solid; - display: inline-block; - margin-right: 6px; - width: 0; -} - -.host-panel .section-header[aria-expanded="true"] .arrow { - border-top-color: black; - border-width: 8px 4px 0; - border-bottom: none; -} - -.host-panel .section-header[aria-expanded="true"]:hover .arrow { - border-top-color: white; -} - -.host-panel .section-header[aria-expanded="false"] .arrow { - border-left-color: black; - border-right: none; - border-width: 4px 0 4px 8px; -} - -.host-panel .section-header[aria-expanded="false"]:hover .arrow { - border-left-color: white; -} - -.host-panel .section-row { - line-height: 1.6em; - margin-bottom: 1em; -} - -.host-panel .section-label { - width: 100px; -} - -#frequency-textbox { - width: 20px; -} - -#container-chart-cpu, -#container-chart-memory, -#container-chart-disk-io, -#container-chart-network-io { - border: 1px solid white; - box-shadow: 2px 2px 2px gray, 2px -2px 2px gray, -2px -2px 2px gray, -2px - 2px 2px gray; - height: 100px; - width: 500px; -} - -#container-chart-disk-io .disk-write, -#container-chart-network-io .network-sent { - stroke: #f80; -} - -/* Debug Report */ -.cell-text-wrapper { - margin-left: 10px; -} - -.host-panel #available-reports-grid { - border-color: #ddd; - height: 400px; - width: 850px; -} - -.host-panel select#available-reports-list { - width: 300px; -} - -.host-panel select#available-reports-list option { - margin: .2em 1em; -} - -.debug-report-name, -.debug-report-time { - width: 424px; -} - -#id-debug-img { - background: url(../images/theme-default/kimchi-loading15x15.gif) 12px - center no-repeat; - padding-left: 23px; -} - -/* End of Debug Report */ - -/* Software Updates */ -.host-panel #software-updates-grid { - border-color: #ddd; - height: 300px; - width: 850px; -} - -.software-update-name, -.software-update-repos { - width: 224px; -} - -.software-update-version, -.software-update-arch { - width: 200px; -} - -.host-panel #software-updates-progress-textarea { - border: 1px solid #ddd; - box-sizing: border-box; - height: 100px; - padding: .2em .5em; - resize: vertical; - width: 852px; -} -/* End of Software Updates */ - -/* Repository */ -.host-panel #repositories-grid { - border-color: #ddd; - height: 200px; - width: 850px; -} - -.host-panel #repositories-grid .repository-id { - width: 120px; -} - -.host-panel #repositories-grid .repository-name { - width: 640px; -} - -.host-panel #repositories-grid .repository-enabled { - width: 88px; -} - -.host-panel #repositories-grid .repository-baseurl.deb { - width: 400px; -} - -.host-panel #repositories-grid .repository-enabled.deb { - width: 100px; -} - -.host-panel #repositories-grid .repository-gpgcheck.deb { - width: 150px; -} -/* End of Repository */ diff --git a/src/wok/plugins/gingerbase/ui/css/theme-default/report-add.css b/src/wok/plugins/gingerbase/ui/css/theme-default/report-add.css deleted file mode 100644 index 124a53c..0000000 --- a/src/wok/plugins/gingerbase/ui/css/theme-default/report-add.css +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Project Ginger Base - * - * Copyright IBM, Corp. 2013-2015 - * - * 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. - */ -#report-add-window { - height: 300px; - width: 400px; -} - -#report-add-window .field { - font-size: 12px; -} - -#report-name-textbox { - margin: 0; - width: 100%; -} - -.info-add-debug-report { - font-size: 12px; - color: #999999; - font-weight: lighter; - font-family: 'Helvetica Neue', Helvetica, Arial; -} diff --git a/src/wok/plugins/gingerbase/ui/css/theme-default/report-rename.css b/src/wok/plugins/gingerbase/ui/css/theme-default/report-rename.css deleted file mode 100644 index e2b3813..0000000 --- a/src/wok/plugins/gingerbase/ui/css/theme-default/report-rename.css +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Project Ginger Base - * - * Copyright IBM, Corp. 2014-2015 - * - * 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. - */ -#report-rename-window { - height: 300px; - width: 400px; -} - -#report-rename-window .field { - font-size: 12px; -} - -#report-name-textbox { - -moz-box-sizing: border-box; - box-sizing: border-box; - margin: 0; - width: 100%; -} - -.info-debug-report-rename { - font-size: 12px; - color: #999999; - font-weight: lighter; - font-family: 'Helvetica Neue', Helvetica, Arial; -} diff --git a/src/wok/plugins/gingerbase/ui/css/theme-default/repository-add.css b/src/wok/plugins/gingerbase/ui/css/theme-default/repository-add.css deleted file mode 100644 index acf50e2..0000000 --- a/src/wok/plugins/gingerbase/ui/css/theme-default/repository-add.css +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Project Ginger Base - * - * Copyright IBM, Corp. 2014-2015 - * - * 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. - */ -#repository-add-window { - height: 500px; - width: 1000px; -} - -#repository-add-window span.required { - color: red; - padding-left: 5px; - vertical-align: top; -} - -#repository-add-window .textbox-wrapper input[type="text"] { - box-sizing: border-box; - width: 100%; -} - -#repository-add-window .textbox-wrapper label { - vertical-align: middle; -} - -#isMirrorLabel { - font-size: 14px; - font-weight: lighter; - font-family: 'Helvetica Neue', Helvetica, Arial; -} diff --git a/src/wok/plugins/gingerbase/ui/css/theme-default/repository-edit.css b/src/wok/plugins/gingerbase/ui/css/theme-default/repository-edit.css deleted file mode 100644 index 2a3425d..0000000 --- a/src/wok/plugins/gingerbase/ui/css/theme-default/repository-edit.css +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Project Ginger Base - * - * Copyright IBM, Corp. 2014-2015 - * - * 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. - */ -.yum div#repository-edit-window { - height: 680px; - width: 1000px; -} - -.deb div#repository-edit-window { - height: 480px; - width: 1000px; -} - - -.repository-edit-fieldset { - float: left; - padding: 0 30px; - width: 95%; -} - -.repository-edit-wrapper-label, .repository-edit-wrapper-controls { - display: inline-block; - height: 30px; - line-height: 30px; - font-size: 14px; - vertical-align: top; -} - -.repository-edit-wrapper-label { - margin-top: 10px; - width: 150px; -} - -.repository-edit-wrapper-controls label { - vertical-align: middle; -} - -.repository-edit-wrapper-controls { - width: 100%; -} - -.repository-edit-wrapper-controls input[type="text"] { - font-size: 16px; - height: 30px; - line-height: 30px; - padding: 0 10px; - width: 100%; - -moz-box-sizing: border-box; - box-sizing: border-box; - border: 1px solid #CCCCCC; -} - - -.repository-edit-wrapper-controls input[type="text"][readonly] { - color: #bbb; - background-color: #fafafa; -} - - -.repository-edit-wrapper-controls input[type="text"][disabled] { - color: #bbb; - background-color: #fafafa; - cursor: not-allowed; -} - - -.deb .yum{ - display: none; -} - - -.yum .deb{ - display: none; -} diff --git a/src/wok/plugins/gingerbase/ui/images/Makefile.am b/src/wok/plugins/gingerbase/ui/images/Makefile.am index 34109bd..7243188 100644 --- a/src/wok/plugins/gingerbase/ui/images/Makefile.am +++ b/src/wok/plugins/gingerbase/ui/images/Makefile.am @@ -15,8 +15,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -SUBDIRS = theme-default - imagedir = $(datadir)/wok/plugins/gingerbase/ui/images dist_image_DATA = *.png *.ico diff --git a/src/wok/plugins/gingerbase/ui/images/logo.ico b/src/wok/plugins/gingerbase/ui/images/logo.ico index 446143f066a60f479b2cb8f8d04ab3c97ff60e56..1d998c2543576a16c72e49630317afb8e1373b38 100644 GIT binary patch literal 15086 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 bLvKw_5T{H{Hi%=kc3}MAXJ2X`9G>?-JFBHw literal 1214 zcma)*3rLeu6vyu=X_;nPV)$&PPF)r(wTQ|dTGOUtnOdf0mZ=cR#99xbub1{BqnD9^ z^Z>PV6h)fUny6#CN{3di2P{*h2ek@Oq0a4o*=I}2Iv?krbAR`oKi_vQA0faVCr83o zF{!X2#Dx$Nz}$(sm^sgR<Jj30yCMGpMl1z837jm3H1$<DU4IV>Tbdw<FM-;Hi<#et z=I}n~iB^qh8{XzCNyvT<I;$&znmT~?eFXZgAE@Om?1h(6Iq+2e1-ca!zOAO7n3*}; zXq6n?2kF<!f%cez;-Fgx4$e+xo{WR;oqhc_OW;#nF!Zm|JK}m8gi6aC+##`QA5PmJ zfeZ(o(}%&&1P5#*1vVbnssk~XhN5bNz=T)>5^+BS=V54SJ|^z)5I7%kU;>-skiq*{ z5B^=eF<T)pK9+)bV;9UCK>t-HOi+bkR-wK1xpfXL;S<?ho1pQ5gYzxiHR~=e+XHS( zYe7QMZb3IjWV72H-JpD~6z(tbgwn1o$D2s!YteWNJS!i9l%iW?+34Lvr*KL(6{_X| zobEjAb{lD|4qsmYvGF;~r0Aunc#>=c)0W4s|D{#(q9~vaX{rGms=((Wn*~LeWqIu} zkGvlzwaxjL25hey2bVweu<xK*t+@Oa_)UKTK^x4IwmKMOjm@oL`l)}_NGPy}tdb}w zHa>H`ji2N7m}Xsj#j7-`#=Dv}`)h&)9th^&^dR%>WH_MB8KcIXVf8p&s1xD|_k)R- zrk$Z0-|Gf}&4Au$KhU$k?3YR5by~D9M&-q$=ocNz4!IY&p7%OxuJf&+Ei-G(23hU; zHTLhMtjFR9ExVbPQVLzBFlROcIZ|#jmX6fm_hsVa3XP<aKAeAt8dqp&oBW=V^+d>Q zkcNnm%Ds?ggd^Rv2~9_o82cv;p6LSBD_g_s-n1uZ8#<EeLwTm~LE9J!Zdo@M&*jFU zoM+Z%F5)(8$8y`Wz~%Pd;Nlx@aH{<lk}}CcRMRXZMD&%Uhz3Ze$jpg#uec1IlFMPW MDQ4iZEk#_;cNAJoqyPW_ diff --git a/src/wok/plugins/gingerbase/ui/images/theme-default/Makefile.am b/src/wok/plugins/gingerbase/ui/images/theme-default/Makefile.am deleted file mode 100644 index 1fc98a3..0000000 --- a/src/wok/plugins/gingerbase/ui/images/theme-default/Makefile.am +++ /dev/null @@ -1,20 +0,0 @@ -# -# Ginger Base -# -# Copyright IBM, Corp. 2015 -# -# 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. - -imagedir = $(datadir)/wok/plugins/gingerbase/ui/images/theme-default - -dist_image_DATA = *.png *.gif diff --git a/src/wok/plugins/gingerbase/ui/images/theme-default/host-icon-sprite.png b/src/wok/plugins/gingerbase/ui/images/theme-default/host-icon-sprite.png deleted file mode 100644 index da1cd3f2562a5905a526446bcc8fc18bea06c734..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1034 zcmV+l1oiugP)<h;3K|Lk000e1NJLTq003?P000^Y1^@s6R_JLg00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-3t>283nlSO%wnC03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00VAGL_t(&-tAexPZU8E z{`PW&1_K4^OH?eZvAftnL5(5A#KOeLoryLc6xvbn7idfrLqY*-qLqe%L|Ypgg$i36 z(dbjkBSwPpvl)`j+}`fa-u^(2muzw~^LF01^X{8@Zysm_jzUN2Fh`A~Pjc5hKFL~I z+Z}W#NVXC{Y>}KuY7;pNNspw5tO0f7IFeP8D-r4|QCJ)u*CII!fKd<0S(2@?9Y=DD z<R_9!@=PZG-V7bLl9r_@9LG4P1)Rq+9Y?Z{<af)|`7qr|9MBxV)c`acbbCfT&pQC{ z%j$mX<hUFic+YA-2XN6mak_;`9K$+|XK?mUTkTPj&CIsEF5cU<hDHKoBi7iJvbM^i z*Tus8!czN9a>$8s1<N-8RRC8_`$GnE?vb2Jz_2+0dq-p)ngI3#?S24@sTh|bQ+;d5 zH%uEL`5>TIAzA4bYua?6Ovagcnjz|Ai5Da5sM6$aQ8E^l$E3xZb^24#IlFC{{Sv!X zdPZ`HoHhZhMyRZj95%WP!xe@3m<5`5?4yL_;89M%??>JmIN;83>nfaa#_lVU`y{Vr z67H9I<>i9?7&xxqKI>29L{6meTNYI%0Emdw!G8E&QVE-1Rcq#UWYToK0q{&jHq+Sd zU}FNnI)H(=d=J2sh`dW;({;UEMO8gxC-hsZHn6+_8Cz8V%OQ7`GXQ2(brnD(BP{Cx z=6&CP5~WnH*XNDysWO?Qs#^et%pdJCfS-x(Dpi%PY)T=^F&E8^3~dd>ISl}e&Opgd z>jQ8Oz$E}@0sK%^x9UJ%4m8_i!$G%aL_`u-2dYWWvJAJ-u<F2q`TaRWw_eh}pDyEv z>yyFRKMi0z&>mIQrid&iVqA_4oV3~tBC;bQJ7_QMEcIHnC?X#LytKL>s%r052kP~D zY<0ls{5RDBFDZ*`N~hftRMj`pW7t-CT|^!ky^4A7udB@<*0kwB7vI-)nq=l_0(fe5 zkBi7gBF9Bcoc6<NF-#g4k&RAyOj^9%=3_<YamMC0fYCtLR}r}oxmAjYmj^hLTt`+1 zRCTyh@)?Dxh{Y^e+NuMpIv5&N7WDCVBl5M=0B!+z9Oa;-3`iRt9+5!hy{f(jFa_X- zh^)1x14RNBkv{-#tLjpkD=*u5$B=13xe4GPc-8~JKL<=Y@!??g0{{R307*qoM6N<$ Ef;%S0RsaA1 diff --git a/src/wok/plugins/gingerbase/ui/images/theme-default/kimchi-loading15x15.gif b/src/wok/plugins/gingerbase/ui/images/theme-default/kimchi-loading15x15.gif deleted file mode 100644 index aaa4f85a0560dcb59d4bb70154a9144417aae926..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1653 zcmZ?wbhEHb6krfwcz&0`fx$V3fzy*s(30KRoyj+pP0*a%B9B4Xkl)0X$H9|dJd8D} zo<ZDBSSFF7*jZT0OhTc9Q7nTgk3rREDud*7MxI>8&Ju=(ISf+93MQOdag7Y~1hic{ z8T#{u6)cohTNtM^7+W$J#50+i$>`cj=^O84k`pyFn#{1$Ur8%a&i6QjtgEuCfQhw> zh77A6gQ$gokA@_-E$2dp^>Sv?oMy2Rvbjr`S1FsTIOwZtnQE_R*m$2oUC1KhF@wT7 z#vS5TPBXdYi#jqhIC*|#&}Xr)`pY25?86wZk@$x}Azj<#4}*rAu{Vcnu(UhJUj}_& zGsWW!mvn9Irz#jqI|d0m<_4Kq$D4?%x#%8bJFV#KwS(tqvz9fdTmMyIV-~+CKU<>^ zTODbStQ;$e9OEp8kfaJrQB(IojUXN?PfLA&1ruKlE$<Ybz{O>Dnh|c+IZj3l84L_z z+ZiGkGQ_8gg)Ec{ZB|VbVu;;p8Ir+}TJcZ8St};J)7e)ugI_wAy~kUSA^Gq;v#nzB zo6<uZ9TN=&l6EuXHCx41&a>X&p6tkweNrgxtWY&KLrITauKX0wDL;*ZSPITdWuHCl z7S2#|o1wN-skGcGd-j}YNrw7v?ff;HUH7htly%83WoVk=SR=P3TA8QnVNZtdt|Td^ z4tBRT;l<gOCKJSuq^f)gOk<w3o@>%d>z1S5joVY2V;E+x4Cszxn7#dGQiZ}|@k{wq ze5<)H#@>~ixp+mvx~nC^*GqKvReGJxyd=J8Z|Hp0)LG8{Q?7j|(|J;(^S(;?X-VtX z{Ej0{$vo>WNUb@RHtpd12Emt&YTJ7ve>HRaY*WxWB$BmO<7<oVrMfE&d+u577yI7H zdv${AuTG6`J!)PD74G*(XRN&WpI$)mKewN2NU*bGfUA+70W%{51B2pE7EU3C{|q`n zHZYS2Ffee)GW_S1@z}87U^9oXR?LYF3lFyoD0|KE*tqCuBO@a=9coY=j!k!j<aB0i zc<9u4hfS*nq@!EHIP1=djf>s;v1`@Ep>^V-!(BqkNq@`*laF`Fn|H~0Zd!7(0h{Hf zM42F;^~FLc<zy?bzucZ38xtI`nPf?{Nk)rZI#dI#a%KcAJ>AR3%!JJ}Tb!mjcL>V+ z&Dl|qe5_B>QtnB`#6;Il`9QBD85<TlO;@&EX5(p~fXzf_h=~b~c^s@tPtrczcWUF8 zl$)Y)G4W`lxU|rj6$Xj!z4E$EBA!9O@K)2-%Q<1V)NzW4rQ4Q{qQ@s^Df6<iU^CYa zVJ@$f%ZvcUgKd2BZZRt+Jap&~-N|`mN5EtIK6cxtnin4*pO_@<TefG1V5)aFPwc)q zGcP6L3rdhvk&Uz{R5;QluAbJjV`8#<o~Uk<jm4+?Cwh5=mxY`NNH{%#3wux+Vs{|2 sX~(-16pJpOC{Q`pufUDnn>s|9;tWh`McC5^G?`;~3OSj#0+YEl0GD)I?EnA( diff --git a/src/wok/plugins/gingerbase/ui/js/src/gingerbase.host.js b/src/wok/plugins/gingerbase/ui/js/src/gingerbase.host.js index 0d52b92..641a806 100644 --- a/src/wok/plugins/gingerbase/ui/js/src/gingerbase.host.js +++ b/src/wok/plugins/gingerbase/ui/js/src/gingerbase.host.js @@ -3,8 +3,6 @@ * * Copyright IBM, Corp. 2013-2015 * - * 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 @@ -17,87 +15,92 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -kimchi.host={}; +kimchi.host = {}; kimchi.host_main = function() { - var expand = function(header, toExpand) { - var controlledNode = $(header).attr('aria-controls'); - $('#' + controlledNode)[toExpand ? 'removeClass' : 'addClass']('hidden'); - $(header).attr('aria-expanded', toExpand ? 'true' : 'false'); - }; - + "use strict"; var repositoriesGrid = null; var initRepositoriesGrid = function(repo_type) { - var gridFields=[]; - if (repo_type == "yum") { - gridFields=[{ - name: 'repo_id', - label: i18n['GGBREPO6004M'], - 'class': 'repository-id' - }, { - name: 'config[repo_name]', - label: i18n['GGBREPO6005M'], - 'class': 'repository-name' - }, { - name: 'enabled', - label: i18n['GGBREPO6009M'], - 'class': 'repository-enabled' - }]; - } - else if (repo_type == "deb") { - gridFields=[{ - name: 'baseurl', - label: i18n['GGBREPO6006M'], - makeTitle: true, - 'class': 'repository-baseurl deb' - }, { - name: 'enabled', - label: i18n['GGBREPO6009M'], - 'class': 'repository-enabled deb' - }, { - name: 'config[dist]', - label: "dist", - 'class': 'repository-gpgcheck deb' - }, { - name: 'config[comps]', - label: "comps", - 'class': 'repository-gpgcheck deb' - }]; - } - else { - gridFields=[{ + var gridFields = []; + if (repo_type === "yum") { + gridFields = [{ name: 'repo_id', label: i18n['GGBREPO6004M'], - 'class': 'repository-id' - }, { - name: 'enabled', - label: i18n['GGBREPO6009M'], - 'class': 'repository-enabled' - }, { - name: 'baseurl', - label: i18n['GGBREPO6006M'], - makeTitle: true, - 'class': 'repository-baseurl' - }]; + 'class': 'repository-id', + type: 'name' + }, { + name: 'config[display_repo_name]', + label: i18n['GGBREPO6005M'], + 'class': 'repository-name', + type: 'description' + }, { + name: 'enabled', + label: i18n['GGBREPO6009M'], + 'class': 'repository-enabled', + type: 'status' + }]; + } else if (repo_type === "deb") { + gridFields = [{ + name: 'baseurl', + label: i18n['GGBREPO6006M'], + makeTitle: true, + 'class': 'repository-baseurl deb', + type: 'description' + }, { + name: 'enabled', + label: i18n['GGBREPO6009M'], + 'class': 'repository-enabled deb', + type: 'status' + }, { + name: 'config[dist]', + label: "dist", + 'class': 'repository-gpgcheck deb' + }, { + name: 'config[comps]', + label: "comps", + 'class': 'repository-gpgcheck deb' + }]; + } else { + gridFields = [{ + name: 'repo_id', + label: i18n['GGBREPO6004M'], + 'class': 'repository-id', + type: 'name' + }, { + name: 'enabled', + label: i18n['GGBREPO6009M'], + 'class': 'repository-enabled', + type: 'status' + }, { + name: 'baseurl', + label: i18n['GGBREPO6006M'], + makeTitle: true, + 'class': 'repository-baseurl', + type: 'description' + }]; } - repositoriesGrid = new wok.widget.Grid({ - container: 'repositories-grid-container', + repositoriesGrid = new wok.widget.List({ + container: 'repositories-section', id: 'repositories-grid', title: i18n['GGBREPO6003M'], toolbarButtons: [{ id: 'repositories-grid-add-button', label: i18n['GGBREPO6012M'], + class: 'fa fa-plus-circle', onClick: function(event) { - wok.window.open({url:'plugins/gingerbase/repository-add.html', - class: repo_type}); + wok.window.open({ + url: 'plugins/gingerbase/repository-add.html', + class: repo_type + }); } }, { id: 'repositories-grid-enable-button', label: i18n['GGBREPO6016M'], + class: 'fa fa-play-circle-o', disabled: true, onClick: function(event) { var repository = repositoriesGrid.getSelected(); - if(!repository) { + if (!repository) { return; } var name = repository['repo_id']; @@ -110,31 +113,36 @@ kimchi.host_main = function() { }, { id: 'repositories-grid-edit-button', label: i18n['GGBREPO6013M'], + class: 'fa fa-pencil', disabled: true, onClick: function(event) { var repository = repositoriesGrid.getSelected(); - if(!repository) { + if (!repository) { return; } kimchi.selectedRepository = repository['repo_id']; - wok.window.open({url:'plugins/gingerbase/repository-edit.html', - class: repo_type}); + wok.window.open({ + url: 'plugins/gingerbase/repository-edit.html', + class: repo_type + }); } }, { id: 'repositories-grid-remove-button', label: i18n['GGBREPO6014M'], + class: 'fa fa-minus-circle', + critical: true, disabled: true, onClick: function(event) { var repository = repositoriesGrid.getSelected(); - if(!repository) { + if (!repository) { return; } var settings = { - title : i18n['GGBREPO6001M'], - content : i18n['GGBREPO6002M'], - confirm : i18n['GGBAPI6004M'], - cancel : i18n['GGBAPI6003M'] + title: i18n['GGBREPO6001M'], + content: i18n['GGBREPO6002M'], + confirm: i18n['GGBAPI6004M'], + cancel: i18n['GGBAPI6003M'] }; wok.confirm(settings, function() { @@ -142,15 +150,15 @@ kimchi.host_main = function() { repository['repo_id'], function(result) { wok.topic('kimchi/repositoryDeleted').publish(result); - }, function(error) { - } + }, + function(error) {} ); }); } }], onRowSelected: function(row) { var repository = repositoriesGrid.getSelected(); - if(!repository) { + if (!repository) { return; } $('#repositories-grid-remove-button').prop('disabled', false); @@ -168,28 +176,26 @@ kimchi.host_main = function() { var listRepositories = function(gridCallback) { kimchi.listRepositories(function(repositories) { - if($.isFunction(gridCallback)) { - gridCallback(repositories); - } - else { - if(repositoriesGrid) { - repositoriesGrid.setData(repositories); - } - else { - initRepositoriesGrid(); - repositoriesGrid.setData(repositories); + if ($.isFunction(gridCallback)) { + gridCallback(repositories); + } else { + if (repositoriesGrid) { + repositoriesGrid.setData(repositories); + } else { + initRepositoriesGrid(); + repositoriesGrid.setData(repositories); + } } - } - }, - function(error) { - var message = error && error['responseJSON'] && error['responseJSON']['reason']; + }, + function(error) { + var message = error && error['responseJSON'] && error['responseJSON']['reason']; - if($.isFunction(gridCallback)) { - gridCallback([]); - } - repositoriesGrid && - repositoriesGrid.showMessage(message || i18n['GGBUPD6008M']); - }); + if ($.isFunction(gridCallback)) { + gridCallback([]); + } + repositoriesGrid && + repositoriesGrid.showMessage(message || i18n['GGBUPD6008M']); + }); $('#repositories-grid-remove-button').prop('disabled', true); $('#repositories-grid-edit-button').prop('disabled', true); @@ -272,22 +278,20 @@ kimchi.host_main = function() { wok.topic('kimchi/softwareUpdated').publish({ result: result }); - wok.message.warn(i18n['KCHUPD6010M']); + wok.message.warn(i18n['GGBUPD6010M']); }, function(error) { - wok.message.error(i18n['KCHUPD6011M']); + wok.message.error(i18n['GGBUPD6011M']); }, reloadProgressArea); }; var listSoftwareUpdates = function(gridCallback) { kimchi.listSoftwareUpdates(function(softwareUpdates) { - if($.isFunction(gridCallback)) { + if ($.isFunction(gridCallback)) { gridCallback(softwareUpdates); - } - else { - if(softwareUpdatesGrid) { + } else { + if (softwareUpdatesGrid) { softwareUpdatesGrid.setData(softwareUpdates); - } - else { + } else { initSoftwareUpdatesGrid(softwareUpdates); } } @@ -301,13 +305,13 @@ kimchi.host_main = function() { // package manager instance running, so follow that instance updates if (message.indexOf("GGBPKGUPD0005E") !== -1) { startSoftwareUpdateProgress(); - if($.isFunction(gridCallback)) { + if ($.isFunction(gridCallback)) { gridCallback([]); } return; } - if($.isFunction(gridCallback)) { + if ($.isFunction(gridCallback)) { gridCallback([]); } softwareUpdatesGrid && @@ -327,23 +331,25 @@ kimchi.host_main = function() { }); }; var initReportGrid = function(reports) { - reportGrid = new wok.widget.Grid({ - container: 'available-reports-grid-container', + reportGrid = new wok.widget.List({ + container: 'debug-report-section', id: reportGridID, title: i18n['GGBDR6002M'], toolbarButtons: [{ id: reportGridID + '-generate-button', + class: 'fa fa-plus-circle', label: i18n['GGBDR6006M'], onClick: function(event) { wok.window.open('plugins/gingerbase/report-add.html'); } }, { id: reportGridID + '-rename-button', + class: 'fa fa-pencil', label: i18n['GGBDR6008M'], disabled: true, onClick: function(event) { var report = reportGrid.getSelected(); - if(!report) { + if (!report) { return; } @@ -351,20 +357,37 @@ kimchi.host_main = function() { wok.window.open('plugins/gingerbase/report-rename.html'); } }, { + id: reportGridID + '-download-button', + label: i18n['GGBDR6010M'], + class: 'fa fa-download', + disabled: true, + onClick: function(event) { + var report = reportGrid.getSelected(); + if (!report) { + return; + } + + kimchi.downloadReport({ + file: report['uri'] + }); + } + }, { id: reportGridID + '-remove-button', + class: 'fa fa-minus-circle', label: i18n['GGBDR6009M'], + critical: true, disabled: true, onClick: function(event) { var report = reportGrid.getSelected(); - if(!report) { + if (!report) { return; } var settings = { - title : i18n['GGBAPI6004M'], - content : i18n['GGBDR6001M'], - confirm : i18n['GGBAPI6002M'], - cancel : i18n['GGBAPI6003M'] + title: i18n['GGBAPI6004M'], + content: i18n['GGBDR6001M'], + confirm: i18n['GGBAPI6002M'], + cancel: i18n['GGBAPI6003M'] }; wok.confirm(settings, function() { @@ -373,36 +396,21 @@ kimchi.host_main = function() { }, function(result) { listDebugReports(); }, function(error) { - wok.message.error(error.responseJSON.reason); + wok.message.error(error.responseJSON.reason); }); }); } - }, { - id: reportGridID + '-download-button', - label: i18n['GGBDR6010M'], - disabled: true, - onClick: function(event) { - var report = reportGrid.getSelected(); - if(!report) { - return; - } - - kimchi.downloadReport({ - file: report['uri'] - }); - } }], onRowSelected: function(row) { var report = reportGrid.getSelected(); // Only enable report buttons if the selected line is not a // pending report - if (report['time'] == i18n['GGBDR6007M']) { - var gridElement = $('#'+ reportGridID); + if (report['time'] === i18n['GGBDR6007M']) { + var gridElement = $('#' + reportGridID); var row = $('tr:contains(' + report['name'] + ')', gridElement); enableReportButtons(false); row.attr('class', ''); - } - else { + } else { enableReportButtons(true); } }, @@ -410,26 +418,31 @@ kimchi.host_main = function() { fields: [{ name: 'name', label: i18n['GGBDR6003M'], - 'class': 'debug-report-name' + 'class': 'debug-report-name', + type: 'name' }, { name: 'time', label: i18n['GGBDR6005M'], - 'class': 'debug-report-time' + 'class': 'debug-report-time', + type: 'description' }], data: reports }); }; var getPendingReports = function() { - var reports = [] - var filter = 'status=running&target_uri=' + encodeURIComponent('^/plugins/gingerbase/debugreports/*') + var reports = []; + var filter = 'status=running&target_uri=' + encodeURIComponent('^/plugins/gingerbase/debugreports/*'); kimchi.getTasksByFilter(filter, function(tasks) { - for(var i = 0; i < tasks.length; i++) { - reportName = tasks[i].target_uri.replace(/^\/plugins\/gingerbase\/debugreports\//, '') || i18n['GGBDR6012M']; - reports.push({'name': reportName, 'time': i18n['GGBDR6007M']}) + for (var i = 0; i < tasks.length; i++) { + var reportName = tasks[i].target_uri.replace(/^\/plugins\/kimchi\/debugreports\//, '') || i18n['GGBDR6012M']; + reports.push({ + 'name': reportName, + 'time': i18n['GGBDR6007M'] + }); - if(kimchi.trackingTasks.indexOf(tasks[i].id) >= 0) { + if (kimchi.trackingTasks.indexOf(tasks[i].id) >= 0) { continue; } @@ -455,33 +468,64 @@ kimchi.host_main = function() { var listDebugReports = function() { kimchi.listReports(function(reports) { - pendingReports = getPendingReports(); - allReports = pendingReports.concat(reports); + var pendingReports = getPendingReports(); + var allReports = pendingReports.concat(reports); $('#debug-report-section').removeClass('hidden'); + if ((kimchi.capabilities['repo_mngt_tool']) && (kimchi.capabilities['repo_mngt_tool'] !== "None")) { + $('#debug-report-section, #repositories-section').removeClass('col-md-8'); + $('#debug-report-section, #repositories-section').addClass('col-md-4'); + }else { + $('#content-sys-info').removeClass('col-md-12'); + $('#content-sys-info').addClass('col-md-4'); + } + // Row selection will be cleared so disable buttons here enableReportButtons(false); - if(reportGrid) { + if (reportGrid) { reportGrid.setData(allReports); - } - else { + } else { initReportGrid(allReports); } + if (!allReports.length) { + $('#available-reports-grid-btn-group').removeClass('hidden'); + } else { + $('#available-reports-grid-btn-group').addClass('hidden'); + } + // Set id-debug-img to pending reports // It will display a loading icon var gridElement = $('#' + reportGridID); - $.each($('td:contains(' + i18n['GGBDR6007M'] + ')', gridElement), function(index, row) { - $(row).parent().addClass('no-hover'); - $(row).attr('id', 'id-debug-img'); + // "Generating..." + $.each($('td:contains(' + i18n['GGBDR6007M'] + ')', gridElement), function(index, row) { + console.log(row); + $(row).parent().addClass('generating'); + $(row).parent().find('.dropdown-toggle').addClass('disabled'); + //$(row).attr('id', 'id-debug-img'); }); }, function(error) { - if(error['status'] == 403) { + if (error['status'] === 403) { $('#debug-report-section').addClass('hidden'); + // Check Repositories and resize column + if ((kimchi.capabilities['repo_mngt_tool']) && (kimchi.capabilities['repo_mngt_tool'] !== "None")) { + $('#repositories-section').removeClass('col-md-4'); + $('#repositories-section').addClass('col-md-8'); + }else { + $('#content-sys-info').removeClass('col-md-4'); + $('#content-sys-info').addClass('col-md-12'); + } return; } $('#debug-report-section').removeClass('hidden'); + if ((kimchi.capabilities['repo_mngt_tool']) && (kimchi.capabilities['repo_mngt_tool'] !== "None")) { + $('#debug-report-section, #repositories-section').removeClass('col-md-8'); + $('#debug-report-section, #repositories-section').addClass('col-md-4'); + }else { + $('#content-sys-info').removeClass('col-md-12'); + $('#content-sys-info').addClass('col-md-4'); + } }); }; @@ -489,10 +533,9 @@ kimchi.host_main = function() { var restartButtonID = '#host-button-restart'; var shutdownHost = function(params) { var settings = { - title : i18n['GGBAPI6004M'], - content : i18n['GGBHOST6008M'], - confirm : i18n['GGBAPI6002M'], - cancel : i18n['GGBAPI6003M'] + content: i18n['GGBHOST6008M'], + confirm: i18n['GGBAPI6002M'], + cancel: i18n['GGBAPI6003M'] }; wok.confirm(settings, function() { @@ -500,53 +543,45 @@ kimchi.host_main = function() { $(shutdownButtonID).prop('disabled', true); $(restartButtonID).prop('disabled', true); // Check if there is any VM is running. - // FIXME : Find alternative way to figure out if any vms running - // kimchi.listVMs(function(vms) { - // for(var i = 0; i < vms.length; i++) { - // if(vms[i]['state'] === 'running') { - // wok.message.error.code('GGBHOST6001E'); - // $(shutdownButtonID).prop('disabled', false); - // $(restartButtonID).prop('disabled', false); - // return; - // } - // } - // - // }); - }, function() { - }); + kimchi.listVMs(function(vms) { + for (var i = 0; i < vms.length; i++) { + if (vms[i]['state'] === 'running') { + wok.message.error.code('GGBHOST6001E'); + $(shutdownButtonID).prop('disabled', false); + $(restartButtonID).prop('disabled', false); + return; + } + } + + }); + }, function() {}); }; var initPage = function() { - $('#host-info-container .section-header').each(function(i, header) { - $('<span class="arrow"></span>').prependTo(header); - var toExpand = $(header).attr('aria-expanded') !== 'false'; - expand(header, toExpand); - }); - - $('#host-info-container').on('click', '.section-header', function(event) { - var toExpand = $(this).attr('aria-expanded') === 'false'; - expand(this, toExpand); - }); $('#host-button-shutdown').on('click', function(event) { + event.preventDefault(); shutdownHost(null); }); $('#host-button-restart').on('click', function(event) { + event.preventDefault(); shutdownHost({ reboot: true }); }); var setupUI = function() { - if (kimchi.capabilities == undefined) { + if (kimchi.capabilities === undefined) { setTimeout(setupUI, 2000); return; } - if((kimchi.capabilities['repo_mngt_tool']) && (kimchi.capabilities['repo_mngt_tool']!="None")) { + if ((kimchi.capabilities['repo_mngt_tool']) && (kimchi.capabilities['repo_mngt_tool'] !== "None")) { initRepositoriesGrid(kimchi.capabilities['repo_mngt_tool']); $('#repositories-section').switchClass('hidden', kimchi.capabilities['repo_mngt_tool']); + $('#content-sys-info').removeClass('col-md-12', kimchi.capabilities['repo_mngt_tool']); + $('#content-sys-info').addClass('col-md-4', kimchi.capabilities['repo_mngt_tool']); wok.topic('kimchi/repositoryAdded') .subscribe(listRepositories); wok.topic('kimchi/repositoryUpdated') @@ -555,7 +590,7 @@ kimchi.host_main = function() { .subscribe(listRepositories); } - if(kimchi.capabilities['update_tool']) { + if (kimchi.capabilities['update_tool']) { $('#software-update-section').removeClass('hidden'); initSoftwareUpdatesGrid(); wok.topic('kimchi/softwareUpdated') @@ -565,7 +600,7 @@ kimchi.host_main = function() { }); } - if(kimchi.capabilities['system_report_tool']) { + if (kimchi.capabilities['system_report_tool']) { listDebugReports(); wok.topic('kimchi/debugReportAdded') .subscribe(listDebugReports); @@ -608,40 +643,40 @@ kimchi.host_main = function() { } }, diskIO: { - r: { + w: { type: 'value', base: 2, fixed: 2, unit: 'B/s', - legend: i18n['GGBHOST6004M'], + legend: i18n['GGBHOST6005M'], + 'class': 'disk-write', points: [] }, - w: { + r: { type: 'value', base: 2, fixed: 2, unit: 'B/s', - legend: i18n['GGBHOST6005M'], - 'class': 'disk-write', + legend: i18n['GGBHOST6004M'], points: [] } }, networkIO: { - r: { + s: { type: 'value', base: 2, fixed: 2, unit: 'B/s', - legend: i18n['GGBHOST6006M'], + legend: i18n['GGBHOST6007M'], + 'class': 'network-sent', points: [] }, - s: { + r: { type: 'value', base: 2, fixed: 2, unit: 'B/s', - legend: i18n['GGBHOST6007M'], - 'class': 'network-sent', + legend: i18n['GGBHOST6006M'], points: [] } } @@ -650,38 +685,36 @@ kimchi.host_main = function() { var cursor = SIZE; var add = function(stats) { - for(var key in stats) { + for (var key in stats) { var item = stats[key]; - for(var metrics in item) { + for (var metrics in item) { var value = item[metrics]['v']; var max = item[metrics]['max']; var unifiedMetrics = statsArray[key][metrics]; var ps = unifiedMetrics['points']; - if(!Array.isArray(value)){ + if (!Array.isArray(value)) { ps.push(value); - if(ps.length > SIZE + 1) { + if (ps.length > SIZE + 1) { ps.shift(); } + } else { + ps = ps.concat(value); + ps.splice(0, ps.length - SIZE - 1); + unifiedMetrics['points'] = ps; } - else{ - ps=ps.concat(value); - ps.splice(0, ps.length-SIZE-1); - unifiedMetrics['points']=ps; - } - if(max !== undefined) { + if (max !== undefined) { unifiedMetrics['max'] = max; - } - else { - if(unifiedMetrics['type'] !== 'value') { + } else { + if (unifiedMetrics['type'] !== 'value') { continue; } max = -Infinity; $.each(ps, function(i, value) { - if(value > max) { + if (value > max) { max = value; } }); - if(max === 0) { + if (max === 0) { ++max; } max *= 1.1; @@ -695,7 +728,7 @@ kimchi.host_main = function() { var get = function(which) { var stats = statsArray[which]; var lines = []; - for(var k in stats) { + for (var k in stats) { var obj = stats[k]; var line = { type: obj['type'], @@ -704,10 +737,10 @@ kimchi.host_main = function() { fixed: obj['fixed'], legend: obj['legend'] }; - if(obj['max']) { + if (obj['max']) { line['max'] = obj['max']; } - if(obj['class']) { + if (obj['class']) { line['class'] = obj['class']; } var ps = obj['points']; @@ -732,104 +765,102 @@ kimchi.host_main = function() { }; var Tracker = function(charts) { - var charts = charts; - var timer = null; - var statsPool = new StatsMgr(); - var setCharts = function(newCharts) { - charts = newCharts; - for(var key in charts) { - var chart = charts[key]; - chart.updateUI(statsPool.get(key)); - } - }; - - var self = this; - - var UnifyStats = function(stats) { - var result= { - cpu: { - u: { - v: stats['cpu_utilization'] - } - }, - memory: { - u: { - } - }, - diskIO: { - r: { - v: stats['disk_read_rate'] - }, - w: { - v: stats['disk_write_rate'] - } - }, - networkIO: { - r: { - v: stats['net_recv_rate'] - }, - s: { - v: stats['net_sent_rate'] - } - } - }; - if(Array.isArray(stats['memory'])){ - result.memory.u['v']=[]; - result.memory.u['max']=-Infinity; - for(var i=0;i<stats['memory'].length;i++){ - result.memory.u['v'].push(stats['memory'][i]['avail']); - result.memory.u['max']=Math.max(result.memory.u['max'],stats['memory'][i]['total']); - } - } - else { - result.memory.u['v']=stats['memory']['avail'], - result.memory.u['max']=stats['memory']['total'] - } - return(result); - }; - - - var statsCallback = function(stats) { - var unifiedStats = UnifyStats(stats); - statsPool.add(unifiedStats); - for(var key in charts) { - var chart = charts[key]; - chart.updateUI(statsPool.get(key)); - } - timer = setTimeout(function() { - continueTrack(); - }, 1000); - }; - - var track = function() { - kimchi.getHostStatsHistory(statsCallback, - function() { - continueTrack(); - }); - }; + var charts = charts; + var timer = null; + var statsPool = new StatsMgr(); + var setCharts = function(newCharts) { + charts = newCharts; + for (var key in charts) { + var chart = charts[key]; + chart.updateUI(statsPool.get(key)); + } + }; - var continueTrack = function() { - kimchi.getHostStats(statsCallback, - function() { + var self = this; + + var UnifyStats = function(stats) { + var result = { + cpu: { + u: { + v: stats['cpu_utilization'] + } + }, + memory: { + u: {} + }, + diskIO: { + w: { + v: stats['disk_write_rate'] + }, + r: { + v: stats['disk_read_rate'] + } + }, + networkIO: { + s: { + v: stats['net_sent_rate'] + }, + r: { + v: stats['net_recv_rate'] + } + } + }; + if (Array.isArray(stats['memory'])) { + result.memory.u['v'] = []; + result.memory.u['max'] = -Infinity; + for (var i = 0; i < stats['memory'].length; i++) { + result.memory.u['v'].push(stats['memory'][i]['avail']); + result.memory.u['max'] = Math.max(result.memory.u['max'], stats['memory'][i]['total']); + } + } else { + result.memory.u['v'] = stats['memory']['avail'], + result.memory.u['max'] = stats['memory']['total'] + } + return (result); + }; + + + var statsCallback = function(stats) { + var unifiedStats = UnifyStats(stats); + statsPool.add(unifiedStats); + for (var key in charts) { + var chart = charts[key]; + chart.updateUI(statsPool.get(key)); + } + timer = setTimeout(function() { continueTrack(); - }); - }; - - var destroy = function() { - timer && clearTimeout(timer); - timer = null; - }; - - return { - setCharts: setCharts, - start: track, - stop: destroy - }; + }, 1000); + }; + + var track = function() { + kimchi.getHostStatsHistory(statsCallback, + function() { + continueTrack(); + }); + }; + + var continueTrack = function() { + kimchi.getHostStats(statsCallback, + function() { + continueTrack(); + }); + }; + + var destroy = function() { + timer && clearTimeout(timer); + timer = null; + }; + + return { + setCharts: setCharts, + start: track, + stop: destroy + }; }; var initTracker = function() { // TODO: Extend tabs with onUnload event to unregister timers. - if(kimchi.hostTimer) { + if (kimchi.hostTimer) { kimchi.hostTimer.stop(); delete kimchi.hostTimer; } @@ -857,20 +888,19 @@ kimchi.host_main = function() { }) }; - if(kimchi.hostTimer) { + if (kimchi.hostTimer) { kimchi.hostTimer.setCharts(trackedCharts); - } - else { + } else { kimchi.hostTimer = new Tracker(trackedCharts); kimchi.hostTimer.start(); } }; $('#host-root-container').on('remove', function() { - if(kimchi.hostTimer) { + if (kimchi.hostTimer) { kimchi.hostTimer.stop(); delete kimchi.hostTimer; - } + } repositoriesGrid && repositoriesGrid.destroy(); wok.topic('kimchi/repositoryAdded') @@ -887,4 +917,4 @@ kimchi.host_main = function() { wok.topic('kimchi/debugReportAdded').unsubscribe(listDebugReports); wok.topic('kimchi/debugReportRenamed').unsubscribe(listDebugReports); }); -}; +}; \ No newline at end of file diff --git a/src/wok/plugins/gingerbase/ui/pages/host.html.tmpl b/src/wok/plugins/gingerbase/ui/pages/host.html.tmpl index 0afb639..6259f1b 100644 --- a/src/wok/plugins/gingerbase/ui/pages/host.html.tmpl +++ b/src/wok/plugins/gingerbase/ui/pages/host.html.tmpl @@ -25,153 +25,124 @@ #silent _ = t.gettext #silent _t = t.gettext <!DOCTYPE html> -<html> +<html> <head> -<link rel="stylesheet" href="plugins/gingerbase/css/theme-default.min.css"> +<link rel="stylesheet" href="plugins/gingerbase/css/gingerbase.css"> <script src="plugins/gingerbase/js/gingerbase.min.js"></script> </head> <body> <div id="host-root-container"> - <div class="toolbar"> - <div class="tools"> - </div> +<nav class="navbar navbar-default toolbar"> + <div class="container"> + <!-- Brand and toggle get grouped for better mobile display --> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#toolbar" aria-expanded="false"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + </div> + + <!-- Collect the nav links, forms, and other content for toggling --> + <div class="collapse navbar-collapse" id="toolbar"> + <ul class="nav navbar-nav navbar-right tools"> + <li><a id="host-button-restart" href="javascript:void(0);"><i class="fa fa-undo"></i><span>$_("Restart")</span></a></li> + <li><a id="host-button-shutdown" href="javascript:void(0);"><i class="fa fa-ban"></i><span>$_("Shut down")</span></a></li> + <!-- <li><a href="javascript:void(0);"><i class="fa fa-desktop"></i><span>$_("Connect")</span></a></li> --> + </ul> </div> + </div> +</nav> <div id="host-content-container" class="empty-when-logged-off"></div> </div> -<script id="host-tmpl" type="gingerbase/template"> - <div class="host-panel"> - <div class="logo-container"> - <div class="logo" style="background-image: url({logo});"></div> - </div> - <div id="host-info-container" class="info-container"> - <h2 class="hostname">{hostname}</h2> - <div class="action-panel"> - <button id="host-button-shutdown" class="btn-normal-1 stop"> - <div class="button-icon action-icon-stop"></div> - $_("Shut down") - </button> - <button id="host-button-restart" class="btn-normal-1 restart"> - <div class="button-icon action-icon-restart"></div> - $_("Restart") - </button> - <button class="btn-normal-1 connect" disabled="disabled"> - <div class="button-icon action-icon-connect"></div> - $_("Connect") - </button> - </div> - <div class="host-section"> - <h3 class="section-header" - aria-expanded="false" - aria-controls="content-sys-info"> - $_("Basic Information") - </h3> - <div id="content-sys-info" class="section-content"> - <div class="section-row"> - <div class="section-label">$_("OS Distro")</div> - <div class="section-value">{os_distro}</div> - </div> - <div class="section-row"> - <div class="section-label">$_("OS Version")</div> - <div class="section-value">{os_version}</div> - </div> - <div class="section-row"> - <div class="section-label">$_("OS Code Name")</div> - <div class="section-value">{os_codename}</div> - </div> - <div class="section-row"> - <div class="section-label">$_("Processor")</div> - <div class="section-value">{cpu_model}</div> - </div> - <div class="section-row"> - <div class="section-label">$_("CPU(s)")</div> - <div class="section-value">{cpus}</div> - </div> - <div class="section-row"> - <div class="section-label">$_("Memory")</div> - <div class="section-value">{memory}</div> +<script id="host-tmpl" type="kimchi/template"> +<div class="host-dashboard"> + <div class="container"> + <div id="alert-container"></div> + <div id="content-sys-statistics" class="row"> + <div class="col-md-3"> + <div id="cpu-dashboard"> + <h3 class="section-label">$_("CPU")</h3> + <div class="section-value"> + <div id="container-chart-cpu" class="inline-block"></div> </div> </div> </div> - <div class="host-section"> - <h3 class="section-header" - aria-controls="content-sys-statistics"> - $_("System Statistics") - </h3> - <div id="content-sys-statistics" class="section-content"> - <div class="section-row"> - <div class="section-label">$_("CPU")</div> - <div class="section-value"> - <div id="container-chart-cpu" class="inline-block"></div> - </div> - </div> - <div class="section-row"> - <div class="section-label">$_("Memory")</div> - <div class="section-value"> - <div id="container-chart-memory" class="inline-block"></div> - </div> - </div> - <div class="section-row"> - <div class="section-label">$_("Disk I/O")</div> - <div class="section-value"> - <div id="container-chart-disk-io" class="inline-block"></div> - </div> - </div> - <div class="section-row"> - <div class="section-label">$_("Network I/O")</div> - <div class="section-value"> - <div id="container-chart-network-io" class="inline-block"></div> - </div> + <div class="col-md-3"> + <div id="memory-dashboard"> + <h3 class="section-label">$_("Memory")</h3> + <div class="section-value"> + <div id="container-chart-memory" class="inline-block"></div> </div> </div> </div> - <div id="software-update-section" class="host-section hidden"> - <h3 class="section-header" - aria-controls="content-software-update"> - $_("Software Updates") - </h3> - <div id="content-software-update" class="section-content"> - <div class="section-row"> - <div class="section-value"> - <div id="software-updates-grid-container"></div> - <div id="software-updates-progress-container" class="hidden"> - <label for="software-updates-progress-textarea">$_("Update Progress")</label> - <textarea id="software-updates-progress-textarea" readonly></textarea> - </div> - </div> + <div class="col-md-3"> + <div id="disk-dashboard"> + <h3 class="section-label">$_("Disk I/O")</h3> + <div class="section-value"> + <div id="container-chart-disk-io" class="inline-block"></div> </div> </div> </div> - <div id="repositories-section" class="host-section hidden"> - <h3 class="section-header" - aria-controls="content-repositories"> - $_("Repositories") - </h3> - <div id="content-repositories" class="section-content"> - <div class="section-row"> - <div class="section-value"> - <div id="repositories-grid-container"></div> - </div> + <div class="col-md-3"> + <div id="network-dashboard"> + <h3 class="section-label">$_("Network I/O")</h3> + <div class="section-value"> + <div id="container-chart-network-io" class="inline-block"></div> </div> </div> </div> - <div id="debug-report-section" class="host-section hidden"> - <h3 class="section-header" - aria-controls="content-sys-reports"> - $_("Debug Reports") - </h3> - <div id="content-sys-reports" class="section-content"> - <div class="section-row"> - <div class="section-value"> - <div id="available-reports-grid-container"></div> - </div> + </div> + </div> +</div> +<div class="host-panel"> + <div class="container"> + <div id="host-info-container" class="row"> + <div id="content-sys-info" class="panel panel-default col-md-12"> + <div class="panel-heading"> + <h3 class="panel-title">$_("Basic Information")</h3> + </div> + <div class="panel-body"> + <dl class="basic-information-list"> + <dt>{os_distro}</dt> + <dd>$_("OS Distro")</dd> + <dt>{os_version}</dt> + <dd>$_("OS Version")</dd> + <dt>{os_codename}</dt> + <dd>$_("OS Code Name")</dd> + <dt>{cpu_model}</dt> + <dd>$_("Processor")</dd> + <dt>{cpus}</dt> + <dd>$_("CPU(s)")</dd> + <dt>{memory}</dt> + <dd>$_("Memory")</dd> + </dl> + </div> + </div> + <div id="repositories-section" class="col-md-8 hidden"></div> + <div id="debug-report-section" class="col-md-8 hidden"></div> + </div> + <div class="row"> + <div id="software-update-section" class="panel panel-default col-md-12 hidden"> + <div class="panel-heading"> + <h3 class="panel-title">$_("Software Updates")</h3> + </div> + <div id="content-software-update" class="panel panel-default"> + <div id="software-updates-grid-container"></div> + <div id="software-updates-progress-container" class="hidden"> + <label for="software-updates-progress-textarea">$_("Update Progress")</label> + <textarea id="software-updates-progress-textarea" readonly></textarea> </div> </div> </div> </div> </div> +</div> </script> - +<div id="modalWindow" class="modal fade host-modal" tabindex="-1" role="dialog" aria-labelledby="hostsModalLabel" aria-hidden="true"> +</div> <script type="text/javascript"> kimchi.host_main(); </script> diff --git a/src/wok/plugins/gingerbase/ui/pages/report-add.html.tmpl b/src/wok/plugins/gingerbase/ui/pages/report-add.html.tmpl index 78b085d..94f4ed6 100644 --- a/src/wok/plugins/gingerbase/ui/pages/report-add.html.tmpl +++ b/src/wok/plugins/gingerbase/ui/pages/report-add.html.tmpl @@ -24,35 +24,25 @@ #silent _ = t.gettext #silent _t = t.gettext <!DOCTYPE html> -<div id="report-add-window" class="window"> - <header> - <h1 class="title h1 grey">$_("Generate a New Debug Report")</h1> - </header> - <div class="content"> - <form id="form-report-add"> - <section class="form-section"> - <h2> - <label for="report-name-textbox">$_("Report Name")</label> - </h2> - <div class="field"> - <input type="text" class="text" id="report-name-textbox" name="name" /> - <span class="icon-info-circled light-grey c1"></span> - <span class="info-add-debug-report"> - $_("The name used to identify the report. If omitted, a name will be chosen based on current time. Name can contain: letters, digits, underscore (\"_\") and hyphen (\"-\").") - </span> - </div> - </section> - </form> - </div> - <footer> - <div class="btn-group"> - <button id="button-report-add" class="btn-normal"><span class="text">$_("Generate")</span></button> - <button id="button-report-cancel" class="btn-normal close" type="button"> - <span calss="text">$_("Cancel")</span> - </button> +<div class="modal-content"> + <div class="modal-header"> + <h4 class="modal-title">$_("Generate a New Debug Report")</h4> + </div> + <div class="modal-body"> + <form id="form-report-add"> + <div class="form-group"> + <label for="report-name-textbox">$_("Report Name")</label> + <input type="text" class="form-control" id="report-name-textbox" name="name" /> + <p class="help-block"><i class="fa fa-info-circle"></i> $_("The name used to identify the report. If omitted, a name will be chosen based on current time. Name can contain: letters, digits, underscore (\"_\") and hyphen (\"-\").") + </p> </div> - </footer> + </form> + </div> + <div class="modal-footer"> + <button type="button" id="button-report-add" class="btn btn-default" data-dismiss="modal">$_("Generate")</button> + <button type="button" id="button-report-cancel" class="btn btn-default" data-dismiss="modal">$_("Cancel")</button> + </div> </div> <script> kimchi.report_add_main(); -</script> +</script> \ No newline at end of file diff --git a/src/wok/plugins/gingerbase/ui/pages/report-rename.html.tmpl b/src/wok/plugins/gingerbase/ui/pages/report-rename.html.tmpl index b069aad..e5b9401 100644 --- a/src/wok/plugins/gingerbase/ui/pages/report-rename.html.tmpl +++ b/src/wok/plugins/gingerbase/ui/pages/report-rename.html.tmpl @@ -24,35 +24,27 @@ #silent _ = t.gettext #silent _t = t.gettext <!DOCTYPE html> -<div id="report-rename-window" class="window"> - <header> - <h1 class="title h1 grey">$_("Rename a Debug Report")</h1> - </header> - <div class="content"> +<div class="modal-content"> + <div class="modal-header"> + <h4 class="modal-title">$_("Rename a Debug Report")</h4> + </div> + <div class="modal-body"> <form id="form-report-rename"> - <section class="form-section"> - <h2> - <label for="report-name-textbox">$_("Report Name")</label> - </h2> - <div class="field"> - <input type="text" class="text" id="report-name-textbox" name="name" /> - <span class="icon-info-circled light-grey c1"></span> - <span class="info-debug-report-rename"> - $_("The name used to identify the report. Name can contain: letters, digits and hyphen (\"-\").") - </span> - </div> - </section> + <div class="form-group"> + <label for="report-name-textbox">$_("Report Name")</label> + <input type="text" class="form-control" id="report-name-textbox" name="name" /> + <p class="help-block"><i class="fa fa-info-circle"></i> $_("The name used to identify the report. Name can contain: letters, digits and hyphen (\"-\").") + </p> + </div> </form> </div> - <footer> - <div class="btn-group"> - <button id="button-report-rename" class="btn-normal"><span class="text">$_("Submit")</span></button> - <button id-"button-report-rename-cancel" class="btn-normal close" type="button"> - <span class="text">$_("Cancel")</span> - </button> - </div> - </footer> + <div class="modal-footer"> + <button type="button" id="button-report-rename" class="btn btn-default" data-dismiss="modal">$_("Submit")</button> + <button type="button" id- "button-report-rename-cancel" class="btn btn-default" type="button" data-dismiss="modal">$_("Cancel") + </button> + </div> </div> <script> kimchi.report_rename_main(); </script> + \ No newline at end of file diff --git a/src/wok/plugins/gingerbase/ui/pages/repository-add.html.tmpl b/src/wok/plugins/gingerbase/ui/pages/repository-add.html.tmpl index 6dd9d3e..3bf0856 100644 --- a/src/wok/plugins/gingerbase/ui/pages/repository-add.html.tmpl +++ b/src/wok/plugins/gingerbase/ui/pages/repository-add.html.tmpl @@ -23,93 +23,51 @@ #silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True) #silent _ = t.gettext #silent _t = t.gettext -<div id="repository-add-window" class="window"> - <form id="form-repository-add"> - <header class="window-header"> - <h1 class="title h1 grey">$_("Add a Repository")</h1> - </header> - <section> - <div class="content"> - <div class="form-section yum"> - <h2>$_("Identifier")</h2> - <div class="field"> - <div class="textbox-wrapper"> - <input type="text" class="text" name="repo_id" /> - </div> - <div class="icon-info-circled light-grey c1 help-inline"></div> - <p class="text-help help-inline"> - $_("Single word, unique identifier for the repository.") +<div class="modal-content"> + <div class="modal-header"> + <h4 class="modal-title">$_("Add a Repository")</h4> + </div> + <div class="modal-body"> + <form id="form-repository-add"> + <div class="form-group yum"> + <label for="repo_id">$_("Identifier")</label> + <input type="text" class="form-control" name="repo_id" /> + <p class="help-block"><i class="fa fa-info-circle"></i> $_("Single word, unique identifier for the repository.") </p> - </div> </div> - <section class="form-section yum"> - <h2>$_("Name")</h2> - <div class="field"> - <div class="textbox-wrapper"> - <input type="text" class="text" name="config[repo_name]" /> - </div> - <div class="icon-info-circled light-grey c1 help-inline"></div> - <p class="text-help help-inline"> - $_("Textual name for the repository.") + <div class="form-group yum"> + <label for="repo_name">$_("Name")</label> + <input type="text" class="form-control" id="repo_name" name="config[repo_name]" /> + <p class="help-block"><i class="fa fa-info-circle"></i> $_("Textual name for the repository.") </p> - </div> - </section> - <section class="form-section"> - <h2>$_("URL")<span class="required" role="presentation" title='$_("Required Field")'>*</span></h2> - <div class="field"> - <div class="textbox-wrapper"> - <input type="text" class="text required" name="baseurl" /> - </div> - <div class="icon-info-circled light-grey c1 help-inline"></div> - <p class="text-help help-inline"> - $_("URL to the repository. Supported protocols are http, ftp, and file.") - </p> - </div> - <div class="field yum"> - <p class="yum"> - <input type="checkbox" name="isMirror" value="true" id="isMirror" /> - <label id="isMirrorLabel" for="isMirror">$_("Repository is a mirror")</label> - </p> - </div> - </section> - <section class="form-section repository-dist deb"> - <h2>$_("Distribution")</h2> - <div class="field"> - <div class="textbox-wrapper"> - <input type="text" class="text" name="config[dist]" /> - </div> - <div class="icon-info-circled light-grey c1 help-inline"></div> - <p class="text-help help-inline"> - $_("Distribution of the DEB repository.") - </p> - </div> - </section> - <section class="form-section repository-comps deb"> - <h2>$_("Components")</h2> - <div class="field"> - <div class="textbox-wrapper"> - <input type="text" class="text" name="config[comps]" /> - </div> - <div class="icon-info-circled light-grey c1 help-inline"></div> - <p class="text-help help-inline"> - $_("List of components in DEB repository.") - </p> - </div> - </section> - </div> - </section> - <footer> - <div class="btn-group"> - <button type="submit" id="button-repository-add" class="btn-normal" disabled="disabled"> - <span class="text">$_("Add")</span> - </button> - <button type="button" id="button-repository-close" class="btn-normal close"> - <span class="text">$("Cancel")</span> - </button> - </div> - </footer> - </form> + </div> + <div class="form-group"> + <label for="baseurl">$_("URL")<span class="required" role="presentation" title='$_("Required Field")'>*</span></label> + <input type="text" class="form-control required" id="baseurl" name="baseurl" /> + <p class="help-block"><i class="fa fa-info-circle"></i> $_("URL to the repository. Supported protocols are http, ftp, and file.")</p> + </div> + <div class="checkbox yum"> + <label id="isMirrorLabel" for="isMirror"> + <input type="checkbox" name="isMirror" value="true" id="isMirror" /> $_("Repository is a mirror")</label> + </div> + <div class="form-group repository-dist deb"> + <label>$_("Distribution")</label> + <input type="text" class="form-control" name="config[dist]" /> + <p class="help-block"><i class="fa fa-info-circle"></i> $_("Distribution of the DEB repository.")</p> + </div> + <div class="form-group repository-comps deb"> + <label>$_("Components")</label> + <input type="text" class="form-control" name="config[comps]" /> + <p class="help-block"><i class="fa fa-info-circle"></i> $_("List of components in DEB repository.")</p> + </div> + </form> + </div> + <div class="modal-footer"> + <button type="submit" id="button-repository-add" class="btn btn-default" disabled="disabled">$_("Add")</button> + <button type="button" id="button-repository-close" data-dismiss="modal" class="btn btn-default">$("Cancel")</button> + </div> </div> <script> kimchi.repository_add_main(); </script> + \ No newline at end of file diff --git a/src/wok/plugins/gingerbase/ui/pages/repository-edit.html.tmpl b/src/wok/plugins/gingerbase/ui/pages/repository-edit.html.tmpl index 67edecb..9e1c54f 100644 --- a/src/wok/plugins/gingerbase/ui/pages/repository-edit.html.tmpl +++ b/src/wok/plugins/gingerbase/ui/pages/repository-edit.html.tmpl @@ -23,97 +23,57 @@ #silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True) #silent _ = t.gettext #silent _t = t.gettext - -<div id="repository-edit-window" class="window"> - <form id="form-repository-edit"> - <header> - <h1 class="title h1 grey">$_("Edit Repository")</h1> - </header> - <div class="content"> - <section id="form-repository-edit"> - <fieldset class="repository-edit-fieldset"> - <div class="repository-id yum"> - <div class="repository-edit-wrapper-label"> - <label for="repository-edit-id-textbox">$_("ID")</label> - </div> - <div class="repository-edit-wrapper-controls"> - <input id="repository-edit-id-textbox" name="repo_id" type="text" disabled="disabled" readonly="readonly"/> - </div> - </div> - <div class="repository-name yum"> - <div class="repository-edit-wrapper-label"> - <label for="repository-edit-name-textbox">$_("Name")</label> - </div> - <div class="repository-edit-wrapper-controls"> - <input id="repository-edit-name-textbox" class="yum" name="config[repo_name]" type="text" /> - </div> - </div> - <div class="repository-url"> - <div class="repository-edit-wrapper-label"> - <label for="repository-edit-baseurl-textbox">$_("URL")</label> - </div> - <div class="repository-edit-wrapper-controls"> - <input id="repository-edit-baseurl-textbox" name="baseurl" type="text" /> - </div> - </div> - <div class="repository-dist deb"> - <div class="repository-edit-wrapper-label"> - <label for="repository-edit-urlargs-textbox">$_("Distribution")</label> - </div> - <div class="repository-edit-wrapper-controls"> - <input id="repository-edit-urlargs-textbox" class="deb" name="config[dist]" type="text" /> - </div> - </div> - <div class="repository-mirrorlist yum"> - <div class="repository-edit-wrapper-label"> - <label for="repository-edit-urlargs-textbox">$_("Mirror List URL")</label> - </div> - <div class="repository-edit-wrapper-controls"> - <input id="repository-edit-urlargs-textbox" class="yum" name="config[mirrorlist]" type="text" /> - </div> - </div> - <div class="repository-comps deb"> - <div class="repository-edit-wrapper-label"> - <label for="repository-edit-urlargs-textbox">$_("Components")</label> - </div> - <div class="repository-edit-wrapper-controls"> - <input id="repository-edit-urlargs-textbox" class="deb" name="config[comps]" type="text" /> - </div> - </div> - <div class="repository-gpgkey yum"> - <div class="repository-edit-wrapper-label"> - <label for="repository-edit-gpgkey-textbox">$_("GPG Key")</label> - </div> - <div class="repository-edit-wrapper-controls"> - <input id="repository-edit-gpgkey-textbox" class="yum" name="config[gpgkey]" type="text" /> - </div> - </div> - <div class="repository-gpgcheck yum"> - <div class="repository-edit-wrapper-label"> - <label>$_("GPG Check")</label> - </div> - <div class="repository-edit-wrapper-controls"> - <input id="repository-edit-gpgcheck-radio-true" class="yum" name="config[gpgcheck]" type="radio" value="true" /> - <label for="repository-edit-gpgcheck-radio-true">$_("Yes")</label> - <input id="repository-edit-gpgcheck-radio-false" class="yum" name="config[gpgcheck]" type="radio" value="false" /> - <label for="repository-edit-gpgcheck-radio-false">$_("No")</label> - </div> - </div> - </fieldset> - </section> - </div> - <footer> - <div class="btn-group"> - <button type="submit" id="repository-edit-button-save" class="btn-normal"> - <span class="text">$_("Save")</span> - </button> - <button type="button" id="repository-edit-button-cancel" class="close btn-normal"> - <span class="text">$_("Cancel")</span> - </button> +<div class="modal-content"> + <div class="modal-header"> + <h4 class="modal-title">$_("Edit Repository")</h4> + </div> + <div class="modal-body"> + <form id="form-repository-edit"> + <div class="form-group repository-id yum"> + <label for="repository-edit-id-textbox">$_("ID")</label> + <input id="repository-edit-id-textbox" class="form-control" name="repo_id" type="text" disabled="disabled" readonly="readonly" /> </div> - </footer> - </form> + <div class="form-group repository-name yum"> + <label for="repository-edit-name-textbox">$_("Name")</label> + <input id="repository-edit-name-textbox" class="form-control yum" name="config[repo_name]" type="text" /> + </div> + <div class="form-group repository-url"> + <label for="repository-edit-baseurl-textbox">$_("URL")</label> + <input id="repository-edit-baseurl-textbox" class="form-control" name="baseurl" type="text" /> + </div> + <div class="form-group repository-dist deb"> + <label for="repository-edit-urlargs-textbox">$_("Distribution")</label> + <input id="repository-edit-urlargs-textbox" class="form-control deb" name="config[dist]" type="text" /> + </div> + <div class="form-group repository-mirrorlist yum"> + <label for="repository-edit-urlargs-textbox">$_("Mirror List URL")</label> + <input id="repository-edit-urlargs-textbox" class="form-control yum" name="config[mirrorlist]" type="text" /> + </div> + <div class="form-group repository-comps deb"> + <label for="repository-edit-urlargs-textbox">$_("Components")</label> + <input id="repository-edit-urlargs-textbox" class="form-control deb" name="config[comps]" type="text" /> + </div> + <div class="form-group repository-gpgkey yum"> + <label for="repository-edit-gpgkey-textbox">$_("GPG Key")</label> + <input id="repository-edit-gpgkey-textbox" class="form-control yum" name="config[gpgkey]" type="text" /> + </div> + <div class="form-group repository-gpgcheck yum"> + <label>$_("GPG Check")</label> + <label for="repository-edit-gpgcheck-radio-true" class="radio inline control-label"> + <input id="repository-edit-gpgcheck-radio-true" class="yum" name="config[gpgcheck]" type="radio" value="true" /> $_("Yes") + </label> + <label for="repository-edit-gpgcheck-radio-false" class="radio inline control-label"> + <input id="repository-edit-gpgcheck-radio-false" class="yum" name="config[gpgcheck]" type="radio" value="false" /> $_("No") + </label> + </div> + </form> + </div> + <div class="modal-footer"> + <button type="submit" id="repository-edit-button-save" class="btn btn-default">$_("Save")</button> + <button type="button" id="repository-edit-button-cancel" class="btn btn-default">$_("Cancel")</button> + </div> </div> <script type="text/javascript"> kimchi.repository_edit_main(); </script> + \ No newline at end of file -- 1.9.3

From: samhenri <samuel.guimaraes@eldorado.org.br> Signed-off-by: samhenri <samuel.guimaraes@eldorado.org.br> --- .../kimchi/ui/css/theme-default/template_add.css | 317 ---------------- .../kimchi/ui/js/src/kimchi.template_add_main.js | 406 +++++++++++++++------ .../plugins/kimchi/ui/pages/template-add.html.tmpl | 344 ++++++++--------- .../kimchi/ui/pages/template-edit.html.tmpl | 236 ++++++------ .../plugins/kimchi/ui/pages/templates.html.tmpl | 93 +++-- 5 files changed, 615 insertions(+), 781 deletions(-) delete mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/template_add.css diff --git a/src/wok/plugins/kimchi/ui/css/theme-default/template_add.css b/src/wok/plugins/kimchi/ui/css/theme-default/template_add.css deleted file mode 100644 index f1e28c5..0000000 --- a/src/wok/plugins/kimchi/ui/css/theme-default/template_add.css +++ /dev/null @@ -1,317 +0,0 @@ -/* - * Project Kimchi - * - * Copyright IBM, Corp. 2013-2015 - * - * 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. - */ -.page-list { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - overflow: hidden; -} - -.page { - position: absolute; - left: 100%; - width: 100%; - height: 100%; - overflow: auto; -} - -.page>header { - position: relative; - overflow: hidden; -} - -.button-group { - margin-left: 5px; -} - -.back { - float: left; display : block; - width: 50px; - height: 52px; - background: url(../images/theme-default/icon-back.png) center - center no-repeat; - cursor: pointer; - display: block; -} - -.step-title { - color: #333; - font-size: 18px; - font-weight: normal; - padding: 15px 10px; -} - -.step-choose>li>a { - display: block; - margin: 0 10px 10px; - padding: 20px 10px 20px 65px; - border: 2px solid #ccc; - background: url(../images/theme-default/icon-local.png) 15px - center no-repeat; - cursor: pointer; -} - -.step-choose>li>a.local { - background-image: url(../images/theme-default/icon-local.png); -} - -.step-choose>li>a.remote { - background-image: url(../images/theme-default/icon-remote.png); -} - -.step-choose>li>a:HOVER { - border: 2px solid #06C; -} - -.step-subtitle { - font-size: 16px; - height: 48px; - line-height: 48px; - color: #06C; - margin: 0 10px; - font-weight: bold; - text-shadow: -1px -1px 1px #eaeaea, 1px 1px 1px #fff; -} - -.custom-iso-field { - position: relative; - padding: 0 10px 10px; -} - -.custom-iso-field>.input-wrapper { - margin-right: 110px; -} - -.custom-iso-field>.input-wrapper>input.text { - padding: 10px; - color: #333; - font-size: 13px; - background: #fff; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; - box-shadow: 2px 2px 2px #eee inset; - border-top: 1px solid #bbb; - border-left: 1px solid #bbb; - width: 100%; -} - -.custom-iso-field>button { - position: absolute; - top: -6px; - right: 8px; -} - -.iso-field .button-field { - padding: 0 20px; - text-align: right; -} - -.check-all { - display: inline-block; - position: relative; - height: 38px; - line-height: 38px; - margin: 5px; - font-size: 13px; -} - -.check-all input { - margin: 0 5px 0 0; -} - -.box { - background: #ffffff; - background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -webkit-gradient(linear, left top, left bottom, - color-stop(0%, #ffffff), color-stop(100%, #e5e5e5)); - background: -webkit-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -o-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: -ms-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); - background: linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', - endColorstr='#e5e5e5', GradientType=0); - border: 1px solid #ccc; - color: #333; - text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff; - -webkit-border-radius: 8px; - -moz-border-radius: 8px; - border-radius: 8px; -} - -.box:HOVER { - border: 1px solid #aaa; - -webkit-box-shadow: #bbb 0px 0px 5px; - box-shadow: #bbb 0px 0px 5px; -} - -.box-iso { - padding: 10px; - margin: 5px; - overflow: hidden; -} - -.iso-icon { - float: left; - width: 58px; - height: 58px; - margin: 0 5px 0 0; - border: 1px solid #CCCCCC; - border-radius: 8px; - background: url(../images/icon-vm.png) center center no-repeat; - background-size: 58px; -} - -.iso-icon.centos { - background-image: url(../images/icon-centos.png); -} - -.iso-icon.debian { - background-image: url(../images/icon-debian.png); -} - -.iso-icon.fedora { - background-image: url(../images/icon-fedora.png); -} - -.iso-icon.opensuse { - background-image: url(../images/icon-opensuse.png); -} - -.iso-icon.ubuntu { - background-image: url(../images/icon-ubuntu.png); -} - -.iso-icon.gentoo { - background-image: url(../images/icon-gentoo.png); -} - -.list-iso { - overflow: hidden; - margin: 5px; -} - -.list-iso li { - float: left; - width: 320px; -} - -.list-iso>li>label { - display: block; - cursor: pointer; -} - -.list-iso>li>label>input[type="checkbox"] { - display: none; -} - -.list-iso>li>label>input[type="checkbox"]:CHECKED+.box-iso { - border: 1px solid rgb(11, 107, 173); - -webkit-box-shadow: rgb(11, 107, 173) 0px 0px 4px; - box-shadow: rgb(11, 107, 173) 0px 0px 4px; -} - -.iso-title { - margin: 0; - display: block; - position: relative; - height: 23px; - line-height: 23px; - font-size: 14px; - font-weight: normal; - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.iso-title>label>input { - display: block; - position: absolute; - top: 0; - right: 2px; -} - -.iso-info { - margin-top: 5px; - overflow: hidden; -} - -.iso-info-col { - float: left; - width: 50%; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0 0 0 5px; -} - -.iso-info-col:FIRST-CHILD { - padding: 0 5px 0 0; - border-right: 1px solid #999; -} - -.iso-info-item { - font-weight: bold; - color: #999; - font-size: 11px; - line-height: 18px; - max-width: 106px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -#iso-search { - margin: 10px 15px; -} - -#iso-search-loading { - margin: 10px 15px; - background: #C0C0C0 url(../images/theme-default/loading.gif) 7px - center no-repeat; - padding: 0 20px 0 26px; -} - -#iso-more-loading { - background: #C0C0C0 url(../images/theme-default/loading.gif) 7px - center no-repeat; - padding: 0 20px 0 26px; -} - -#vm-image-local-box .body { - margin: 30px 0 0 26px; -} - -#vm-image-local-box .body input { - background: none repeat scroll 0 0 #FFFFFF; - border-left: 1px solid #BBBBBB; - border-radius: 5px 5px 5px 5px; - border-top: 1px solid #BBBBBB; - box-shadow: 2px 2px 2px #EEEEEE inset; - color: #333333; - font-size: 13px; - padding: 10px; - margin-left: 10px; - width: 600px; -} - -#vm-image-local-box .body button { - margin-left: 10px; -} diff --git a/src/wok/plugins/kimchi/ui/js/src/kimchi.template_add_main.js b/src/wok/plugins/kimchi/ui/js/src/kimchi.template_add_main.js index 01a47c2..961d23a 100644 --- a/src/wok/plugins/kimchi/ui/js/src/kimchi.template_add_main.js +++ b/src/wok/plugins/kimchi/ui/js/src/kimchi.template_add_main.js @@ -42,68 +42,9 @@ kimchi.switchPage = function(fromPageId, toPageId, direction) { }; kimchi.template_add_main = function() { + "use strict"; + var currentPage = 'iso-local-box'; kimchi.deepScanHandler = null; - // 1-1 local iso - $('#iso-local').click(function() { - kimchi.switchPage('iso-type-box', 'iso-local-box'); - initLocalIsoField(); - initIsoFileField(); - kimchi.listIsos(function(isos) { - if (isos && isos.length) { - showLocalIsoField(isos); - $('#iso-more').show(); - } else { - $('#iso-search').show(); - } - }, function(err) { - wok.message.error(err.responseJSON.reason); - }); - }); - - $('#iso-local-box-back').click(function() { - if (kimchi.deepScanHandler) { - kimchi.deepScanHandler.stop = true; - } - kimchi.switchPage('iso-local-box', 'iso-type-box', 'right'); - }); - - $('#iso-search').click(function() { - var settings = { - content : i18n['KCHTMPL6002M'] - }; - wok.confirm(settings, function() { - $('#iso-search').hide(); - $('#iso-search-loading').show(); - deepScan('#iso-search'); - }); - }); - - $('#iso-more').click(function() { - var settings = { - content : i18n['KCHTMPL6002M'] - }; - wok.confirm(settings, function() { - $('#iso-more').hide(); - $('#iso-more-loading').show(); - deepScan('#iso-more'); - }); - }); - - $('#iso-search-loading').click(function() { - $('#iso-search-loading').hide(); - $('#iso-search').show(); - if (kimchi.deepScanHandler) { - kimchi.deepScanHandler.stop = true; - } - }); - - $('#iso-more-loading').click(function() { - $('#iso-more-loading').hide(); - $('#iso-more').show(); - if (kimchi.deepScanHandler) { - kimchi.deepScanHandler.stop = true; - } - }); var deepScan = function(button) { kimchi.deepScanHandler = kimchi.stepListDeepScanIsos(function(isos, isFinished) { @@ -141,6 +82,19 @@ kimchi.template_add_main = function() { $('#iso-search-loading').hide(); $('#iso-more-loading').hide(); $('#list-local-iso').empty(); + + // Resets input fields and hide other buttons + $('#iso-file').val(''); // 1 - Folder path text + $('vm-image-local-text').val(''); // 3 - File path text + $('#iso-url').val(''); // 4 - Remote folder path text + $('#btn-template-file-create').attr('disabled', 'disabled').css('display','inline-block'); // 1 - Folder path + $('#btn-template-local-iso-create').attr('disabled', 'disabled').css('display','none'); // 2 - Selected ISOs + $('#vm-image-local-box-button').attr('disabled', 'disabled').css('display','none'); // 3 - File path + $('#btn-template-url-create').attr('disabled', 'disabled').css('display','none'); // 4 - Remote folder path + $('#btn-template-remote-iso-create').attr('disabled', 'disabled').css('display','none'); // 5 - Remote selected isos + $('#select-all-local-iso, #select-all-remote-iso').prop('checked', false); // False to all select-all checkboxes + $('#list-local-iso [type="checkbox"], #list-remote-iso [type="checkbox"]').prop('checked', false); // False to all list checkboxes + }; var showLocalIsoField = function(isos) { @@ -159,10 +113,160 @@ kimchi.template_add_main = function() { $('#local-iso-field').show(); }; + + //1-1-2 local iso file + var initIsoFileField = function() { + //$('#iso-file-check').prop('checked', false); + $('#iso-file').val(''); + $('vm-image-local-text').val(''); + $('#iso-url').val(''); + $('#btn-template-file-create').attr('disabled', 'disabled').css('display','inline-block'); + + $('#btn-template-local-iso-create').attr('disabled', 'disabled').css('display','none'); // 2 - Selected ISOs + + $('#vm-image-local-box-button').attr('disabled', 'disabled').css('display','none'); // 3 - File path + + $('#btn-template-url-create').attr('disabled', 'disabled').css('display','none'); // 4 - Remote folder path + + $('#btn-template-remote-iso-create').attr('disabled', 'disabled').css('display','none'); // 5 - Remote selected isos + + $('#select-all-local-iso, #select-all-remote-iso').prop('checked', false); // False to all select-all checkboxes + + $('#list-local-iso [type="checkbox"], #list-remote-iso [type="checkbox"]').prop('checked', false); // False to all list checkboxes + + }; + + $('#iso-file').on('input propertychange', function() { + if ($('#iso-file').val()) { + + $('#btn-template-file-create').removeAttr('disabled').css('display','inline-block'); // 1 - Folder path + + $('#btn-template-local-iso-create').attr('disabled', 'disabled').css('display','none'); // 2 - Selected ISOs + + $('#vm-image-local-box-button').attr('disabled', 'disabled').css('display','none'); // 3 - File path + + $('#btn-template-url-create').attr('disabled', 'disabled').css('display','none'); // 4 - Remote folder path + + $('#btn-template-remote-iso-create').attr('disabled', 'disabled').css('display','none'); // 5 - Remote selected isos + + $('#select-all-local-iso, #select-all-remote-iso').prop('checked', false); // False to all select-all checkboxes + + $('#list-local-iso [type="checkbox"], #list-remote-iso [type="checkbox"]').prop('checked', false); // False to all list checkboxes + + } else { + $('#btn-template-file-create').attr('disabled', 'disabled'); + } + }); + + initLocalIsoField(); + initIsoFileField(); + kimchi.listIsos(function(isos) { + if (isos && isos.length) { + showLocalIsoField(isos); + $('#iso-more').show(); + } else { + $('#iso-search').show(); + } + }, function(err) { + wok.message.error(err.responseJSON.reason); + }); + $('#template-add-window .modal-body .template-pager').animate({ + height: "689px" + },400); + + // 1-1 local iso + $('#iso-local').change(function() { + if(this.checked){ + if(currentPage === 'vm-image-local-box') { + kimchi.switchPage(currentPage, 'iso-local-box','right'); + } else if(currentPage === 'iso-remote-box') { + kimchi.switchPage(currentPage, 'iso-local-box','right'); + } + currentPage = 'iso-local-box'; + $('#template-add-window .modal-body .template-pager').animate({ + height: "689px" + },400); + initLocalIsoField(); + initIsoFileField(); + + $('#btn-template-file-create').attr('disabled', 'disabled').css('display','inline-block'); // 1 - Folder path + + $('#btn-template-local-iso-create').attr('disabled', 'disabled').css('display','none'); // 2 - Selected ISOs + + $('#vm-image-local-box-button').attr('disabled', 'disabled').css('display','none'); // 3 - File path + + $('#btn-template-url-create').attr('disabled', 'disabled').css('display','none'); // 4 - Remote folder path + + $('#btn-template-remote-iso-create').attr('disabled', 'disabled').css('display','none'); // 5 - Remote selected isos + + + kimchi.listIsos(function(isos) { + if (isos && isos.length) { + showLocalIsoField(isos); + $('#iso-more').show(); + } else { + $('#iso-search').show(); + } + }, function(err) { + wok.message.error(err.responseJSON.reason); + }); + } + }); + + $('#iso-search').click(function() { + var settings = { + content : i18n['KCHTMPL6002M'] + }; + wok.confirm(settings, function() { + $('#iso-search').hide(); + $('#iso-search-loading').show(); + deepScan('#iso-search'); + }); + }); + + $('#iso-more').click(function() { + var settings = { + content : i18n['KCHTMPL6002M'] + }; + wok.confirm(settings, function() { + $('#iso-more').hide(); + $('#iso-more-loading').show(); + deepScan('#iso-more'); + }); + }); + + $('#iso-search-loading').click(function() { + $('#iso-search-loading').hide(); + $('#iso-search').show(); + if (kimchi.deepScanHandler) { + kimchi.deepScanHandler.stop = true; + } + }); + + $('#iso-more-loading').click(function() { + $('#iso-more-loading').hide(); + $('#iso-more').show(); + if (kimchi.deepScanHandler) { + kimchi.deepScanHandler.stop = true; + } + }); + $('#select-all-local-iso').click(function() { $('#list-local-iso [type="checkbox"]').prop('checked', $(this).prop('checked')); if ($(this).prop('checked')) { - $('#btn-template-local-iso-create').removeAttr('disabled'); + $('#iso-file').val(''); + $('vm-image-local-text').val(''); + + $('#btn-template-file-create').attr('disabled', 'disabled').css('display','none'); // 1 - Folder path + + $('#btn-template-local-iso-create').removeAttr('disabled').css('display','inline-block'); // 2 - Selected ISOs + + $('#vm-image-local-box-button').attr('disabled', 'disabled').css('display','none'); // 3 - File path + + $('#btn-template-url-create').attr('disabled', 'disabled').css('display','none'); // 4 - Remote folder path + + $('#btn-template-remote-iso-create').attr('disabled', 'disabled').css('display','none'); // 5 - Remote selected isos + } else { $('#btn-template-local-iso-create').attr('disabled', 'disabled'); } @@ -170,10 +274,24 @@ kimchi.template_add_main = function() { $('#list-local-iso').on('click', '[type="checkbox"]', function() { var checkedLength = $('#list-local-iso [type="checkbox"]:checked').length; + $('#iso-file').val(''); + $('vm-image-local-text').val(''); + $('#iso-url').val(''); + + $('#btn-template-file-create').attr('disabled', 'disabled').css('display','none'); // 1 - Folder path + + $('#btn-template-local-iso-create').attr('disabled', 'disabled').css('display','inline-block'); // 2 - Selected ISOs + + $('#vm-image-local-box-button').attr('disabled', 'disabled').css('display','none'); // 3 - File path + + $('#btn-template-url-create').attr('disabled', 'disabled').css('display','none'); // 4 - Remote folder path + + $('#btn-template-remote-iso-create').attr('disabled', 'disabled').css('display','none'); // 5 - Remote selected isos if (checkedLength) { $('#btn-template-local-iso-create').removeAttr('disabled'); var length = $('#list-local-iso [type="checkbox"]').length; $('#select-all-local-iso').prop('checked', length == checkedLength); + $('#btn-template-local-iso-create').removeAttr('disabled'); } else { $('#select-all-local-iso').prop('checked', false); $('#btn-template-local-iso-create').attr('disabled', 'disabled'); @@ -184,32 +302,9 @@ kimchi.template_add_main = function() { submitIso('form-local-iso'); }); - //1-1-2 local iso file - var initIsoFileField = function() { - $('#iso-file-check').prop('checked', false); - $('#iso-file-box').hide(); - $('#iso-file').val(''); - $('#btn-template-file-create').attr('disabled', 'disabled'); - }; - - $('#iso-file-check').click(function() { - if ($(this).prop('checked')) { - $('#iso-file-box').slideDown(); - } else { - $('#iso-file-box').slideUp(); - } - }); - - $('#iso-file').on('input propertychange', function() { - if ($('#iso-file').val()) { - $('#btn-template-file-create').removeAttr('disabled'); - } else { - $('#btn-template-file-create').attr('disabled', 'disabled'); - } - }); - $('#btn-template-file-create').click(function() { var isoFile = $('#iso-file').val(); + $('vm-image-local-text').val(''); if (!kimchi.template_check_path(isoFile)) { wok.message.error.code('KCHAPI6003E'); return; @@ -221,7 +316,7 @@ kimchi.template_add_main = function() { }); //1-2 remote iso - $('#iso-remote').css('opacity', 0.3).css('cursor', 'not-allowed'); + $('#iso-remote').attr("disabled", true).css('cursor', 'not-allowed'); var enabledRemoteIso = function() { if (kimchi.capabilities == undefined) { @@ -233,23 +328,29 @@ kimchi.template_add_main = function() { return; } - $('#iso-remote').css('opacity', 1).css('cursor', 'pointer'); - $('#iso-remote').click(function() { - kimchi.switchPage('iso-type-box', 'iso-remote-box'); - initRemoteIsoField(); - initIsoUrlField(); - kimchi.listDistros(function(isos) { - showRemoteIsoField(isos); - }, function() { - }); + $('#iso-remote').attr("disabled", false).css('cursor', 'pointer'); + $('#iso-remote').change(function() { + if (this.checked) { + if(currentPage === 'iso-local-box') { // slide twice + kimchi.switchPage(currentPage, 'iso-remote-box','left'); + } else if(currentPage === 'vm-image-local-box') { // slide once + kimchi.switchPage(currentPage, 'iso-remote-box','left'); + } + currentPage = 'iso-remote-box'; + $('#template-add-window .modal-body .template-pager').animate({ + height: "689px" + },400); + initRemoteIsoField(); + initIsoUrlField(); + kimchi.listDistros(function(isos) { + showRemoteIsoField(isos); + }, function() { + }); + } }); }; enabledRemoteIso(); - $('#iso-remote-box-back').click(function() { - kimchi.switchPage('iso-remote-box', 'iso-type-box', 'right'); - }); - //1-2-1 remote iso list var initRemoteIsoField = function() { $('#load-remote-iso').show(); @@ -257,6 +358,25 @@ kimchi.template_add_main = function() { $('#iso-url-field').hide(); $('#select-all-remote-iso').prop('checked', false); $('#btn-template-remote-iso-create').attr('disabled', 'disabled'); + + $('#iso-file').val(''); + $('vm-image-local-text').val(''); + $('#iso-url').val(''); + + $('#btn-template-file-create').attr('disabled', 'disabled').css('display','none'); // 1 - Folder path + + $('#btn-template-local-iso-create').attr('disabled', 'disabled').css('display','none'); // 2 - Selected ISOs + + $('#vm-image-local-box-button').attr('disabled', 'disabled').css('display','none'); // 3 - File path + + $('#btn-template-url-create').attr('disabled', 'disabled').css('display','inline-block'); // 4 - Remote folder path + + $('#btn-template-remote-iso-create').attr('disabled', 'disabled').css('display','none'); // 5 - Remote selected isos + + $('#select-all-local-iso, #select-all-remote-iso').prop('checked', false); // False to all select-all checkboxes + + $('#list-local-iso [type="checkbox"], #list-remote-iso [type="checkbox"]').prop('checked', false); // False to all list checkboxes + }; var showRemoteIsoField = function(isos) { @@ -286,7 +406,21 @@ kimchi.template_add_main = function() { $('#select-all-remote-iso').click(function() { $('#list-remote-iso [type="checkbox"]').prop('checked', $(this).prop('checked')); if ($(this).prop('checked')) { - $('#btn-template-remote-iso-create').removeAttr('disabled'); + + $('#iso-file').val(''); + $('vm-image-local-text').val(''); + $('#iso-url').val(''); + + $('#btn-template-file-create').attr('disabled', 'disabled').css('display','none'); // 1 - Folder path + + $('#btn-template-local-iso-create').attr('disabled', 'disabled').css('display','none'); // 2 - Selected ISOs + + $('#vm-image-local-box-button').attr('disabled', 'disabled').css('display','none'); // 3 - File path + + $('#btn-template-url-create').attr('disabled', 'disabled').css('display','none'); // 4 - Remote folder path + + $('#btn-template-remote-iso-create').removeAttr('disabled').css('display','inline-block'); // 5 - Remote selected isos + } else { $('#btn-template-remote-iso-create').attr('disabled', 'disabled'); } @@ -298,6 +432,21 @@ kimchi.template_add_main = function() { $('#btn-template-remote-iso-create').removeAttr('disabled'); var length = $('#list-remote-iso [type="checkbox"]').length; $('#select-all-remote-iso').prop('checked', length == checkedLength); + + $('#iso-file').val(''); + $('vm-image-local-text').val(''); + $('#iso-url').val(''); + + $('#btn-template-file-create').attr('disabled', 'disabled').css('display','none'); // 1 - Folder path + + $('#btn-template-local-iso-create').attr('disabled', 'disabled').css('display','none'); // 2 - Selected ISOs + + $('#vm-image-local-box-button').attr('disabled', 'disabled').css('display','none'); // 3 - File path + + $('#btn-template-url-create').attr('disabled', 'disabled').css('display','none'); // 4 - Remote folder path + + $('#btn-template-remote-iso-create').removeAttr('disabled').css('display','inline-block'); // 5 - Remote selected isos + } else { $('#select-all-remote-iso').prop('checked', false); $('#btn-template-remote-iso-create').attr('disabled', 'disabled'); @@ -310,19 +459,22 @@ kimchi.template_add_main = function() { //1-2-2 remote iso url var initIsoUrlField = function() { - $('#iso-url-check').prop('checked', false); - $('#iso-url-box').hide(); + + $('#iso-file').val(''); + $('vm-image-local-text').val(''); $('#iso-url').val(''); - $('#btn-template-url-create').attr('disabled', 'disabled'); - } - $('#iso-url-check').click(function() { - if ($(this).prop('checked')) { - $('#iso-url-box').slideDown(); - } else { - $('#iso-url-box').slideUp(); - } - }); + $('#btn-template-file-create').attr('disabled', 'disabled').css('display','none'); // 1 - Folder path + + $('#btn-template-local-iso-create').attr('disabled', 'disabled').css('display','none'); // 2 - Selected ISOs + + $('#vm-image-local-box-button').attr('disabled', 'disabled').css('display','none'); // 3 - File path + + $('#btn-template-url-create').attr('disabled','disabled').css('display','inline-block'); // 4 - Remote folder path + + $('#btn-template-remote-iso-create').attr('disabled', 'disabled').css('display','none'); // 5 - Remote selected isos + + } $('#iso-url').on('input propertychange', function() { if ($('#iso-url').val()) { @@ -332,20 +484,34 @@ kimchi.template_add_main = function() { } }); - $('#vm-image-local').click(function(){ - kimchi.switchPage('iso-type-box', 'vm-image-local-box'); - }); - $('#vm-image-local-box-back').click(function(){ - kimchi.switchPage('vm-image-local-box', 'iso-type-box', 'right'); + $('#vm-image-local').change(function(){ + if(this.checked) { + if(currentPage === 'iso-local-box') { + kimchi.switchPage(currentPage, 'vm-image-local-box','left'); + } else if(currentPage === 'iso-remote-box') { + kimchi.switchPage(currentPage, 'vm-image-local-box','right'); + } + currentPage = 'vm-image-local-box'; + $('#template-add-window .modal-body .template-pager').animate({ + height: "100px" + },400); + + $('#btn-template-file-create').attr('disabled', 'disabled').css('display','none'); // 1 - Folder path + $('#btn-template-local-iso-create').attr('disabled', 'disabled').css('display','none'); // 2 - Selected ISOs + $('#vm-image-local-box-button').attr('disabled', 'disabled').css('display','inline-block'); // 3 - File path + $('#btn-template-url-create').attr('disabled', 'disabled').css('display','none'); // 4 - Remote folder path + $('#btn-template-remote-iso-create').attr('disabled', 'disabled').css('display','none'); // 5 - Remote selected isos + + } }); $('input', '#vm-image-local-box').on('keyup cut paste', function(){ setTimeout(function(){ var isValid = kimchi.template_check_path($('input', '#vm-image-local-box').val()); $('input', '#vm-image-local-box').toggleClass('invalid-field', !isValid); - $('button', $('.body', '#vm-image-local-box')).button(isValid ? "enable" : "disable"); + $('#vm-image-local-box-button').attr('disabled', (isValid ? "false" : "true")); }, 0); }); - $('button', $('.body', '#vm-image-local-box')).button({ + $('button', $('#vm-image-local-box')).button({ disabled: true }).click(function(){ $('input', '#vm-image-local-box').prop('disabled', true); @@ -438,4 +604,4 @@ kimchi.template_check_path = function(filePath) { return reg.test(filePath); } return false; -}; +}; \ No newline at end of file diff --git a/src/wok/plugins/kimchi/ui/pages/template-add.html.tmpl b/src/wok/plugins/kimchi/ui/pages/template-add.html.tmpl index 4c0f1da..e441a99 100644 --- a/src/wok/plugins/kimchi/ui/pages/template-add.html.tmpl +++ b/src/wok/plugins/kimchi/ui/pages/template-add.html.tmpl @@ -24,207 +24,177 @@ <!DOCTYPE html> <html> <body> -<div class="window" style="width: 992px;height: 660px;"> - <header> - <h1 class="title h1 grey">$_("Add Template")</h1> - </header> - <div class="content" style="margin-bottom: 0"> - <div class="page-list"> - <!-- 1 --> - <div class="page" id="iso-type-box" style="left:0"> - <h2 class="step-title">$_("Where is the source media for this template? ")</h2> - <ul class="step-choose"> - <li> - <a id="iso-local" class="local">$_("Local ISO Image")</a> - </li> - <li> - <a id="vm-image-local" class="local">$_("Local Image File")</a> - </li> - <li> - <a id="iso-remote" class="remote">$_("Remote ISO Image")</a> - </li> - </ul> +<div id="template-add-window" class="window modal-content"> + <div class="modal-header"> + <h4 class="modal-title">$_("Add Template")</h4> </div> - - <!-- 1-1 --> - <div class="page" id="iso-local-box"> - <header> - <a class="back" id="iso-local-box-back"></a> - <h2 class="step-title">$_("Local ISO Image")</h2> - </header> - - <button class="btn-normal" id="iso-search" style="display: none"><span class="text">$_("Search ISOs")</span></button> - <button class="btn-normal" id="iso-search-loading" style="display: none"><span class="text">$_("Please, wait...")</span></button> - <!-- 1-1-1 --> - <div id="local-iso-field" class="iso-field" style="display: none;"> - <h3 class="step-subtitle"> - $_("The following ISOs are available:") - </h3> - <div class="toolbar"> - <label class="check-all"> - <input type="checkbox" id="select-all-local-iso">$_("All") + <div class="modal-body"> + <div class="template-modal-container"> + <div> + <h5>$_("Where is the source media for this template? ")</h5> + <label class="radio-inline"> + <input type="radio" checked="checked" name="iso-source" id="iso-local" value="iso-local"> $_("Local ISO Image") + </label> + <label class="radio-inline"> + <input type="radio" name="iso-source" id="vm-image-local" value="vm-image-local"> $_("Local Image File") </label> + <label class="radio-inline"> + <input type="radio" name="iso-source" id="iso-remote" value="iso-remote"> $_("Remote ISO Image") + </label> </div> - <div> - <form id="form-local-iso"> - <ul id="list-local-iso" class="list-iso"> - </ul> - </form> - <script id="tmpl-list-local-iso" type="text/html"> - <li> - <label> - <input type="checkbox" name="iso" value="{isoId}"> - <div class="box box-iso"> - <div class="iso-icon {os_distro}"> - </div> - <h3 class="iso-title" title="{name}"> - {name} - </h3> - <div class="iso-info"> - <div class="iso-info-col"> - <div class="iso-info-item" title="{os_distro}"> - $_("OS: "){os_distro} - </div> - <div class="iso-info-item" title="{os_version}"> - $_("Version: "){os_version} - </div> - </div> - <div class="iso-info-col"> - <div class="iso-info-item" title="{capacity}"> - $_("Size: "){capacity} - </div> - </div> + </div> + <div class="template-pager"> + <div class="page-list"> + <div class="page" id="iso-local-box"> + <!-- 1-1-2 --> + <div id="iso-file-field"> + <div id="iso-file-box" class="custom-iso-field"> + <div class="form-group"> + <label for="iso-file">Provide a File Path for a specific ISO image:</label> + <input type="text" class="form-control" id="iso-file" name="iso-file"> </div> </div> - </label> - </li> - </script> - </div> - <div class="button-field"> - <button class="btn-normal" id="iso-more" style="display: none"><span class="text">$_("Search more ISOs")</span></button> - <button class="btn-normal" id="iso-more-loading" style="display: none"><span class="text">$_("Please, wait...")</span></button> - <button class="btn-normal" id="btn-template-local-iso-create" disabled="disabled"><span class="text">$_("Create Templates from Selected ISO")</span></button> - </div> - </div> + </div> + <button class="btn btn-primary" id="iso-search" style="display: none">$_("Search ISOs")</button> + <button class="btn btn-primary" id="iso-search-loading" style="display: none"><span class="wok-loading-icon"></span> $_("Please, wait...")</button> + <!-- 1-1-1 --> + <div id="local-iso-field" class="iso-field" style="display: none;"> + <div class="row"> + <p>$_("The following ISOs are available:")</p> + </div> + <div class="checkbox"> + <label class="check-all"> + <input type="checkbox" id="select-all-local-iso">$_("All") + </label> + </div> + <div class="row"> + <form id="form-local-iso"> + <ul id="list-local-iso" class="list-iso"> + </ul> + </form> + <script id="tmpl-list-local-iso" type="text/html"> + <li class="col-md-3"> + <label class="box-iso-outer"> + <input type="checkbox" class="iso-checkbox-hidden" name="iso" value="{isoId}"> + <span class="box-iso-border"> + <span class="box-iso-inner"> + <h3 class="iso-title {os_distro}" title="{name}"> + {name} + </h3> + <dl class="iso-info"> + <dt>{os_distro}</dt> + <dd>$_("OS: ")</dd> + <dt>{os_version}</dt> + <dd>$_("Version: ")</dd> + <dt>{capacity}</dt> + <dd>$_("Size: ")</dd> + </dl> + </span> + </span> + </label> + </li> + </script> + </div> + <div class="row"> + <button class="btn btn-primary" id="iso-more" style="display: none"><span class="text">$_("Search more ISOs")</span></button> + <button class="btn btn-primary" id="iso-more-loading" style="display: none"><span class="wok-loading-icon"></span> $_("Please, wait...")</button> + </div> + </div> + </div> - <!-- 1-1-2 --> - <div id="iso-file-field"> - <h3 class="step-subtitle"> - <label> - <input type="checkbox" id="iso-file-check"> - $_("I want to use a specific ISO file") - </label> - </h3> - <div id="iso-file-box" class="custom-iso-field"> - <div class="input-wrapper"><input type="text" class="text" id="iso-file" name="iso-file"></div> - <button class="btn-normal" id="btn-template-file-create" disabled="disabled"><span class="text">$_("Create")</span></button> - </div> - </div> + <div class="page" id="vm-image-local-box"> + <div class="from-group"> + <label for="vm-image-local-text">$_("File Path:")</label> + <input type="text" class="form-control" id="vm-image-local-text" /> + </div> + </div> - </div> + <!-- 1-2 --> + <div class="page" id="iso-remote-box"> - <div class="page" id="vm-image-local-box"> - <header> - <a class="back" id="vm-image-local-box-back"></a> - <h2 class="step-title">$_("Local Image File")</h2> - </header> - <div class="body"> - <label for="vm-image-local-text">$_("File Path:")</label> - <input type="text" id="vm-image-local-text" /> - <button class="ui-button-primary">$_("Create")</button> - </div> - </div> + <!-- 1-2-2 --> + <div id="iso-url-field" style="display: none;"> + <div id="iso-url-box" class="form-group"> + <label for="iso-url">Provide a URL for a specific ISO image:</label> + <input type="text" class="form-control" id="iso-url" name="iso-url"> + </div> + </div> - <!-- 1-2 --> - <div class="page" id="iso-remote-box"> - <header> - <a class="back" id="iso-remote-box-back"></a> - <h2 class="step-title">$_("Remote ISO Image")</h2> - </header> - - <!-- 1-2-0 --> - <div id="load-remote-iso"> - <h3 class="step-subtitle"> - <label> - <img src = "plugins/kimchi/images/theme-default/loading.gif" /> - $_("Loading default remote ISOs ...") - </label> - </h3> - </div> + <!-- 1-2-0 --> + <div id="load-remote-iso"> + <p><span class="wok-loading-icon"></span> $_("Loading default remote ISOs ...")</p> + </div> - <!-- 1-2-1 --> - <div id="remote-iso-field" class="iso-field" style="display: none;"> - <h3 class="step-subtitle"> - $_("The following ISOs are available:") - </h3> - <div class="toolbar"> - <label class="check-all"> - <input type="checkbox" id="select-all-remote-iso">$_("All") - </label> - </div> - <div> - <form id="form-remote-iso"> - <ul id="list-remote-iso" class="list-iso"> - </ul> - </form> - <script id="tmpl-list-remote-iso" type="text/html"> - <li> - <label> - <input type="checkbox" name="iso" value="{isoId}"> - <div class="box box-iso"> - <div class="iso-icon {os_distro}"> - </div> - <h3 class="iso-title" title="{name}"> - {name} - </h3> - <div class="iso-info"> - <div class="iso-info-col"> - <div class="iso-info-item" title="{os_distro}"> - $_("OS: "){os_distro} - </div> - <div class="iso-info-item" title="{os_version}"> - $_("Version: "){os_version} - </div> - - </div> - <div class="iso-info-col"> - <div class="iso-info-item" title="{os_arch}"> - $_("Arch: "){os_arch} - </div> - </div> - </div> - </div> - </label> - </li> - </script> + <!-- 1-2-1 --> + <div id="remote-iso-field" class="iso-field" style="display: none;"> + <div class="row"> + <p>$_("The following ISOs are available:")</p> + </div> + <div class="checkbox"> + <label class="check-all"> + <input type="checkbox" id="select-all-remote-iso">$_("All") + </label> + </div> + <div class="row"> + <form id="form-remote-iso"> + <ul id="list-remote-iso" class="list-iso"> + </ul> + </form> + <script id="tmpl-list-remote-iso" type="text/html"> + <li class="col-md-3"> + <label class="box-iso-outer"> + <input type="checkbox" class="iso-checkbox-hidden" name="iso" value="{isoId}"> + <span class="box-iso-border"> + <span class="box-iso-inner"> + <h3 class="iso-title {os_distro}" title="{name}"> + {name} + </h3> + <dl class="iso-info"> + <dt>{os_distro}</dt> + <dd>$_("OS: ")</dd> + <dt>{os_version}</dt> + <dd>$_("Version: ")</dd> + <dt>{os_arch}</dt> + <dd>$_("Arch: ")</dd> + </dl> + </span> + </span> + </label> + </li> + </script> + </div> + </div> </div> - <div class="button-field"> - <button class="btn-normal" id="btn-template-remote-iso-create" disabled="disabled"><span class="text">$_("Create Templates from Selected ISO")</span></button> - </div> - </div> + </div> + </div> + <div class="modal-footer"> - <!-- 1-2-2 --> - <div id="iso-url-field" style="display: none;"> - <h3 class="step-subtitle"> - <label> - <input type="checkbox" id="iso-url-check"> - $_("I want to use a custom URL") - </label> - </h3> - <div id="iso-url-box" class="custom-iso-field"> - <div class="input-wrapper"><input type="text" class="text" id="iso-url" name="iso-url"></div> - <button class="btn-normal" id="btn-template-url-create" disabled="disabled"><span class="text">$_("Create")</span></button> - </div> - </div> + <!-- Template from local file path --> - </div> - </div> + <!-- TODO: Use only one button and direct action based on current form field and "page" --> + + <button class="btn btn-default" id="btn-template-file-create" disabled="disabled">$_("Create")</button> + + <!-- Template from selected local isos --> + + <!-- Old: $_("Create Templates from Selected ISO") --> + <button class="btn btn-default" id="btn-template-local-iso-create" disabled="disabled">$_("Create")</button> + + <!-- Template from local file path --> + + <button id="vm-image-local-box-button" class="btn btn-default ui-button-primary">$_("Create")</button> + + <!-- Template from URL Iso --> + + <button class="btn btn-default" id="btn-template-url-create" disabled="disabled">$_("Create")</button> + + <!-- Template from selected remote isos --> + + <!-- Old: $_("Create Templates from Selected ISO") --> + <button class="btn btn-default" id="btn-template-remote-iso-create" disabled="disabled">$_("Create")</button> + + <button class="btn btn-default" data-dismiss="modal" type="button">$_("Cancel")</button> </div> - <footer> - <div class="button-group"> - <button class="btn-normal close" type="button"><span type="text">$_("Cancel")</span></button> - </div> - </footer> </div> <script> kimchi.template_add_main(); diff --git a/src/wok/plugins/kimchi/ui/pages/template-edit.html.tmpl b/src/wok/plugins/kimchi/ui/pages/template-edit.html.tmpl index aa7fd1a..433cb48 100644 --- a/src/wok/plugins/kimchi/ui/pages/template-edit.html.tmpl +++ b/src/wok/plugins/kimchi/ui/pages/template-edit.html.tmpl @@ -22,129 +22,127 @@ #silent _ = t.gettext #silent _t = t.gettext -<div id="template-edit-window" class="window"> - <header> - <h1 class="title h1 grey">$_("Edit Template")</h1> - </header> - <div class="content"> - <div id="edit-template-tabs"> - <input type="hidden" id="template-name" name="templateName" /> - <ul> - <li> - <a href="#form-template-general">$_("General")</a> - </li> - <li> - <a href="#form-template-storage">$_("Storage")</a> - </li> - <li> - <a href="#form-template-interface">$_("Interface")</a> - </li> - <li> - <a href="#form-template-processor">$_("Processor")</a> - </li> - </ul> - <form id="form-template-general"> - <div class="form-template-inline-wrapper"> - <div class="template-edit-wrapper-label"> - <label for="template-edit-id-textbox">$_("Name")</label> - </div> - <div class="template-edit-wrapper-label"> - <label for="template-edit-vendor-textbox">$_("Vendor")</label> - </div> - <div class="template-edit-wrapper-label"> - <label for="template-edit-version-textbox">$_("Version")</label> - </div> - <div class="template-edit-wrapper-label"> - <label for="template-edit-memory-textbox">$_("Memory (MB)")</label> - </div> - <div class="template-edit-wrapper-label templ-edit-cdrom"> - <label for="template-edit-cdrom-textbox">$_("CDROM")</label> - </div> - <div class="template-edit-wrapper-label templ-edit-vm-image hide"> - <label for="template-edit-vmimage-textbox">$_("Image File")</label> - </div> - <div class="template-edit-wrapper-label"> - <label>$_("Graphics")</label> - </div> - </div> - <div class="form-template-inline-wrapper"> - <div class="template-edit-wrapper-controls"> - <input id="template-edit-id-textbox" name="name" type="text" /> - </div> - <div class="template-edit-wrapper-controls"> - <input id="template-edit-vendor-textbox" name="os_distro" type="text" disabled="disabled" /> - </div> - <div class="template-edit-wrapper-controls"> - <input id="template-edit-version-textbox" name="os_version" type="text" disabled="disabled" /> - </div> - <div class="template-edit-wrapper-controls"> - <input id="template-edit-memory-textbox" name="memory" type="text" /> - </div> - <div class="template-edit-wrapper-controls templ-edit-cdrom"> - <input id="template-edit-cdrom-textbox" name="cdrom" type="text" disabled="disabled" /> - </div> - <div class="template-edit-wrapper-controls templ-edit-vm-image hide"> - <input id="template-edit-vmimage-textbox" name="vm-image" type="text" disabled="disabled" /> - </div> - <div class="template-edit-wrapper-controls"> - <div class="btn dropdown popable"> - <input id="template-edit-graphics" name="graphics" type="hidden" /> - <span class="text" id="template-edit-graphics-label"></span><span class="arrow"></span> - <div class="popover" style="width: 100%"> - <ul class="select-list" id="template-edit-graphics-list" data-target="template-edit-graphics" data-label="template-edit-graphics-label"> - </ul> +<div id="template-edit-window" class="window modal-content"> + <div class="modal-header"> + <h4 class="modal-title">$_("Edit Template")</h4> + </div> + <div class="modal-body"> + <div id="edit-template-tabs"> + <input type="hidden" id="template-name" name="templateName" /> + <ul> + <li> + <a href="#form-template-general">$_("General")</a> + </li> + <li> + <a href="#form-template-storage">$_("Storage")</a> + </li> + <li> + <a href="#form-template-interface">$_("Interface")</a> + </li> + <li> + <a href="#form-template-processor">$_("Processor")</a> + </li> + </ul> + <form id="form-template-general"> + <div class="form-template-inline-wrapper"> + <div class="template-edit-wrapper-label"> + <label for="template-edit-id-textbox">$_("Name")</label> + </div> + <div class="template-edit-wrapper-label"> + <label for="template-edit-vendor-textbox">$_("Vendor")</label> + </div> + <div class="template-edit-wrapper-label"> + <label for="template-edit-version-textbox">$_("Version")</label> + </div> + <div class="template-edit-wrapper-label"> + <label for="template-edit-memory-textbox">$_("Memory (MB)")</label> + </div> + <div class="template-edit-wrapper-label templ-edit-cdrom"> + <label for="template-edit-cdrom-textbox">$_("CDROM")</label> + </div> + <div class="template-edit-wrapper-label templ-edit-vm-image hide"> + <label for="template-edit-vmimage-textbox">$_("Image File")</label> + </div> + <div class="template-edit-wrapper-label"> + <label>$_("Graphics")</label> </div> </div> - </div> - </div> - </form> - <form id="form-template-storage"> - <div class="template-tab-header"> - <span class="template-storage-cell">$_("Storage Pool")</span> - <span class="template-storage-cell">$_("Type")</span> - <span class="template-storage-cell">$_("Disk(GB)")</span> - <span class="template-storage-cell">$_("Disk Format")</span> - <button type="button" id="template-edit-storage-add-button" class="action-area"></button> - </div> - <div class="template-tab-body"> - </div> - </form> - <form id="form-template-interface"> - <div class="template-tab-header"> - <span class="template-interface-cell">$_("Network")</span> - <span class="template-interface-cell">$_("Type")</span> - <button type="button" id="template-edit-interface-add-button" class="action-area"></button> - </div> - <div class="template-tab-body"></div> - </form> - <form id="form-template-processor"> - <div> - <label for="cpus">$_("CPU Number")</label> - <input type="text" value="1" id="cpus" /> - </div> - <div class="manual"> - <input type="checkbox" id="cpus-check" /> - <label for="cpus-check">$_("Manually set CPU topology")</label> - </div> - <div class="topology hide"> - <div> - <label for="cores">$_("Cores")</label> - <input type="text" value="1" id="cores" /> - </div> - <div> - <label for="threads">$_("Threads")</label> - <select id="threads"></select> - </div> + <div class="form-template-inline-wrapper"> + <div class="template-edit-wrapper-controls"> + <input id="template-edit-id-textbox" name="name" type="text" /> + </div> + <div class="template-edit-wrapper-controls"> + <input id="template-edit-vendor-textbox" name="os_distro" type="text" disabled="disabled" /> + </div> + <div class="template-edit-wrapper-controls"> + <input id="template-edit-version-textbox" name="os_version" type="text" disabled="disabled" /> + </div> + <div class="template-edit-wrapper-controls"> + <input id="template-edit-memory-textbox" name="memory" type="text" /> + </div> + <div class="template-edit-wrapper-controls templ-edit-cdrom"> + <input id="template-edit-cdrom-textbox" name="cdrom" type="text" disabled="disabled" /> + </div> + <div class="template-edit-wrapper-controls templ-edit-vm-image hide"> + <input id="template-edit-vmimage-textbox" name="vm-image" type="text" disabled="disabled" /> + </div> + <div class="template-edit-wrapper-controls"> + <div class="btn dropdown popable"> + <input id="template-edit-graphics" name="graphics" type="hidden" /> + <span class="text" id="template-edit-graphics-label"></span><span class="arrow"></span> + <div class="popover" style="width: 100%"> + <ul class="select-list" id="template-edit-graphics-list" data-target="template-edit-graphics" data-label="template-edit-graphics-label"> + </ul> + </div> + </div> + </div> + </div> + </form> + <form id="form-template-storage"> + <div class="template-tab-header"> + <span class="template-storage-cell">$_("Storage Pool")</span> + <span class="template-storage-cell">$_("Type")</span> + <span class="template-storage-cell">$_("Disk(GB)")</span> + <span class="template-storage-cell">$_("Disk Format")</span> + <button type="button" id="template-edit-storage-add-button" class="action-area"></button> + </div> + <div class="template-tab-body"> + </div> + </form> + <form id="form-template-interface"> + <div class="template-tab-header"> + <span class="template-interface-cell">$_("Network")</span> + <span class="template-interface-cell">$_("Type")</span> + <button type="button" id="template-edit-interface-add-button" class="action-area"></button> + </div> + <div class="template-tab-body"></div> + </form> + <form id="form-template-processor"> + <div> + <label for="cpus">$_("CPU Number")</label> + <input type="text" value="1" id="cpus" /> + </div> + <div class="manual"> + <input type="checkbox" id="cpus-check" /> + <label for="cpus-check">$_("Manually set CPU topology")</label> + </div> + <div class="topology hide"> + <div> + <label for="cores">$_("Cores")</label> + <input type="text" value="1" id="cores" /> + </div> + <div> + <label for="threads">$_("Threads")</label> + <select id="threads"></select> + </div> + </div> + </form> </div> - </form> - </div> </div> - <footer> - <div class="btn-group"> - <a id="tmpl-edit-button-save" class="btn-normal" href="javascript:void(0);"><span class="text">$_("Save")</span></a> - <button class="btn-normal close" type="button"><span class="text">$_("Cancel")</span></button> - </div> - </footer> + <div class="modal-footer"> + <a id="tmpl-edit-button-save" class="btn btn-default" href="javascript:void(0);"><span class="text">$_("Save")</span></a> + <button class="btn btn-default" type="button" data-dismiss="modal">$_("Cancel")</button> + </div> </div> <script> kimchi.template_edit_main(); diff --git a/src/wok/plugins/kimchi/ui/pages/templates.html.tmpl b/src/wok/plugins/kimchi/ui/pages/templates.html.tmpl index af1cf3f..977f30f 100644 --- a/src/wok/plugins/kimchi/ui/pages/templates.html.tmpl +++ b/src/wok/plugins/kimchi/ui/pages/templates.html.tmpl @@ -28,47 +28,64 @@ <script src="plugins/kimchi/js/kimchi.min.js"></script> </head> <body> -<div class="toolbar"> - <div class="tools" style="display:none"> - <a id="template-add" class="btn-tool" href="javascript:void(0);"><span class="icon add">+</span></a> - </div> -</div> -<div> - <div id="noTemplates" class="list-no-result" style="display: none;"> - $_("No templates found.") - </div> - - <ul id="templateList" class="empty-when-logged-off"></ul> - - <script id="templateTmpl" type="html/text"> - - <div class="template-box white-box template-border"> - <div class="btn dropdown popable" style="width: 70px"> - <span class="text">$_("Actions")</span><span class="arrow"></span> - <div class="popover actionsheet right-side" style="width: 250px"> - <a class="button-big template-edit" data-template='{name}'>$_("Edit")</a> - <a class="button-big template-clone" data-template='{name}'>$_("Clone")</a> - <a class="button-big red template-delete" data-template='{name}'>$_("Delete")</a> - </div> - </div> - - <div class="template-icon template-icon-position"> - <img alt="" src="{icon}"> - <img alt="" src="{location}" class="template-type-icon-position"> +<div id="templates-root-container"> + <nav class="navbar navbar-default toolbar"> + <div class="container"> + <!-- Brand and toggle get grouped for better mobile display --> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#toolbar" aria-expanded="false"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + </div> + <!-- Collect the nav links, forms, and other content for toggling --> + <div class="collapse navbar-collapse" id="toolbar"> + <ul class="nav navbar-nav navbar-right tools" display="none"> + <li><a id="template-add" class="btn-tool" href="javascript:void(0);"><i class="fa fa-plus-circle"></i><span>Add a Template</span></a></li> + </ul> </div> - <div class="template-general template-title template-title-position"> - <h2 class="title" title="{name}">{name}</h2> - </div> - <div class="template-os-position"> - <div class="template-text">$_("OS"): {os_distro}</div> - <div class="template-text">$_("Version"): {os_version}</div> - </div> - <div class="template-cpu-position"> - <div class="template-text">$_("CPUs"): {cpus}</div> - <div class="template-text">$_("Memory"): {memory}M</div> + </div> + </nav> + <div class="templates"> + <div class="container"> + <div id="alert-container"></div> + <div id="noTemplates" class="list-no-result" style="display: none;"> + $_("No templates found.") </div> + <ul id="templateList" class="empty-when-logged-off"></ul> + <script id="templateTmpl" type="html/text"> + <div class="template-box white-box template-border"> + <div class="btn dropdown popable" style="width: 70px"> + <span class="text">$_("Actions")</span><span class="arrow"></span> + <div class="popover actionsheet right-side" style="width: 250px"> + <a class="button-big template-edit" data-template='{name}'>$_("Edit")</a> + <a class="button-big template-clone" data-template='{name}'>$_("Clone")</a> + <a class="button-big red template-delete" data-template='{name}'>$_("Delete")</a> + </div> + </div> + <div class="template-icon template-icon-position"> + <img alt="" src="{icon}"> + <img alt="" src="{location}" class="template-type-icon-position"> + </div> + <div class="template-general template-title template-title-position"> + <h2 class="title" title="{name}">{name}</h2> + </div> + <div class="template-os-position"> + <div class="template-text">$_("OS"): {os_distro}</div> + <div class="template-text">$_("Version"): {os_version}</div> + </div> + <div class="template-cpu-position"> + <div class="template-text">$_("CPUs"): {cpus}</div> + <div class="template-text">$_("Memory"): {memory}M</div> + </div> + </div> + </script> </div> - </script> + </div> +<div> +<div id="modalWindow" class="modal fade host-modal templates-modal" tabindex="-1" role="dialog" aria-labelledby="templatesModalLabel" aria-hidden="true"> </div> <script> kimchi.template_main(); -- 1.9.3

From: samhenri <samuel.guimaraes@eldorado.org.br> Signed-off-by: samhenri <samuel.guimaraes@eldorado.org.br> --- .../kimchi/ui/js/src/kimchi.storage_main.js | 6 +- src/wok/plugins/kimchi/ui/pages/storage.html.tmpl | 74 ++++++++++++++-------- 2 files changed, 49 insertions(+), 31 deletions(-) diff --git a/src/wok/plugins/kimchi/ui/js/src/kimchi.storage_main.js b/src/wok/plugins/kimchi/ui/js/src/kimchi.storage_main.js index 40a43f6..7492d83 100644 --- a/src/wok/plugins/kimchi/ui/js/src/kimchi.storage_main.js +++ b/src/wok/plugins/kimchi/ui/js/src/kimchi.storage_main.js @@ -30,16 +30,16 @@ kimchi.doListStoragePools = function() { } }); if($('#storageGrid').hasClass('grid')) - $('#storageGrid').grid('destroy'); + $('#storageGrid').dataGrid('destroy'); $('#storagepoolsList').html(listHtml); if(wok.tabMode['storage'] === 'admin') { $('.storage-button').attr('style','display'); } else { $('.storage-allocate').addClass('storage-allocate-padding-user'); } - $('#storageGrid').grid({enableSorting: false}); + $('#storageGrid').dataGrid({enableSorting: false}); $('input', $('.grid-control', '.storage')).on('keyup', function(){ - $('#storageGrid').grid('filter', $(this).val()); + $('#storageGrid').dataGrid('filter', $(this).val()); }); kimchi.storageBindClick(); } else { diff --git a/src/wok/plugins/kimchi/ui/pages/storage.html.tmpl b/src/wok/plugins/kimchi/ui/pages/storage.html.tmpl index dfc006e..56dc2dd 100644 --- a/src/wok/plugins/kimchi/ui/pages/storage.html.tmpl +++ b/src/wok/plugins/kimchi/ui/pages/storage.html.tmpl @@ -28,35 +28,53 @@ <script src="plugins/kimchi/js/kimchi.min.js"></script> </head> <body> -<div class="toolbar"> - <div class="tools" style="display:none"> - <a id="storage-pool-add" class="btn-tool" href="javascript:void(0);"><span class="icon add">+</span></a> - </div> -</div> -<div class='storage'> -<div class="grid-control"><input type="text" class="filter" placeholder="$_("Filter")"></div> -<div id='storageGrid'> - <div> - <span class="storage-name"> - <span>$_("Name")</span> - <span class="usage">$_("%Used")</span> - </span> - <span class="storage-state" >$_("State")</span> - <span class="storage-type">$_("Type")</span> - <span class="storage-capacity">$_("Capacity")</span> - <span class="storage-allocate">$_("Allocated")</span> - <span class="storage-location">$_("Location")</span> +<div id="storage-root-container"> + <nav class="navbar navbar-default toolbar"> + <div class="container"> + <!-- Brand and toggle get grouped for better mobile display --> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#toolbar" aria-expanded="false"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + </div> + <!-- Collect the nav links, forms, and other content for toggling --> + <div class="collapse navbar-collapse" id="toolbar"> + <ul class="nav navbar-nav navbar-right tools" display="none"> + <li><a id="storage-pool-add" class="btn-tool" href="javascript:void(0);"><i class="fa fa-plus-circle"></i><span>Add a Storage</span></a></li> + </ul> + </div> + </div> + </nav> + <div class='storage'> + <div class="container"> + <div class="grid-control"><input type="text" class="filter" placeholder="$_("Filter")"></div> + <div id='storageGrid'> + <div> + <span class="storage-name"> + <span>$_("Name")</span> + <span class="usage">$_("%Used")</span> + </span> + <span class="storage-state" >$_("State")</span> + <span class="storage-type">$_("Type")</span> + <span class="storage-capacity">$_("Capacity")</span> + <span class="storage-allocate">$_("Allocated")</span> + <span class="storage-location">$_("Location")</span> + </div> + <div id="storagepoolsList" class="list-storage empty-when-logged-off"></div> + </div> + <div id="logicalPoolExtend" title="$_("Device path")"> + <p id="loading-info" class="text-help"> + <img src = "plugins/kimchi/images/theme-default/loading.gif" /> + $_("Looking for available partitions ...") + </p> + <div class="host-partition"> + </div> + </div> + </div> </div> - <div id="storagepoolsList" class="list-storage empty-when-logged-off"></div> -</div> -</div> -<div id="logicalPoolExtend" title="$_("Device path")"> - <p id="loading-info" class="text-help"> - <img src = "plugins/kimchi/images/theme-default/loading.gif" /> - $_("Looking for available partitions ...") - </p> - <div class="host-partition"> - </div> </div> <script id="storageTmpl" type="html/text"> <div id="{name}" class="storage-li in" data-name="{name}" data-stat="{state}"> -- 1.9.3

From: samhenri <samuel.guimaraes@eldorado.org.br> Signed-off-by: samhenri <samuel.guimaraes@eldorado.org.br> --- .../kimchi/ui/css/theme-default/network.css | 267 --------------------- src/wok/plugins/kimchi/ui/js/src/kimchi.network.js | 72 +++--- src/wok/plugins/kimchi/ui/pages/network.html.tmpl | 185 ++++++++------ 3 files changed, 139 insertions(+), 385 deletions(-) delete mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/network.css diff --git a/src/wok/plugins/kimchi/ui/css/theme-default/network.css b/src/wok/plugins/kimchi/ui/css/theme-default/network.css deleted file mode 100644 index fc8a24f..0000000 --- a/src/wok/plugins/kimchi/ui/css/theme-default/network.css +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Project Kimchi - * - * Copyright IBM, Corp. 2013-2015 - * - * 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. - */ - -.network { - margin: 5px; -} - -.network .grid-control { - height: 40px; - padding: 5px 0; -} - -.network .grid-control .filter { - width: 300px; - padding: 5px; - float: right; -} - -.network .list .column-name { - width: 20%; - max-width: 20%; - text-overflow: ellipsis; -} - -.network .list .column-state { - width: 10%; -} - -.network .list .column-type { - width: 15%; -} - -.network .list .column-interface { - width: 15%; -} - -.network .list .column-space { - width: 25%; -} - -.network .list .column-action { - display: inline-block; - float: right; - height: 40px; -} - -.network .list .hide-action-item { - display: none; -} - -.network .list .menu-container { - display: none; - top: 58px; -} - -.network .list .action-button { - float: right; - margin-top: 2px; - margin-left: 5px; -} - -.network .list .action-button-icon { - background: url("../images/theme-default/arrow-down-black.png") no-repeat - scroll center center transparent; -} - -.network .list .ui-state-disabled { - margin: 0px; -} - -.network .list .network-state { - display: inline-block; - height: 16px; - width: 16px; - border-radius: 8px; - margin-left: 10px; -} - -.network .list .nw-loading { - background: #c0c0c0 url(../images/theme-default/loading.gif) - center no-repeat; -} - -.network .list .up { - background: linear-gradient(to bottom, #BFD255 0%, #8EB92A 50%, - #72AA00 51%, #9ECB2D 100%) repeat scroll 0 0 transparent; -} - -.network .list .down { - background: linear-gradient(to bottom, #AFAFAF 0%, #AFAFAF 50%, - #AFAFAF 51%, #AFAFAF 100%) repeat scroll 0 0 transparent; -} - -.network-config { - font-family: Arial; - font-size: 12px; - margin-bottom: 40px; - display: none; -} - -.network-config .section-container { - margin-top: 20px; -} - -.network-config .section-container:first-child { - margin-top: 10px; -} - -.network-config .section-container:last-child { - height: 200px; -} - -.network-config .section-container .bridged-inline { - display: inline-block; - vertical-align: top; - max-width: 520px; -} - -.network-config .section-header { - font-size: 14px; - font-weight: lighter; -} - -.network-config .section-content { - margin-top: 10px; -} - -.network-config input[type="text"] { - border: 1px solid #CCCCCC; - font-size: 16px; - height: 30px; - width: 300px; - line-height: 30px; - padding: 0 5px; -} - -.network-config input.invalid-field[type="text"] { - border-color: #FF4444; -} - -.network-config input.invalid-field[type="text"][disabled] { - border-color: #666666; -} - -.network-config input[type="radio"] { - margin-right: 5px; - margin-top: 0px; -} - -.network-config select { - color: #666666; - border: solid 1px; - background-color: white; - padding: 3px 4px 3px 0; -} - -.network-config .input-container { - height: 20px; -} - -.network-config label { - vertical-align: top; -} - -.network-type-wrapper-controls input[type="text"] { - height: 38px; - line-height: 38px; - background: #fff; - -webkit-border-radius: 5px; - border-radius: 5px; - box-shadow: 2px 2px 2px #eee inset; - border-top: 1px solid #bbb; - border-left: 1px solid #bbb; - padding: 0 10px; - margin-top: 5px; - width: 50px; -} - -.network-type-wrapper-controls > .dropdown { - margin: 5px 0 0 1px; - width: 180px; -} - -.network-type-wrapper-controls input[type="text"][disabled] { - color: #bbb; - background-color: #fafafa; - cursor: not-allowed; -} - -.network-type-wrapper-controls span[type="text"] { - padding: 0 10px; -} - -.bridge-option-column { - display: inline-block; - vertical-align: middle; -} - -.bridge-option-column label { - margin-left: 42px; -} - -.network-type-wrapper-controls { - width: 80px; - display: inline-block; - vertical-align: top; - padding: 5px 5px 5px 22px; -} - -#enableVlan { - margin-left: 42px; - vertical-align: middle; -} - -#labelEnableVlan { - vertical-align: middle; -} - -#labelNetworkVlanID { - margin-left: 42px; - vertical-align: middle; - display: none; -} - -#networkVlanID { - width: 80px; - vertical-align: middle; - display: none; -} - -.network-config .input-hint-icon { - margin: -1px 1px 0 0; - display: inline-block; -} - -.network-config .input-hint { - margin-top: 3px; -} - -.network-config .input-hint-text { - color: #999999; - font-weight: lighter; - font-size: 12px; -} - -.ui-state-default a { - color: #212121; -} - -#networkConfig { - padding-left: 30px; -} diff --git a/src/wok/plugins/kimchi/ui/js/src/kimchi.network.js b/src/wok/plugins/kimchi/ui/js/src/kimchi.network.js index c43b59a..13d2cd1 100644 --- a/src/wok/plugins/kimchi/ui/js/src/kimchi.network.js +++ b/src/wok/plugins/kimchi/ui/js/src/kimchi.network.js @@ -21,7 +21,7 @@ kimchi.NETWORK_TYPE_BRIDGE = "bridged"; kimchi.initNetwork = function() { if(wok.tabMode['network'] === 'admin') { $('.tools').attr('style','display'); - $('#network-content .header span:last-child').attr('style','display'); + $('#networkGrid .wok-nw-grid-header span:last-child').attr('style','display'); kimchi.initNetworkCreation(); } kimchi.initNetworkListView(); @@ -47,9 +47,9 @@ kimchi.initNetworkListView = function() { network.persistent = data[i].persistent; kimchi.addNetworkItem(network); } - $('#networkGrid').grid({enableSorting: false}); - $('input', $('.grid-control', '#network-content')).on('keyup', function(){ - $('#networkGrid').grid('filter', $(this).val()); + $('#networkGrid').dataGrid({enableSorting: false}); + $('input', $('.grid-control', '#network-content-container')).on('keyup', function(){ + $('#networkGrid').dataGrid('filter', $(this).val()); }); }); }; @@ -59,8 +59,6 @@ kimchi.addNetworkItem = function(network) { $("#networkBody").append(itemNode); if(wok.tabMode["network"] === "admin") { $(".column-action").attr("style","display"); - } else { - $(".column-space").addClass('column-space-no-border-right'); } kimchi.addNetworkActions(network); return itemNode; @@ -77,67 +75,67 @@ kimchi.getNetworkItemHtml = function(network) { network.type = i18n["network_type_" + network.type]; } - var disable_in_use = network.in_use ? "ui-state-disabled" : ""; + var disable_in_use = network.in_use ? "disabled" : ""; var networkItem = wok.substitute($('#networkItem').html(), { name : network.name, state : network.state, type : network.type, interface: network.interface, addrSpace : network.addrSpace, - startClass : network.state === "up" ? "hide-action-item" : "", - stopClass : network.state === "down" ? "hide-action-item" : disable_in_use, + startClass : network.state === "up" ? "wok-hide-action-item" : "", + stopClass : network.state === "down" ? "wok-hide-action-item" : disable_in_use, stopDisabled : network.in_use ? "disabled" : "", - deleteClass : network.state === "up" || network.in_use ? "ui-state-disabled" : "", + deleteClass : network.state === "up" || network.in_use ? "disabled" : "", deleteDisabled: network.state === "up" || network.in_use ? "disabled" : "" }); return networkItem; }; kimchi.stopNetwork = function(network,menu) { - $(".network-state", $("#" + wok.escapeStr(network.name))).switchClass("up", "nw-loading"); - $("[nwAct='stop']", menu).addClass("ui-state-disabled"); + $(".network-state", $("#" + wok.escapeStr(network.name))).switchClass("up", "loading"); + $("[nwAct='stop']", menu).addClass("disabled"); kimchi.toggleNetwork(network.name, false, function() { - $("[nwAct='start']", menu).removeClass("hide-action-item"); - $("[nwAct='stop']", menu).addClass("hide-action-item"); - $("[nwAct='stop']", menu).removeClass("ui-state-disabled"); + $("[nwAct='start']", menu).removeClass("wok-hide-action-item"); + $("[nwAct='stop']", menu).addClass("wok-hide-action-item"); + $("[nwAct='stop']", menu).removeClass("disabled"); if (!network.in_use) { - $("[nwAct='delete']", menu).removeClass("ui-state-disabled"); + $("[nwAct='delete']", menu).removeClass("disabled"); $(":first-child", $("[nwAct='delete']", menu)).removeAttr("disabled"); } - $(".network-state", $("#" + wok.escapeStr(network.name))).switchClass("nw-loading", "down"); + $(".network-state", $("#" + wok.escapeStr(network.name))).switchClass("loading", "down"); }, function(err) { - $(".network-state", $("#" + wok.escapeStr(network.name))).switchClass("nw-loading", "up"); + $(".network-state", $("#" + wok.escapeStr(network.name))).switchClass("loading", "up"); if (!network.in_use) { - $("[nwAct='stop']", menu).removeClass("ui-state-disabled"); + $("[nwAct='stop']", menu).removeClass("disabled"); } wok.message.error(err.responseJSON.reason); }); } kimchi.addNetworkActions = function(network) { - $(".menu-container", "#" + wok.escapeStr(network.name)).menu(); + //$(".dropdown-menu", "#" + wok.escapeStr(network.name)).menu(); - $('#' + wok.escapeStr(network.name)).on('click', '.menu-container li', function(evt) { + $('#' + wok.escapeStr(network.name)).on('click', '.dropdown-menu li', function(evt) { var menu = $(evt.currentTarget).parent(); if ($(evt.currentTarget).attr("nwAct") === "start") { $(".network-state", $("#" + wok.escapeStr(network.name))).switchClass("down", "nw-loading"); - $("[nwAct='start']", menu).addClass("ui-state-disabled"); - $("[nwAct='delete']", menu).addClass("ui-state-disabled"); + $("[nwAct='start']", menu).addClass("disabled"); + $("[nwAct='delete']", menu).addClass("disabled"); $(":first-child", $("[nwAct='delete']", menu)).attr("disabled", true); kimchi.toggleNetwork(network.name, true, function() { - $("[nwAct='start']", menu).addClass("hide-action-item"); - $("[nwAct='start']", menu).removeClass("ui-state-disabled"); - $("[nwAct='stop']", menu).removeClass("hide-action-item"); + $("[nwAct='start']", menu).addClass("wok-hide-action-item"); + $("[nwAct='start']", menu).removeClass("disabled"); + $("[nwAct='stop']", menu).removeClass("wok-hide-action-item"); network.state = "up"; if (network.in_use) { - $("[nwAct='stop']", menu).addClass("ui-state-disabled"); + $("[nwAct='stop']", menu).addClass("disabled"); } $(".network-state", $("#" + wok.escapeStr(network.name))).switchClass("nw-loading", "up"); }, function(err) { $(".network-state", $("#" + wok.escapeStr(network.name))).switchClass("nw-loading","down"); - $("[nwAct='start']", menu).removeClass("ui-state-disabled"); + $("[nwAct='start']", menu).removeClass("disabled"); if (!network.in_use) { - $("[nwAct='delete']", menu).removeClass("ui-state-disabled"); + $("[nwAct='delete']", menu).removeClass("disabled"); } $(":first-child", $("[nwAct='delete']", menu)).removeAttr("disabled"); wok.message.error(err.responseJSON.reason); @@ -155,7 +153,7 @@ kimchi.addNetworkActions = function(network) { }; wok.confirm(settings, function() { kimchi.stopNetwork(network, menu); - $('#networkGrid').grid('deleteRow', $(evt.currentTarget).parents(".row")); + $('#networkGrid').dataGrid('deleteRow', $(evt.currentTarget).parents(".row")); }, null); } else { @@ -173,17 +171,13 @@ kimchi.addNetworkActions = function(network) { cancel : i18n['KCHAPI6003M'] }, function() { kimchi.deleteNetwork(network.name, function() { - $('#networkGrid').grid('deleteRow', $(evt.currentTarget).parents(".row")); + $('#networkGrid').dataGrid('deleteRow', $(evt.currentTarget).parents(".row")); }); }, null); } }); - $("#networkBody .column-action .popable").button({ - icons : { - secondary : "action-button-icon" - } - }); + //$("#networkBody .column-action .dropdown.menu-flat").button(); }; @@ -217,7 +211,7 @@ kimchi.initNetworkCreation = function() { network.interface = result.interface ? result.interface : i18n["KCHNET6001M"]; network.addrSpace = result.subnet ? result.subnet : i18n["KCHNET6001M"]; network.persistent = result.persistent; - $('#networkGrid').grid('addRow', kimchi.addNetworkItem(network)); + $('#networkGrid').dataGrid('addRow', kimchi.addNetworkItem(network)); $("#networkConfig").dialog("close"); }, function(data) { wok.message.error(data.responseJSON.reason); @@ -231,13 +225,13 @@ kimchi.initNetworkDialog = function() { buttonsObj= {}; buttonsObj['id'] = "networkFormOk"; buttonsObj['text'] = i18n.KCHAPI6005M; - buttonsObj['class'] = "btn-normal"; + buttonsObj['class'] = "btn btn-default"; buttonsObj['disabled'] = true; buttonsObj['click'] = function() { }; buttonsObjCancel= {}; buttonsObjCancel['id'] = "networkFormCancel"; buttonsObjCancel['text'] = i18n.KCHAPI6003M; - buttonsObjCancel['class'] = "btn-normal"; + buttonsObjCancel['class'] = "btn btn-default"; buttonsObjCancel['disabled'] = false; buttonsObjCancel['click'] = function() { $(this).dialog("close"); diff --git a/src/wok/plugins/kimchi/ui/pages/network.html.tmpl b/src/wok/plugins/kimchi/ui/pages/network.html.tmpl index 915feac..75721d7 100644 --- a/src/wok/plugins/kimchi/ui/pages/network.html.tmpl +++ b/src/wok/plugins/kimchi/ui/pages/network.html.tmpl @@ -29,102 +29,129 @@ <script src="plugins/kimchi/js/kimchi.min.js"></script> </head> <body> -<div class="toolbar"> - <div class="tools" style="display:none"> - <a id="networkAdd" class="btn-tool" href="javascript:void(0);"><span class="icon add">+</span></a> - </div> -</div> -<div id="network-content" class="network"> - <div class="grid-control"><input type="text" class="filter" placeholder="$_("Filter")"></div> - <div id="networkGrid" class="list"> - <div> - <span class="column-name">$_("Network Name")</span><!-- - --><span class="column-state">$_("State")</span><!-- - --><span class="column-type">$_("Network Type")</span><!-- - --><span class="column-interface">$_("Interface")</span><!-- - --><span class="column-space">$_("Address Space")</span><!-- - --><span style="display:none">$_("Actions")</span> - </div> - <div id="networkBody" class="empty-when-logged-off"></div> - </div> - <div id="networkConfig" class="network-config"> - <div class="section-container"> - <div class="section-header">1. $_("Network Name")</div> - <div class="section-content"> - <input type="text" id="networkName" /> - <div class="input-hint"> - <span class="icon-info-circled light-grey c1 help-inline"></span> - <span class="input-hint-text help-inline">$_("Name should not contain '/' and '\"'.")</span> - </div> +<div id="network-root-container"> + <nav class="navbar navbar-default toolbar"> + <div class="container"> + <!-- Brand and toggle get grouped for better mobile display --> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#toolbar" aria-expanded="false"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + </div> + <!-- Collect the nav links, forms, and other content for toggling --> + <div class="collapse navbar-collapse" id="toolbar"> + <ul class="nav navbar-nav navbar-right tools" display="none"> + <li><a id="networkAdd" class="btn-tool" href="javascript:void(0);"><i class="fa fa-plus-circle"></i><span>Add a Network</span></a></li> + </ul> </div> </div> - <div class="section-container"> - <div class="section-header">2. $_("Network Type")</div> - <div class="section-content"> - <div class="input-container"> - <input type="radio" id="networkTypeIso" name="networkType" value="isolated" /> - <label for="networkTypeIso">$_("Isolated: no external network connection")</label> + </nav> + <div id="network-content-container"> + <div class="container"> + <div class="row grid-control"> + <div class="pull-right"> + <label for="network-filter" class="sr-only">$_("Filter"):</label> + <input type="text" class="filter form-control" placeholder="$_("Filter")"> </div> - <div class="input-container"> - <input type="radio" id="networkTypeNat" name="networkType" value="nat" /> - <label for="networkTypeNat">$_("NAT: outbound physical network connection only")</label> + </div> + <div id="networkGrid"> + <div> + <span class="column-state"><span class="sr-only">$_("State")</span></span><!-- + --><span class="column-name">$_("Network Name")</span><!-- + --><span class="column-type">$_("Network Type")</span><!-- + --><span class="column-interface">$_("Interface")</span><!-- + --><span class="column-space">$_("Address Space")</span><!-- + --><span class="column-action" style="display:none"> + <span class="sr-only">$_("Actions")</span><!-- + --></span> </div> - <div class="input-container"> - <div class="bridged-inline"> - <input type="radio" id="networkTypeBri" name="networkType" value="bridged" /> - </div> - <div class="bridged-inline"> - <label for="networkTypeBri">$_("Bridged: Virtual machines are connected to physical network directly")</label><br /> - <label id="networkBriDisabledLabel" style="display:none">$_("(No interfaces found)")</label> + <div id="networkBody" class="empty-when-logged-off"></div> + </div> + <div id="networkConfig" class="network-config"> + <div class="section-container"> + <div class="section-header">1. $_("Network Name")</div> + <div class="section-content"> + <input type="text" id="networkName" /> + <div class="input-hint"> + <span class="icon-info-circled light-grey c1 help-inline"></span> + <span class="input-hint-text help-inline">$_("Name should not contain '/' and '\"'.")</span> + </div> </div> </div> - <div id="bridgeOptions"> - <div> - <div class="bridge-option-column"> - <label for="networkInterface">$_("Destination"): </label> + <div class="section-container"> + <div class="section-header">2. $_("Network Type")</div> + <div class="section-content"> + <div class="input-container"> + <input type="radio" id="networkTypeIso" name="networkType" value="isolated" /> + <label for="networkTypeIso">$_("Isolated: no external network connection")</label> + </div> + <div class="input-container"> + <input type="radio" id="networkTypeNat" name="networkType" value="nat" /> + <label for="networkTypeNat">$_("NAT: outbound physical network connection only")</label> + </div> + <div class="input-container"> + <div class="bridged-inline"> + <input type="radio" id="networkTypeBri" name="networkType" value="bridged" /> + </div> + <div class="bridged-inline"> + <label for="networkTypeBri">$_("Bridged: Virtual machines are connected to physical network directly")</label><br /> + <label id="networkBriDisabledLabel" style="display:none">$_("(No interfaces found)")</label> + </div> </div> - <div class="bridge-option-column"> - <div class="network-type-wrapper-controls"> - <div id ="networkDestinationID"> - <input id="networkDestinationInputId" name="type" type="hidden"/> - <span id="networkDestinationLabel" type="text"></span><span class="arrow"></span> - <div> - <ul id="networkInterface"></ul> + <div id="bridgeOptions"> + <div> + <div class="bridge-option-column"> + <label for="networkInterface">$_("Destination"): </label> + </div> + <div class="bridge-option-column"> + <div class="network-type-wrapper-controls"> + <div id ="networkDestinationID"> + <input id="networkDestinationInputId" name="type" type="hidden"/> + <span id="networkDestinationLabel" type="text"></span><span class="arrow"></span> + <div> + <ul id="networkInterface"></ul> + </div> + </div> </div> </div> </div> + <div> + <input id="enableVlan" type="checkbox" value="" /> + <label for="enableVlan" id="labelEnableVlan">$_("Enable VLAN") </label> + </div> + <label for="networkVlanID" id="labelNetworkVlanID">$_("VLAN ID"): </label> + <input type="text" id="networkVlanID" class="network-label"/> + </div> </div> </div> - <div> - <input id="enableVlan" type="checkbox" value="" /> - <label for="enableVlan" id="labelEnableVlan">$_("Enable VLAN") </label> - </div> - <label for="networkVlanID" id="labelNetworkVlanID">$_("VLAN ID"): </label> - <input type="text" id="networkVlanID" class="network-label"/> - </div> </div> </div> </div> - </div> </div> <script id="networkItem" type="text/html"> - <div id='{name}' class='remove-when-logged-off'> - <span class='column-name' title="{name}" val="{name}">{name}</span><!-- - --><span class='column-state' val="{state}"><span class='network-state {state}'></span></span><!-- - --><span class='column-type' val="{type}">{type}</span><!-- - --><span class='column-interface' val="{interface}">{interface}</span><!-- - --><span class='column-space' val="{addrSpace}">{addrSpace}</span><!-- - --><span class='column-action' style="display:none"> - <span class="ui-button-secondary dropdown popable action-button"> - $_("Actions") - <ul class='popover actionsheet right-side menu-container'> - <li nwAct="start" class='{startClass}'><a class='button-big'>$_("Start")</a></li> - <li nwAct="stop" class='{stopClass}'><a {stopDisabled} class='button-big'>$_("Stop")</a></li> - <li nwAct="delete" class='{deleteClass}'><a {deleteDisabled} class='red'>$_("Delete")</a></li> - </ul> - </span> - </span> - </div> + <div id='{name}' class='wok-nw-grid-body remove-when-logged-off '> + <span class='column-state' val="{state}"><span class='network-state {state}'><i class="fa fa-power-off"></i><span class="wok-nw-loading-icon"></span></span></span><!-- + --><span class='column-name' title="{name}" val="{name}">{name}</span><!-- + --><span class='column-type' val="{type}">{type}</span><!-- + --><span class='column-interface' val="{interface}">{interface}</span><!-- + --><span class='column-space' val="{addrSpace}">{addrSpace}</span><!-- + --><span class='column-action' style="display:none"> + <span class="pull-right"> + <div class="dropdown menu-flat"> + <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false"><span class="edit-alt"></span>$_("Actions")<span class="caret"></span> + </button> + <ul class="dropdown-menu" role="menu"> + <li role="presentation" nwAct="start" class='{startClass}'><a><i class="fa fa-undo"></i>$_("Start")</a></li> + <li role="presentation" nwAct="stop" class='{stopClass}'><a {stopDisabled}><i class="fa fa-ban"></i>$_("Stop")</a></li> + <li role="presentation" nwAct="delete" class='critical {deleteClass}'><a {deleteDisabled}><i class="fa fa-minus-circle"></i>$_("Delete")</a></li> + </ul> + </div> + </span> + </span> + </div> </script> <script> kimchi.initNetwork(); -- 1.9.3

From: samhenri <samuel.guimaraes@eldorado.org.br> Signed-off-by: samhenri <samuel.guimaraes@eldorado.org.br> --- .../kimchi/ui/js/src/kimchi.guest_add_main.js | 10 +- .../plugins/kimchi/ui/pages/guest-add.html.tmpl | 114 ++++++++++----------- src/wok/plugins/kimchi/ui/pages/guests.html.tmpl | 58 +++++++---- 3 files changed, 102 insertions(+), 80 deletions(-) diff --git a/src/wok/plugins/kimchi/ui/js/src/kimchi.guest_add_main.js b/src/wok/plugins/kimchi/ui/js/src/kimchi.guest_add_main.js index 6be6f9a..ef8324a 100644 --- a/src/wok/plugins/kimchi/ui/js/src/kimchi.guest_add_main.js +++ b/src/wok/plugins/kimchi/ui/js/src/kimchi.guest_add_main.js @@ -22,6 +22,10 @@ kimchi.guest_add_main = function() { if (result && result.length) { $('#prompt-create-template').addClass('hidden'); $('#prompt-choose-template').removeClass('hidden'); + $('#guest-add-window .guest-pager').animate({ + height: "530px" + }); + var html = ''; var tmpl = $('#tmpl-template').html(); $.each(result, function(index, value) { @@ -34,13 +38,17 @@ kimchi.guest_add_main = function() { $('#btn-create-template').on('click', function(event) { wok.topic('templateCreated').subscribe(showTemplates); - wok.window.open('plugins/kimchi/template-add.html'); + wok.window.open('plugins/kimchi/template-add.html','extendCreateTemplate'); event.preventDefault(); }); $('#prompt-choose-template').addClass('hidden'); $('#prompt-create-template').removeClass('hidden'); + $('#guest-add-window .guest-pager').animate({ + height: "90px" + }); + }, function(err) { wok.message.error(err.responseJSON.reason); }); diff --git a/src/wok/plugins/kimchi/ui/pages/guest-add.html.tmpl b/src/wok/plugins/kimchi/ui/pages/guest-add.html.tmpl index 3770d96..614606c 100644 --- a/src/wok/plugins/kimchi/ui/pages/guest-add.html.tmpl +++ b/src/wok/plugins/kimchi/ui/pages/guest-add.html.tmpl @@ -24,72 +24,64 @@ <!DOCTYPE html> <html> <body> -<div class="window" style="width: 900px;height: 580px;"> - <header> - <h1 class="title h1 grey">$_("Create a New Virtual Machine")</h1> - </header> - <div class="content"> - <form id="form-vm-add"> - <section class="form-section"> - <h2>1. $_("Virtual Machine Name")</h2> - <div class="field"> - <input type="text" class="text" style="width: 300px" name="name"><br> - <div class="icon-info-circled light-grey c1 help-inline"></div> - <p class="text-help help-inline"> - $_("The name used to identify the virtual machine. If omitted, a name will be chosen based on the template used.") - </p> +<div id="guest-add-window" class="window modal-content"> + <div class="modal-header"> + <h4 class="modal-title" id="guestsModalLabel">$_("Create a New Virtual Machine")</h4> </div> - </section> - <section class="form-section"> - <h2>2. $_("Template")</h2> - <div class="field"> - <div class="text-help"> - <div id="prompt-create-template" class="hidden"> - <div class="icon-info-circled light-grey c1 help-inline"></div> - <div class="text-help help-inline">$_("Please create a template first.")</div> - <a id="btn-create-template" class="btn-normal" href="templates.html"> - <span class="text">$_("Create a Template")</span> - </a> + <div class="modal-body"> + <form id="form-vm-add"> + <div class="guest-modal-container"> + <div class="form-group"> + <label for="guest-vm-name">$_("Virtual Machine Name")</label> + <input type="text" class="form-control" name="name" id="guest-vm-name" /> + <p class="help-block"><i class="fa fa-info-circle"></i> $_("The name used to identify the virtual machine. If omitted, a name will be chosen based on the template used.") + </p> + </div> </div> - <div id="prompt-choose-template" class="hidden"> - <span class="icon-info-circled light-grey c1"></span> - <span class="text-help">$_("Please choose a template.")</span> - </div> - </div> - <ul id="templateTile" class="tile-check tile-template"> - </ul> - <script type="html/text" id="tmpl-template" class="tmpl-html"> - <li> - <label> - <input type="radio" name="template" value="/plugins/kimchi/templates/{name}"> - <div class="info"> - <div class="summary os-icon"> - <img src="{icon}"> - <span class="title">{name}</span> - </div> - <ul class="list-info"> - <li><label>$_("OS")</label><span>{os_distro}</span></li> - <li><label>$_("OS Version")</label><span>{os_version}</span></li> - <li><label>$_("CPUS")</label><span>{cpus}</span></li> - <li><label>$_("Memory")</label><span>{memory}M</span></li> - </ul> + <div class="guest-pager"> + <div class="page-list"> + <div class="page"> + <div class="row"> + <div id="prompt-create-template" class="hidden"> + <p>$_("Please create a template first.")</p> + <a id="btn-create-template" class="btn btn-primary" href="templates.html">$_("Create a Template")</a> + </div> + <p id="prompt-choose-template" class="hidden">$_("Please choose a template.")</p> + </div> + <ul id="templateTile" class="list-template tile-check tile-template"> + </ul> + <script type="html/text" id="tmpl-template" class="tmpl-html"> + <li class="col-md-3"> + <label class="box-iso-outer"> + <input type="radio" name="template" value="/plugins/kimchi/templates/{name}" class="iso-radio-hidden"> + <span class="box-iso-border"> + <span class="box-iso-inner"> + <h3 class="iso-title {os_distro}" title="{name}">{name}</h3> + <dl class="iso-info"> + <dt>{os_distro}</dt> + <dd>$_("OS: ")</dd> + <dt>{os_version}</dt> + <dd>$_("Version: ")</dd> + <dt>{cpus}</dt> + <dd>$_("CPUS")</dd> + <dt>{memory}M</dt> + <dd>$_("Memory")</dd> + </dl> + </span> + </span> + </label> + </li> + </script> </div> - </label> - </li> - </script> + </div> + </div> + </form> </div> - </section> - </form> + <div class="modal-footer"> + <button id="vm-doAdd" class="btn btn-default" disabled="disabled" href="javascript:void(0);">$_("Create")</button> + <button id="vm-doAdding" class="btn btn-default" disabled="disabled" style="display:none" href="javascript:void(0);"><span class="wok-loading-icon"></span> $_("Creating...")</button> + <button id="vm-add=cancel" class="btn btn-default" data-dismiss="modal" type="button">$_("Cancel")</button> </div> - <footer> - <div class="btn-group"> - <button id="vm-doAdd" class="btn-normal" disabled="disabled" href="javascript:void(0);"><span class="text">$_("Create")</span></button> - <button id="vm-doAdding" class="btn-normal" disabled="disabled" style="display:none" href="javascript:void(0);"><span class="text">$_("Creating...")</span></button> - <button id="vm-add=cancel" class="btn-normal close" type="button"> - <span class="text">$_("Cancel")</span> - </button> - </div> - </footer> </div> <script> kimchi.guest_add_main(); diff --git a/src/wok/plugins/kimchi/ui/pages/guests.html.tmpl b/src/wok/plugins/kimchi/ui/pages/guests.html.tmpl index b8a1259..5dfb70a 100644 --- a/src/wok/plugins/kimchi/ui/pages/guests.html.tmpl +++ b/src/wok/plugins/kimchi/ui/pages/guests.html.tmpl @@ -34,26 +34,48 @@ </head> <body> <div id="guests-root-container"> - <div class="toolbar"> - <div class="tools" style="display:none"> - <a id="vm-add" class="btn-tool" href="javascript:void(0);"><span class="icon add">+</span></a> + <nav class="navbar navbar-default toolbar"> + <div class="container"> + <!-- Brand and toggle get grouped for better mobile display --> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#toolbar" aria-expanded="false"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + </div> + <!-- Collect the nav links, forms, and other content for toggling --> + <div class="collapse navbar-collapse" id="toolbar"> + <ul class="nav navbar-nav navbar-right tools" display="none"> + <li><a id="vm-add" class="btn-tool" href="javascript:void(0);"><i class="fa fa-plus-circle"></i><span>Add a Guest</span></a></li> + </ul> + </div> + </div> + </nav> + <div id="guest-content-container"> + <div class="container"> + <div id="guestListField" style="display: none"> + <ul class="list-title"> + <li class="guest-type">$_("Name")</li> + <li class="guest-cpu">$_("CPU")</li> + <li class="guest-storage">$_("Disk I/O")</li> + <li class="guest-network">$_("Network I/O")</li> + <li class="guest-tile">$_("Livetile")</li> + <li class="guest-actions">$_("Actions")</li> + </ul> + <ul id="guestList" class="list-vm empty-when-logged-off"> + </ul> + </div> + <div id="noGuests" class="list-no-result" style="display: none;"> + $_("No guests found.") + </div> </div> </div> - <div id="guestListField" style="display: none"> - <ul class="list-title"> - <li class="guest-type">$_("Name")</li> - <li class="guest-cpu">$_("CPU")</li> - <li class="guest-storage">$_("Disk I/O")</li> - <li class="guest-network">$_("Network I/O")</li> - <li class="guest-tile">$_("Livetile")</li> - <li class="guest-actions">$_("Actions")</li> - </ul> - <ul id="guestList" class="list-vm empty-when-logged-off"> - </ul> - </div> - <div id="noGuests" class="list-no-result" style="display: none;"> - $_("No guests found.") - </div> +<div id="modalWindow" class="modal fade host-modal guests-modal" tabindex="-1" role="dialog" aria-labelledby="guestsModalLabel" aria-hidden="true"> +</div> +<div id="extendCreateTemplate" class="modal fade host-modal templates-modal" tabindex="-1" role="dialog" aria-labelledby="guestsModalLabel" aria-hidden="true"> +</div> <script id="guest-tmpl" type="kimchi/template"> $ht(file=$data.ui_dir + "/pages/guest.html.tmpl", searchList=[self, {'lang':$lang}]) </script> -- 1.9.3
participants (1)
-
sguimaraes943@gmail.com