summaryrefslogtreecommitdiffstats
path: root/epsdk-app-onap/src/main/webapp/static
diff options
context:
space:
mode:
authorjimmydot <jf2512@att.com>2017-05-07 14:58:24 -0400
committerjimmydot <jf2512@att.com>2017-05-07 14:58:24 -0400
commit3982f4f67314ec37fd9b22ae54049958af777c1b (patch)
tree72111b7c13ee7529cce1ea4c8d83c89fdd164450 /epsdk-app-onap/src/main/webapp/static
parent00e0d25933699f9e39c3f0b86c983165a1e3e330 (diff)
[VID-6] Initial rebase push
Change-Id: I9077be9663754d9b22f77c6a7b3109b361b39346 Signed-off-by: jimmydot <jf2512@att.com>
Diffstat (limited to 'epsdk-app-onap/src/main/webapp/static')
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/css/att_angular_gridster/sandbox-gridster.css173
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/css/att_angular_gridster/ui-gridster.css116
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/css/fusion-sunny.css362
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/ATT_Labs_Logo.pngbin0 -> 45492 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/Logo_att_labs.pngbin0 -> 2011 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/Rlogo.jpgbin0 -> 3173 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/action_icon.pngbin0 -> 2388 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/action_list_spacer.gifbin0 -> 73 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/active.pngbin0 -> 682 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/add.pngbin0 -> 352 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/add_tool_button.pngbin0 -> 31105 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/addicon.pngbin0 -> 463 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/application_window_bg.jpgbin0 -> 914 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/arrow-next.pngbin0 -> 1561 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/arrow-prev.pngbin0 -> 1557 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/att_angular_gridster/grips.pngbin0 -> 951 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/att_logo.pngbin0 -> 2827 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/backButton.pngbin0 -> 816 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/blank.gifbin0 -> 49 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/blueButton.pngbin0 -> 1468 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/body_graphic.jpgbin0 -> 20667 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/bubble.pngbin0 -> 662 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/cache.pngbin0 -> 1081 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/calendar.gifbin0 -> 929 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/chevron.pngbin0 -> 252 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/close_container.gifbin0 -> 85 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/collapsed-icon.pngbin0 -> 1379 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/column-bg.pngbin0 -> 165 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/copyicon-highlighted.pngbin0 -> 264 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/copyicon.pngbin0 -> 235 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/csv_icon.jpgbin0 -> 632 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/csv_icon.pngbin0 -> 938 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/customers-add.pngbin0 -> 755 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/customers-search.pngbin0 -> 976 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/customers.pngbin0 -> 749 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/decrypted.pngbin0 -> 628 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/deleteicon-highlighted.gifbin0 -> 592 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/deleteicon-highlighted.pngbin0 -> 566 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/deleteicon.gifbin0 -> 579 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/ecomp-login-550x360.jpgbin0 -> 62502 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/ecomp-login.jpgbin0 -> 21266 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/ecomp.pngbin0 -> 107597 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/ecomp_trans.pngbin0 -> 109926 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/editicon.gifbin0 -> 360 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/error_type.gifbin0 -> 398 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/example-frame.pngbin0 -> 33699 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/excelicon_multi.gifbin0 -> 1028 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/executeicon.pngbin0 -> 1076 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/expanded-icon.pngbin0 -> 1372 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/file-add.pngbin0 -> 675 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/file_import.pngbin0 -> 653 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/file_save-all.pngbin0 -> 610 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/filter_icon.pngbin0 -> 29069 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/folder_add.pngbin0 -> 772 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/folder_closed.pngbin0 -> 559 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/folder_delete.pngbin0 -> 767 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/folder_edit.pngbin0 -> 829 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/folder_open.pngbin0 -> 632 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/folder_user.pngbin0 -> 887 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/funnel.pngbin0 -> 543 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/fusion.gifbin0 -> 8821 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/grayButton.pngbin0 -> 1361 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/gray_add_tool_button.pngbin0 -> 30883 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/headerChatIcon.pngbin0 -> 465 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/icon_remove_all.gifbin0 -> 982 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/inactive.pngbin0 -> 842 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/info_type.gifbin0 -> 291 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/leftButton.pngbin0 -> 681 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/loading.gifbin0 -> 6820 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/loading_bar.gifbin0 -> 28954 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/login_button.gifbin0 -> 1222 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/logo_att.jpgbin0 -> 3145 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/logo_att_header.jpgbin0 -> 3145 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/logo_att_header.pngbin0 -> 43961 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/logo_header.pngbin0 -> 37087 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/m1.gifbin0 -> 636 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/mail.pngbin0 -> 449 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/map.pngbin0 -> 611 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/menu/bubble.pngbin0 -> 662 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/menu/file_import.pngbin0 -> 653 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/menu/file_save-all.pngbin0 -> 610 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/menu/mail.pngbin0 -> 449 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/menu/profile.pngbin0 -> 462 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/menu/speechbubble.pngbin0 -> 458 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/menu/users.pngbin0 -> 938 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/minus.gifbin0 -> 75 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_black.pngbin0 -> 34762 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_grey.pngbin0 -> 34636 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_horizontal.pngbin0 -> 5202 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_white.pngbin0 -> 34475 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/modify_icon.gifbin0 -> 246 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/no_favorites_star.pngbin0 -> 2794 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/note-add.pngbin0 -> 589 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/note-search.pngbin0 -> 876 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/note.pngbin0 -> 583 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/notes.pngbin0 -> 673 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/offline.pngbin0 -> 3483 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/offlineMsg.gifbin0 -> 1004 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/online.pngbin0 -> 888 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/page.gifbin0 -> 131 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/pagination.pngbin0 -> 724 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/panel-e-w-toggle.pngbin0 -> 459 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/panel-n-s-toggle.pngbin0 -> 335 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/pix.gifbin0 -> 49 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/plus.gifbin0 -> 78 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/printer.gifbin0 -> 1036 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/profile.pngbin0 -> 462 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/report-add.pngbin0 -> 724 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/report-favorite.pngbin0 -> 693 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/report-my.pngbin0 -> 739 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/report-public.pngbin0 -> 776 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/report.pngbin0 -> 563 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/reports.pngbin0 -> 769 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/results-first-active.pngbin0 -> 545 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/results-first-disabled.pngbin0 -> 421 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/results-last-active.pngbin0 -> 541 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/results-last-disabled.pngbin0 -> 421 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/results-next-active.pngbin0 -> 416 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/results-next-disabled.pngbin0 -> 326 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/results-prev-active.pngbin0 -> 421 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/results-prev-disabled.pngbin0 -> 322 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/resultset_last.pngbin0 -> 506 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/resultset_previous.pngbin0 -> 381 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/return_to_top.gifbin0 -> 846 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/rightButton.pngbin0 -> 731 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/search.pngbin0 -> 3501 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/search_profile.pngbin0 -> 880 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/sort_asc.gifbin0 -> 57 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/sort_desc.gifbin0 -> 58 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/spacer.gifbin0 -> 43 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/success_type.gifbin0 -> 260 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/swoosh.gifbin0 -> 14250 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/tab-hm.pngbin0 -> 249 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/tab-v-hm.pngbin0 -> 317 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/tab.pngbin0 -> 343 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/table-add.pngbin0 -> 3314 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/table-delete.pngbin0 -> 3342 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/table-edit.pngbin0 -> 3348 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/table.pngbin0 -> 496 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/tabs-bg.pngbin0 -> 147 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/toolButton.gifbin0 -> 414 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/toolButton.pngbin0 -> 531 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/toolbar.pngbin0 -> 171 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/users.pngbin0 -> 938 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/warning_type.gifbin0 -> 1055 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/webphone.icobin0 -> 241 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/images/whiteButton.pngbin0 -> 1430 bytes
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/js/att_angular_gridster/angular-gridster.js2244
-rwxr-xr-xepsdk-app-onap/src/main/webapp/static/fusion/js/att_angular_gridster/ui-gridster-tpls.js168
149 files changed, 3063 insertions, 0 deletions
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/css/att_angular_gridster/sandbox-gridster.css b/epsdk-app-onap/src/main/webapp/static/fusion/css/att_angular_gridster/sandbox-gridster.css
new file mode 100755
index 000000000..568a9a3a3
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/css/att_angular_gridster/sandbox-gridster.css
@@ -0,0 +1,173 @@
+.gridster {
+ position: relative;
+ margin: auto;
+ /* height: 0
+ */}
+
+.gridster>ul {
+ margin: 0;
+ list-style: none;
+ padding: 0
+}
+
+.gridster-item {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ list-style: none;
+ z-index: 2;
+ position: absolute;
+ display: none
+}
+
+.gridster-loaded {
+ -webkit-transition: height .3s;
+ -moz-transition: height .3s;
+ -o-transition: height .3s;
+ transition: height .3s
+}
+
+.gridster-loaded .gridster-item {
+ display: block;
+ position: absolute;
+ -webkit-transition: opacity .3s, left .3s, top .3s, width .3s, height .3s;
+ -moz-transition: opacity .3s, left .3s, top .3s, width .3s, height .3s;
+ -o-transition: opacity .3s, left .3s, top .3s, width .3s, height .3s;
+ transition: opacity .3s, left .3s, top .3s, width .3s, height .3s;
+ -webkit-transition-delay: 50ms;
+ -moz-transition-delay: 50ms;
+ -o-transition-delay: 50ms;
+ transition-delay: 50ms
+}
+
+.gridster-loaded .gridster-preview-holder {
+ display: none;
+ z-index: 1;
+ position: absolute;
+ background-color: #067ab4;
+ /*
+ background-color: rgb(6, 122, 180);
+ -ms-filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#067ab4', endColorstr='#067ab4'); IE
+ opacity: 0.2;
+ */
+ border-color: #fff;
+ -webkit-transition: width .2s, height .3s;
+ -moz-transition: width .2s, height .3s;
+ -o-transition: width .2s, height .3s;
+ transition: width .2s, height .3s;
+ -webkit-transition-delay: 50ms;
+ -moz-transition-delay: 50ms;
+ -o-transition-delay: 50ms;
+ transition-delay: 50ms
+}
+
+.gridster-loaded .gridster-item.gridster-item-moving {
+ -webkit-transition: none;
+ -moz-transition: none;
+ -o-transition: none;
+ transition: none;
+ opacity: 0.9;
+}
+
+.gridster-mobile {
+ height: auto !important
+}
+
+.gridster-mobile .gridster-item {
+ height: auto;
+ position: static;
+ float: none
+}
+
+.gridster-item.ng-leave.ng-leave-active {
+ opacity: 0
+}
+
+.gridster-item.ng-enter {
+ opacity: 1
+}
+
+.gridster-item-moving {
+ z-index: 3
+}
+
+.gridster-item-resizable-handler {
+ position: absolute;
+ font-size: 1px;
+ display: block
+}
+
+.handle-se {
+ cursor: se-resize;
+ width: 0;
+ height: 0;
+ right: 1px;
+ bottom: 1px;
+ border-style: solid;
+ border-width: 0 0 12px 12px;
+ border-color: transparent
+}
+
+.handle-ne {
+ cursor: ne-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ top: 1px
+}
+
+.handle-nw {
+ cursor: nw-resize;
+ width: 12px;
+ height: 12px;
+ left: 1px;
+ top: 1px
+}
+
+.handle-sw {
+ cursor: sw-resize;
+ width: 12px;
+ height: 12px;
+ left: 1px;
+ bottom: 1px
+}
+
+.handle-e {
+ cursor: e-resize;
+ width: 12px;
+ bottom: 0;
+ right: 1px;
+ top: 0
+}
+
+.handle-s {
+ cursor: s-resize;
+ height: 12px;
+ right: 0;
+ bottom: 1px;
+ left: 0
+}
+
+.handle-n {
+ cursor: n-resize;
+ height: 12px;
+ right: 0;
+ top: 1px;
+ left: 0
+}
+
+.handle-w {
+ cursor: w-resize;
+ width: 12px;
+ left: 1px;
+ top: 0;
+ bottom: 0
+}
+
+.gridster .gridster-item:hover .gridster-box {
+ border: 1.5px solid #B3B2B3
+}
+
+.gridster .gridster-item:hover .handle-se {
+ border-color: transparent transparent #ccc
+}
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/css/att_angular_gridster/ui-gridster.css b/epsdk-app-onap/src/main/webapp/static/fusion/css/att_angular_gridster/ui-gridster.css
new file mode 100755
index 000000000..85b7a58c1
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/css/att_angular_gridster/ui-gridster.css
@@ -0,0 +1,116 @@
+/* ui-gridster.css */
+.gridster-container {
+ background-color: #EFEFEF;
+ color: #fff;
+ border: 1px dashed;
+ overflow-y: auto;
+ overflow-x: hidden; }
+
+/* app css for attGridtser */
+.gridster-item-container {
+ background-color: #FFFFFF;
+ position: relative;
+ margin-left: auto;
+ margin-right: auto;
+ min-height: 79px;
+ height: 100%; }
+ .gridster-item-container .gridster-item-header {
+ /* gridster-item Header */
+ position: relative;
+ height: 50px !important;
+ border: 1px solid #d3d3d3;
+ border-bottom: 0;
+ background-color: #E5E5E5;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ z-index: 1;
+ -webkit-border-radius: 2px 2px 0 0;
+ -moz-border-radius: 2px 2px 0 0;
+ -ms-border-radius: 2px 2px 0 0;
+ -o-border-radius: 2px 2px 0 0;
+ border-radius: 2px 2px 0 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ overflow: hidden;
+ /* IE6-8 */ }
+ .gridster-item-container .gridster-item-header .gridster-item-handle {
+ cursor: move;
+ margin: 12px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border: 0;
+ vertical-align: middle;
+ -ms-interpolation-mode: bicubic;
+ display: block; }
+ .gridster-item-container .gridster-item-header .gridster-item-header-content {
+ line-height: 44px;
+ margin-left: 26px;
+ font-family: clearviewatt;
+ font-size: 18px;
+ color: #444444;
+ float: left; }
+ .gridster-item-container .gridster-item-header .gridster-item-sub-header-content {
+ position: absolute;
+ top: 29.5px;
+ left: 26px;
+ font-family: clearviewatt;
+ font-size: 12px;
+ color: #444444; }
+ .gridster-item-container .gridster-item-header .gridster-item-header-buttons-container {
+ position: absolute;
+ right: 10px;
+ top: 10px;
+ overflow: hidden;
+ text-align: right;
+ height: 30px;
+ color: #444444; }
+ .gridster-item-container .gridster-item-body {
+ /* gridster-item Body */
+ position: absolute;
+ width: 100%;
+ top: 50px;
+ left: 0;
+ right: 0;
+ bottom: 29px;
+ border: 1px solid #d3d3d3;
+ box-sizing: border-box;
+ overflow: auto;
+ color: #444444;
+ /* text-align: center; */ }
+ .gridster-item-container .gridster-item-footer {
+ /* gridster-item Footer */
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ height: 29px !important;
+ text-align: left;
+ cursor: pointer;
+ border: 1px solid #d3d3d3;
+ border-top: 0;
+ background-color: #F2F2F2;
+ -webkit-border-radius: 0 0 2px 2px;
+ -moz-border-radius: 0 0 2px 2px;
+ -ms-border-radius: 0 0 2px 2px;
+ -o-border-radius: 0 0 2px 2px;
+ border-radius: 0 0 2px 2px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ text-decoration: none;
+ /* IE6-8 */ }
+ .gridster-item-container .gridster-item-footer:hover {
+ background-color: #E5E5E5;
+ color: #565656;
+ text-decoration: underline; }
+ .gridster-item-container .gridster-item-footer .gridster-item-footer-content {
+ line-height: 30px;
+ font-family: clearviewatt;
+ font-size: 12px;
+ color: #565656;
+ margin: 20px;
+ text-decoration: none; }
+ .gridster-item-container .gridster-item-footer .gridster-item-footer-content:hover {
+ color: #199ddf;
+ text-decoration: underline; }
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/css/fusion-sunny.css b/epsdk-app-onap/src/main/webapp/static/fusion/css/fusion-sunny.css
new file mode 100755
index 000000000..1f16967ac
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/css/fusion-sunny.css
@@ -0,0 +1,362 @@
+ input, textarea, select, div {
+ font-family: Arial;
+ font-size: 11px;
+ font-weight: normal;
+ }
+
+ form {
+ margin-top: 5px;
+ }
+
+
+ .applicationWindow { border-width: 0px 0px 1px 0px;
+ border-style: solid;
+ border-color: #959595;
+ box-shadow: inset 0 0 10px #000000;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ margin-left: 10px;
+ margin-right: 10px;
+ }
+
+ .feedbackMessage { width: 99%;
+ font-family: Arial;
+ font-size: 11px;
+ color: #1f1f1f;
+ padding: 3px;
+ border: 1px #eeb420 solid;
+ margin: 3px;
+ background: #fff9e5;
+ }
+
+ .menubar {
+ border-width: 0px 0px 0px 1px; border-style: solid; border-color: #959595;
+ }
+
+ .footer {
+ /*clear: both;*/
+ border-width: 0px 1px 0px 1px; border-style: solid; border-color: #959595;
+ font-family: Verdana,Arial,Helvetica, sans-serif;
+ font-size: 9px;
+ padding: 10px 10px 30px 10px;
+ background: white;
+ }
+
+ .pageTitle {
+ font-family: Arial;
+ font-size: 18px;
+ font-weight: bold;
+ margin-top: 5px;
+ }
+
+ .content {
+ border-width: 0px 1px 0px 1px;
+ border-style: solid;
+ border-color: #959595;
+ font-family: Arial;
+ font-size: 11px;
+ padding: 5px;
+ background: white;
+ /*height: 600px;*/
+ }
+
+ .popupContent {
+ font-family: Arial;
+ font-size: 11px;
+ padding: 3px;
+ }
+
+ .logo {
+ border-width: 0px 1px 0px 1px;
+ border-style: solid;
+ border-color: #959595;
+ text-align: right;
+ }
+
+ .sep {
+ border: 1px solid black
+ }
+
+ .attLogo { /*position: relative;*/
+ float:left;
+ padding-top: 25px;
+ padding-left: 25px;
+ }
+
+ .applicationLogo { float:right;
+ padding-top: 25px;
+ padding-right: 25px;
+ }
+
+ .applinkWhite { font-family: Arial;
+ font-size: 13px;
+ font-weight: 900;
+ color: #FFFFFF;
+ text-decoration: none; }
+
+ .terms { font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 9px;
+ }
+
+ .broadcastMessage { color: red; }
+ .broadcastMessageList { color: red; }
+
+ .button {
+ margin: 5px 1px 5px 1px;
+ padding: 3px; }
+
+ .toolbarbutton:hover {
+ color:#005491;
+ }
+
+ .headerText { font-family: Arial;
+ font-size: 15px;
+ font-weight: 700;
+ color: #000000; }
+
+ .headerBackground { background: #336699; }
+
+ .errorMessageText { font-family: Arial;
+ font-size: 11px;
+ font-weight: bold;
+ color: red; }
+
+
+ .normalText { font-family: Arial;
+ font-size: 11px;
+ color: #000000; }
+
+ .normalTextRed { font-family: Arial;
+ font-size: 11px;
+ color: red; }
+
+
+ .smallNormalText { font-family: Arial;
+ font-size: 9px;
+ color: #000000; }
+
+ .tableBorder { border:1px outset teal }
+
+ .validationError { background: #b9eaff; }
+
+ .templatebody {
+ background: url(../images/body_graphic.jpg) repeat-x;
+ /*margin: 40px 80px 40px 80px;*/
+ }
+
+ /*--------------------- General Content ------------------------------------*/
+
+ .relative {
+ position:relative;
+ }
+
+ .clear{
+ clear:both;
+ }
+
+ .left {
+ float: left;
+ }
+
+ .leftCentered{
+ float: left;
+ text-align: center;
+ }
+
+ .right {
+ float: right;
+ }
+
+ .rightAligned{
+ text-align: right;
+ }
+
+ .centered {
+ text-align: center;
+ align: center;
+ }
+
+
+ .noWrap{
+ white-space:nowrap;
+ }
+
+ .disabled {
+ color:gray;
+ cursor:hand;
+ }
+
+ /*--------------------- Tab styles -------------------------------------*/
+
+ .current {
+ font-weight: bold;
+ border-width: 1px 1px 1px 1px;
+ border-color: silver;
+ border-style: solid;
+ }
+
+ .subTab {
+ font-weight:bold;
+ font-family: Arial;
+ font-size: 11px;
+ color: #0F3B82;
+ }
+
+
+ /*--------------------- Grid styles ------------------------------------*/
+
+ /* Grid navigation and header styles */
+ .gridFilterLabel {font-size: 7pt;
+ font-align: justify;
+ font-weight: bold;
+ display: block;}
+
+ .gridFilterText {height: 17px;
+ font-size: 8pt;
+ width: 60%;
+ font-align: justify;}
+
+ .gridNavigationBar { font-family:Arial,Verdana;
+ font-size:11px;
+ font-weight:normal;
+ color:#000;
+ margin: 0px;
+ width: 100%;
+ vertical-align: middle;
+ }
+
+ .gridNavigationBar .navLinks { float: left;
+ margin-right:15px;
+ padding-top: 2px;
+ height: 19px;
+ line-height: 19px;
+ }
+
+ .gridNavigationBar .pageControls { float: left;
+ margin-right: 15px;
+ height: 19px;
+ line-height: 19px;
+ }
+
+ .gridNavigationBar .pageControls input { font-size: 8pt;
+ height: 17px;
+ vertical-align: middle;
+ }
+
+ .gridNavigationBar .pageInfo { float: right;
+ vertical-align: middle;
+ height: 19px;
+ line-height: 19px;
+ }
+
+ .gridNavigationBar .pageInfo input { font-size: 8pt;
+ height: 17px;
+ vertical-align: middle;
+ }
+
+
+ .gridNavigationBar span { padding: 3px; }
+
+ .gridNavigationBar a {
+ text-decoration:underline;
+ color:#000;
+ font-weight:normal;
+ }
+
+ .gridNavigationBar img { vertical-align: middle; }
+
+ .gridBulkUpdateRow {
+ height: 35px;
+ line-height: 35px;
+ }
+
+ .gridBulkUpdateRow input {
+ vertical-align: middle;
+ }
+
+
+ /* dummy class used to lock the form elements of a grid - ex. bulk transaction processing */
+ .alwaysEnabled {}
+
+ .hidden {
+ display: none;
+ }
+
+ .selectedPage {
+ background-color:#C4DFFB;
+ color: white;
+ border-style: solid;
+ border-width: 1px;
+ border-color: gray;
+ padding-left: 3px;
+ padding-right: 3px;
+ vertical-align: middle;
+ }
+
+ .selectedRow{
+ /*background-color:#C4DFFB;*/
+ }
+
+ /* Action Item styles */
+ .actionList {
+ margin-left: -20px;
+ margin-right: -10px;
+ padding-left: 5px;
+ }
+
+ .actionList li {
+ float:left;
+ padding-left: 3px;
+ padding-right: 3px;
+ }
+
+ .actionList li a {
+ text-decoration:none;
+ color:#000;
+ }
+
+ /* Filter Operator List styles */
+
+ .filterList {
+ margin: 0px;
+ }
+
+ .filterList li {
+ list-style-type: none;
+ padding:3px 3px 3px 2px;
+ cursor:hand;
+ font-size:11px;
+ }
+
+ .filterList li:hover {
+ background: #404040;
+ }
+
+ .filterList li a {
+ color: #000;
+ text-decoration: none;
+ }
+
+ .filterList li:hover a {
+ color: white;
+ }
+
+ .filterList li a:hover {
+ text-decoration: none;
+ color: white;
+ }
+
+ .filterListItem a {
+ text-decoration:none;
+ padding:3px 2px 3px 2px;
+ }
+
+
+ /*---------------------- Customized ZK Styles ------------------------------*/
+
+ .z-datebox input, .z-timebox input {
+ font-family: Arial;
+ font-size: 11px;
+ height: 15px;
+ margin-top:1px;
+ }
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/ATT_Labs_Logo.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/ATT_Labs_Logo.png
new file mode 100755
index 000000000..b2780a0d2
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/ATT_Labs_Logo.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/Logo_att_labs.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/Logo_att_labs.png
new file mode 100755
index 000000000..bc6163a18
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/Logo_att_labs.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/Rlogo.jpg b/epsdk-app-onap/src/main/webapp/static/fusion/images/Rlogo.jpg
new file mode 100755
index 000000000..656a6b1f1
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/Rlogo.jpg
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/action_icon.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/action_icon.png
new file mode 100755
index 000000000..f2d1bc0b6
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/action_icon.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/action_list_spacer.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/action_list_spacer.gif
new file mode 100755
index 000000000..0afdd23b6
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/action_list_spacer.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/active.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/active.png
new file mode 100755
index 000000000..452417768
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/active.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/add.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/add.png
new file mode 100755
index 000000000..46d944b3d
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/add.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/add_tool_button.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/add_tool_button.png
new file mode 100755
index 000000000..1e7890ddf
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/add_tool_button.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/addicon.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/addicon.png
new file mode 100755
index 000000000..6cb5042f2
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/addicon.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/application_window_bg.jpg b/epsdk-app-onap/src/main/webapp/static/fusion/images/application_window_bg.jpg
new file mode 100755
index 000000000..c559e590a
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/application_window_bg.jpg
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/arrow-next.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/arrow-next.png
new file mode 100755
index 000000000..1a4f72c68
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/arrow-next.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/arrow-prev.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/arrow-prev.png
new file mode 100755
index 000000000..8211eba1d
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/arrow-prev.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/att_angular_gridster/grips.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/att_angular_gridster/grips.png
new file mode 100755
index 000000000..29b92cc57
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/att_angular_gridster/grips.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/att_logo.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/att_logo.png
new file mode 100755
index 000000000..6321b7582
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/att_logo.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/backButton.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/backButton.png
new file mode 100755
index 000000000..e27ea8cdf
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/backButton.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/blank.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/blank.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/blueButton.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/blueButton.png
new file mode 100755
index 000000000..0cfbee119
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/blueButton.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/body_graphic.jpg b/epsdk-app-onap/src/main/webapp/static/fusion/images/body_graphic.jpg
new file mode 100755
index 000000000..93468a8d5
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/body_graphic.jpg
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/bubble.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/bubble.png
new file mode 100755
index 000000000..dd5abd37c
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/bubble.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/cache.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/cache.png
new file mode 100755
index 000000000..67fb35502
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/cache.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/calendar.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/calendar.gif
new file mode 100755
index 000000000..a90aef060
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/calendar.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/chevron.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/chevron.png
new file mode 100755
index 000000000..7f7ae1560
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/chevron.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/close_container.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/close_container.gif
new file mode 100755
index 000000000..e2f67d72e
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/close_container.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/collapsed-icon.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/collapsed-icon.png
new file mode 100755
index 000000000..000cbec5a
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/collapsed-icon.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/column-bg.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/column-bg.png
new file mode 100755
index 000000000..1005ea7d7
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/column-bg.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/copyicon-highlighted.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/copyicon-highlighted.png
new file mode 100755
index 000000000..312c43984
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/copyicon-highlighted.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/copyicon.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/copyicon.png
new file mode 100755
index 000000000..6c1c3c155
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/copyicon.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/csv_icon.jpg b/epsdk-app-onap/src/main/webapp/static/fusion/images/csv_icon.jpg
new file mode 100755
index 000000000..b4d795bdb
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/csv_icon.jpg
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/csv_icon.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/csv_icon.png
new file mode 100755
index 000000000..bfae8fc31
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/csv_icon.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/customers-add.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/customers-add.png
new file mode 100755
index 000000000..127cdac40
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/customers-add.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/customers-search.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/customers-search.png
new file mode 100755
index 000000000..fb08f84eb
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/customers-search.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/customers.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/customers.png
new file mode 100755
index 000000000..f9bb5ef10
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/customers.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/decrypted.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/decrypted.png
new file mode 100755
index 000000000..236cbeb80
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/decrypted.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/deleteicon-highlighted.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/deleteicon-highlighted.gif
new file mode 100755
index 000000000..b62241b4e
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/deleteicon-highlighted.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/deleteicon-highlighted.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/deleteicon-highlighted.png
new file mode 100755
index 000000000..aee193def
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/deleteicon-highlighted.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/deleteicon.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/deleteicon.gif
new file mode 100755
index 000000000..4b07af826
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/deleteicon.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/ecomp-login-550x360.jpg b/epsdk-app-onap/src/main/webapp/static/fusion/images/ecomp-login-550x360.jpg
new file mode 100755
index 000000000..618b1a924
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/ecomp-login-550x360.jpg
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/ecomp-login.jpg b/epsdk-app-onap/src/main/webapp/static/fusion/images/ecomp-login.jpg
new file mode 100755
index 000000000..618b20e91
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/ecomp-login.jpg
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/ecomp.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/ecomp.png
new file mode 100755
index 000000000..b355f109f
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/ecomp.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/ecomp_trans.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/ecomp_trans.png
new file mode 100755
index 000000000..4e8381c1a
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/ecomp_trans.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/editicon.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/editicon.gif
new file mode 100755
index 000000000..48538c18c
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/editicon.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/error_type.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/error_type.gif
new file mode 100755
index 000000000..bd51e8155
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/error_type.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/example-frame.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/example-frame.png
new file mode 100755
index 000000000..31f2fe1cc
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/example-frame.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/excelicon_multi.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/excelicon_multi.gif
new file mode 100755
index 000000000..1a4fbaabd
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/excelicon_multi.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/executeicon.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/executeicon.png
new file mode 100755
index 000000000..295c429ba
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/executeicon.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/expanded-icon.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/expanded-icon.png
new file mode 100755
index 000000000..490e068f5
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/expanded-icon.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/file-add.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/file-add.png
new file mode 100755
index 000000000..076bd8986
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/file-add.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/file_import.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/file_import.png
new file mode 100755
index 000000000..2374ba3f5
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/file_import.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/file_save-all.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/file_save-all.png
new file mode 100755
index 000000000..3c300ecb5
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/file_save-all.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/filter_icon.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/filter_icon.png
new file mode 100755
index 000000000..c36ad2c23
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/filter_icon.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_add.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_add.png
new file mode 100755
index 000000000..83761c296
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_add.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_closed.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_closed.png
new file mode 100755
index 000000000..1b365fd8a
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_closed.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_delete.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_delete.png
new file mode 100755
index 000000000..bb56a9e6f
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_delete.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_edit.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_edit.png
new file mode 100755
index 000000000..fe774a62c
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_edit.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_open.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_open.png
new file mode 100755
index 000000000..f1ed9abe0
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_open.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_user.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_user.png
new file mode 100755
index 000000000..2cd28412b
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/folder_user.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/funnel.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/funnel.png
new file mode 100755
index 000000000..35f1d2596
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/funnel.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/fusion.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/fusion.gif
new file mode 100755
index 000000000..368319e6d
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/fusion.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/grayButton.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/grayButton.png
new file mode 100755
index 000000000..83f2c45e7
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/grayButton.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/gray_add_tool_button.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/gray_add_tool_button.png
new file mode 100755
index 000000000..962b0a8ad
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/gray_add_tool_button.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/headerChatIcon.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/headerChatIcon.png
new file mode 100755
index 000000000..9b0840ad9
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/headerChatIcon.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/icon_remove_all.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/icon_remove_all.gif
new file mode 100755
index 000000000..0912b4a36
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/icon_remove_all.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/inactive.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/inactive.png
new file mode 100755
index 000000000..e9920bf47
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/inactive.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/info_type.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/info_type.gif
new file mode 100755
index 000000000..8dd66f30a
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/info_type.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/leftButton.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/leftButton.png
new file mode 100755
index 000000000..edf02c6c1
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/leftButton.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/loading.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/loading.gif
new file mode 100755
index 000000000..cccb0fc9f
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/loading.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/loading_bar.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/loading_bar.gif
new file mode 100755
index 000000000..eed8a505e
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/loading_bar.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/login_button.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/login_button.gif
new file mode 100755
index 000000000..990b52276
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/login_button.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/logo_att.jpg b/epsdk-app-onap/src/main/webapp/static/fusion/images/logo_att.jpg
new file mode 100755
index 000000000..54d1afa8c
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/logo_att.jpg
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/logo_att_header.jpg b/epsdk-app-onap/src/main/webapp/static/fusion/images/logo_att_header.jpg
new file mode 100755
index 000000000..54d1afa8c
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/logo_att_header.jpg
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/logo_att_header.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/logo_att_header.png
new file mode 100755
index 000000000..c382c57e2
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/logo_att_header.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/logo_header.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/logo_header.png
new file mode 100755
index 000000000..e7b22055e
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/logo_header.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/m1.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/m1.gif
new file mode 100755
index 000000000..f7161fd9b
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/m1.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/mail.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/mail.png
new file mode 100755
index 000000000..bcf7d2548
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/mail.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/map.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/map.png
new file mode 100755
index 000000000..9ecb79abe
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/map.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/bubble.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/bubble.png
new file mode 100755
index 000000000..dd5abd37c
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/bubble.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/file_import.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/file_import.png
new file mode 100755
index 000000000..2374ba3f5
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/file_import.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/file_save-all.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/file_save-all.png
new file mode 100755
index 000000000..3c300ecb5
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/file_save-all.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/mail.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/mail.png
new file mode 100755
index 000000000..bcf7d2548
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/mail.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/profile.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/profile.png
new file mode 100755
index 000000000..a3998fca6
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/profile.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/speechbubble.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/speechbubble.png
new file mode 100755
index 000000000..7350d8b56
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/speechbubble.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/users.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/users.png
new file mode 100755
index 000000000..13fec65e4
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/menu/users.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/minus.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/minus.gif
new file mode 100755
index 000000000..0c62d1a0f
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/minus.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_black.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_black.png
new file mode 100755
index 000000000..76fba8bf7
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_black.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_grey.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_grey.png
new file mode 100755
index 000000000..829832f6a
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_grey.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_horizontal.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_horizontal.png
new file mode 100755
index 000000000..44a9eb473
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_horizontal.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_white.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_white.png
new file mode 100755
index 000000000..564bf2b52
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/mobile_logo_att_header_white.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/modify_icon.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/modify_icon.gif
new file mode 100755
index 000000000..994fe6556
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/modify_icon.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/no_favorites_star.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/no_favorites_star.png
new file mode 100755
index 000000000..4db054031
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/no_favorites_star.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/note-add.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/note-add.png
new file mode 100755
index 000000000..96bbaf471
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/note-add.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/note-search.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/note-search.png
new file mode 100755
index 000000000..dbdab172b
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/note-search.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/note.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/note.png
new file mode 100755
index 000000000..f082b0e9c
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/note.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/notes.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/notes.png
new file mode 100755
index 000000000..f54a9e8d4
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/notes.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/offline.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/offline.png
new file mode 100755
index 000000000..4519ff322
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/offline.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/offlineMsg.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/offlineMsg.gif
new file mode 100755
index 000000000..dbbe02fb4
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/offlineMsg.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/online.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/online.png
new file mode 100755
index 000000000..7a74a9c5a
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/online.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/page.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/page.gif
new file mode 100755
index 000000000..10b36fa95
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/page.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/pagination.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/pagination.png
new file mode 100755
index 000000000..4dc461072
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/pagination.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/panel-e-w-toggle.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/panel-e-w-toggle.png
new file mode 100755
index 000000000..b3863ee71
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/panel-e-w-toggle.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/panel-n-s-toggle.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/panel-n-s-toggle.png
new file mode 100755
index 000000000..b5d9c3c07
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/panel-n-s-toggle.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/pix.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/pix.gif
new file mode 100755
index 000000000..c7bee69bd
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/pix.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/plus.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/plus.gif
new file mode 100755
index 000000000..4a51f04d0
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/plus.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/printer.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/printer.gif
new file mode 100755
index 000000000..37f2d98a5
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/printer.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/profile.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/profile.png
new file mode 100755
index 000000000..a3998fca6
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/profile.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/report-add.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/report-add.png
new file mode 100755
index 000000000..c75b66636
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/report-add.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/report-favorite.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/report-favorite.png
new file mode 100755
index 000000000..e75cacc39
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/report-favorite.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/report-my.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/report-my.png
new file mode 100755
index 000000000..1b9e092d2
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/report-my.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/report-public.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/report-public.png
new file mode 100755
index 000000000..9ee052ec7
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/report-public.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/report.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/report.png
new file mode 100755
index 000000000..b0cd69fc5
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/report.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/reports.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/reports.png
new file mode 100755
index 000000000..40dca71ee
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/reports.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/results-first-active.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-first-active.png
new file mode 100755
index 000000000..0e54592c8
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-first-active.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/results-first-disabled.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-first-disabled.png
new file mode 100755
index 000000000..f5610ff53
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-first-disabled.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/results-last-active.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-last-active.png
new file mode 100755
index 000000000..5ee5da40d
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-last-active.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/results-last-disabled.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-last-disabled.png
new file mode 100755
index 000000000..8647a553f
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-last-disabled.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/results-next-active.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-next-active.png
new file mode 100755
index 000000000..3c0793645
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-next-active.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/results-next-disabled.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-next-disabled.png
new file mode 100755
index 000000000..12f6d6b6c
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-next-disabled.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/results-prev-active.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-prev-active.png
new file mode 100755
index 000000000..2c7246af9
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-prev-active.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/results-prev-disabled.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-prev-disabled.png
new file mode 100755
index 000000000..46c82bd54
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/results-prev-disabled.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/resultset_last.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/resultset_last.png
new file mode 100755
index 000000000..b8c4f0999
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/resultset_last.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/resultset_previous.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/resultset_previous.png
new file mode 100755
index 000000000..73b833268
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/resultset_previous.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/return_to_top.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/return_to_top.gif
new file mode 100755
index 000000000..f02defb98
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/return_to_top.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/rightButton.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/rightButton.png
new file mode 100755
index 000000000..9d868f9be
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/rightButton.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/search.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/search.png
new file mode 100755
index 000000000..7ff964f83
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/search.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/search_profile.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/search_profile.png
new file mode 100755
index 000000000..28852144d
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/search_profile.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/sort_asc.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/sort_asc.gif
new file mode 100755
index 000000000..427928f33
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/sort_asc.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/sort_desc.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/sort_desc.gif
new file mode 100755
index 000000000..5aa81a182
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/sort_desc.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/spacer.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/spacer.gif
new file mode 100755
index 000000000..fc2560981
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/spacer.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/success_type.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/success_type.gif
new file mode 100755
index 000000000..2f72242ba
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/success_type.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/swoosh.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/swoosh.gif
new file mode 100755
index 000000000..4b791772f
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/swoosh.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/tab-hm.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/tab-hm.png
new file mode 100755
index 000000000..1e75d8d46
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/tab-hm.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/tab-v-hm.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/tab-v-hm.png
new file mode 100755
index 000000000..df8c6cbf2
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/tab-v-hm.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/tab.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/tab.png
new file mode 100755
index 000000000..00eb6fcbe
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/tab.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/table-add.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/table-add.png
new file mode 100755
index 000000000..0c1385767
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/table-add.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/table-delete.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/table-delete.png
new file mode 100755
index 000000000..917d7d285
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/table-delete.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/table-edit.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/table-edit.png
new file mode 100755
index 000000000..40dbc0bd4
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/table-edit.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/table.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/table.png
new file mode 100755
index 000000000..ff025e70f
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/table.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/tabs-bg.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/tabs-bg.png
new file mode 100755
index 000000000..f711bc026
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/tabs-bg.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/toolButton.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/toolButton.gif
new file mode 100755
index 000000000..6d3923efc
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/toolButton.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/toolButton.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/toolButton.png
new file mode 100755
index 000000000..afe4d7a3e
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/toolButton.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/toolbar.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/toolbar.png
new file mode 100755
index 000000000..3dde94c07
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/toolbar.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/users.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/users.png
new file mode 100755
index 000000000..13fec65e4
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/users.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/warning_type.gif b/epsdk-app-onap/src/main/webapp/static/fusion/images/warning_type.gif
new file mode 100755
index 000000000..fd7b9a059
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/warning_type.gif
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/webphone.ico b/epsdk-app-onap/src/main/webapp/static/fusion/images/webphone.ico
new file mode 100755
index 000000000..d58e62ab7
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/webphone.ico
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/images/whiteButton.png b/epsdk-app-onap/src/main/webapp/static/fusion/images/whiteButton.png
new file mode 100755
index 000000000..ce8c9cb48
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/images/whiteButton.png
Binary files differ
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/js/att_angular_gridster/angular-gridster.js b/epsdk-app-onap/src/main/webapp/static/fusion/js/att_angular_gridster/angular-gridster.js
new file mode 100755
index 000000000..20ba0c436
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/js/att_angular_gridster/angular-gridster.js
@@ -0,0 +1,2244 @@
+/*global define:true*/
+(function(root, factory) {
+
+ 'use strict';
+
+ if (typeof define === 'function' && define.amd) {
+ // AMD
+ define(['angular'], factory);
+ } else if (typeof exports === 'object') {
+ // CommonJS
+ module.exports = factory(require('angular'));
+ } else {
+ // Browser, nothing "exported". Only registered as a module with angular.
+ factory(root.angular);
+ }
+}(this, function(angular) {
+
+ 'use strict';
+
+ var ie8 = false;
+
+ var getInternetExplorerVersion = function ()
+ // Returns the version of Internet Explorer >4 or
+ // undefined(indicating the use of another browser).
+ {
+ var isIE10 = (eval("/*@cc_on!@*/false") && document.documentMode === 10);
+ if (isIE10) {
+ return 10;
+ }
+ var v = 3,
+ div = document.createElement('div'),
+ all = div.getElementsByTagName('i');
+ do {
+ div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->';
+ } while (all[0]);
+ return v > 4 ? v : undefined;
+ };
+
+ var browserVersion = getInternetExplorerVersion();
+
+ if (browserVersion && browserVersion < 9) {
+ ie8 = true;
+ }
+
+ // This returned angular module 'gridster' is what is exported.
+ return angular.module('attGridsterLib', [])
+
+ .constant('gridsterConfig', {
+ columns: 6, // number of columns in the grid
+ pushing: true, // whether to push other items out of the way
+ floating: true, // whether to automatically float items up so they stack
+ swapping: true, // whether or not to have items switch places instead of push down if they are the same size
+ width: 'auto', // width of the grid. "auto" will expand the grid to its parent container
+ colWidth: 'auto', // width of grid columns. "auto" will divide the width of the grid evenly among the columns
+ rowHeight: 'match', // height of grid rows. 'match' will make it the same as the column width, a numeric value will be interpreted as pixels, '/2' is half the column width, '*5' is five times the column width, etc.
+ margins: [10, 10], // margins in between grid items
+ outerMargin: false,
+ isMobile: false, // toggle mobile view
+ mobileBreakPoint: 100, // width threshold to toggle mobile mode
+ mobileModeEnabled: true, // whether or not to toggle mobile mode when screen width is less than mobileBreakPoint
+ minColumns: 1, // minimum amount of columns the grid can scale down to
+ minRows: 1, // minimum amount of rows to show if the grid is empty
+ maxRows: 100, // maximum amount of rows in the grid
+ defaultSizeX: 1, // default width of an item in columns
+ defaultSizeY: 1, // default height of an item in rows
+ minSizeX: 1, // minimum column width of an item
+ maxSizeX: null, // maximum column width of an item
+ minSizeY: 1, // minumum row height of an item
+ maxSizeY: null, // maximum row height of an item
+ saveGridItemCalculatedHeightInMobile: false, // grid item height in mobile display. true- to use the calculated height by sizeY given
+ resizable: { // options to pass to resizable handler
+ enabled: false,
+ handles: ['s', 'e', 'n', 'w', 'se', 'ne', 'sw', 'nw']
+ },
+ draggable: { // options to pass to draggable handler
+ enabled: true,
+ scrollSensitivity: 20, // Distance in pixels from the edge of the viewport after which the viewport should scroll, relative to pointer
+ scrollSpeed: 15 // Speed at which the window should scroll once the mouse pointer gets within scrollSensitivity distance
+ }
+ })
+
+ .controller('GridsterCtrl', ['gridsterConfig', '$timeout',
+ function(gridsterConfig, $timeout) {
+
+ var gridster = this;
+
+ /**
+ * Create options from gridsterConfig constant
+ */
+ angular.extend(this, gridsterConfig);
+
+ this.resizable = angular.extend({}, gridsterConfig.resizable || {});
+ this.draggable = angular.extend({}, gridsterConfig.draggable || {});
+
+ var flag = false;
+ this.layoutChanged = function() {
+ if (flag) {
+ return;
+ }
+ flag = true;
+ $timeout(function() {
+ flag = false;
+ if (gridster.loaded) {
+ gridster.floatItemsUp();
+ }
+ gridster.updateHeight(gridster.movingItem ? gridster.movingItem.sizeY : 0);
+ }, 30);
+ };
+
+ /**
+ * A positional array of the items in the grid
+ */
+ this.grid = [];
+
+ /**
+ * Clean up after yourself
+ */
+ this.destroy = function() {
+ // empty the grid to cut back on the possibility
+ // of circular references
+ if (this.grid) {
+ this.grid = [];
+ }
+ this.$element = null;
+ };
+
+ /**
+ * Overrides default options
+ *
+ * @param {Object} options The options to override
+ */
+ this.setOptions = function(options) {
+ if (!options) {
+ return;
+ }
+
+ options = angular.extend({}, options);
+
+ // all this to avoid using jQuery...
+ if (options.draggable) {
+ angular.extend(this.draggable, options.draggable);
+ delete(options.draggable);
+ }
+ if (options.resizable) {
+ angular.extend(this.resizable, options.resizable);
+ delete(options.resizable);
+ }
+
+ angular.extend(this, options);
+
+ if (!this.margins || this.margins.length !== 2) {
+ this.margins = [0, 0];
+ } else {
+ for (var x = 0, l = this.margins.length; x < l; ++x) {
+ this.margins[x] = parseInt(this.margins[x], 10);
+ if (isNaN(this.margins[x])) {
+ this.margins[x] = 0;
+ }
+ }
+ }
+ };
+
+ /**
+ * Check if item can occupy a specified position in the grid
+ *
+ * @param {Object} item The item in question
+ * @param {Number} row The row index
+ * @param {Number} column The column index
+ * @returns {Boolean} True if if item fits
+ */
+ this.canItemOccupy = function(item, row, column) {
+ return row > -1 && column > -1 && item.sizeX + column <= this.columns && item.sizeY + row <= this.maxRows;
+ };
+
+ /**
+ * Set the item in the first suitable position
+ *
+ * @param {Object} item The item to insert
+ */
+ this.autoSetItemPosition = function(item) {
+ // walk through each row and column looking for a place it will fit
+ for (var rowIndex = 0; rowIndex < this.maxRows; ++rowIndex) {
+ for (var colIndex = 0; colIndex < this.columns; ++colIndex) {
+ // only insert if position is not already taken and it can fit
+ var items = this.getItems(rowIndex, colIndex, item.sizeX, item.sizeY, item);
+ if (items.length === 0 && this.canItemOccupy(item, rowIndex, colIndex)) {
+ this.putItem(item, rowIndex, colIndex);
+ return;
+ }
+ }
+ }
+ throw new Error('Unable to place item!');
+ };
+
+ /**
+ * Gets items at a specific coordinate
+ *
+ * @param {Number} row
+ * @param {Number} column
+ * @param {Number} sizeX
+ * @param {Number} sizeY
+ * @param {Array} excludeItems An array of items to exclude from selection
+ * @returns {Array} Items that match the criteria
+ */
+ this.getItems = function(row, column, sizeX, sizeY, excludeItems) {
+ var items = [];
+ if (!sizeX || !sizeY) {
+ sizeX = sizeY = 1;
+ }
+ if (excludeItems && !(excludeItems instanceof Array)) {
+ excludeItems = [excludeItems];
+ }
+ for (var h = 0; h < sizeY; ++h) {
+ for (var w = 0; w < sizeX; ++w) {
+ var item = this.getItem(row + h, column + w, excludeItems);
+ if (item && (!excludeItems || excludeItems.indexOf(item) === -1) && items.indexOf(item) === -1) {
+ items.push(item);
+ }
+ }
+ }
+ return items;
+ };
+
+ /**
+ * @param {Array} items
+ * @returns {Object} An item that represents the bounding box of the items
+ */
+ this.getBoundingBox = function(items) {
+
+ if (items.length === 0) {
+ return null;
+ }
+ if (items.length === 1) {
+ return {
+ row: items[0].row,
+ col: items[0].col,
+ sizeY: items[0].sizeY,
+ sizeX: items[0].sizeX
+ };
+ }
+
+ var maxRow = 0;
+ var maxCol = 0;
+ var minRow = 9999;
+ var minCol = 9999;
+
+ for (var i = 0, l = items.length; i < l; ++i) {
+ var item = items[i];
+ minRow = Math.min(item.row, minRow);
+ minCol = Math.min(item.col, minCol);
+ maxRow = Math.max(item.row + item.sizeY, maxRow);
+ maxCol = Math.max(item.col + item.sizeX, maxCol);
+ }
+
+ return {
+ row: minRow,
+ col: minCol,
+ sizeY: maxRow - minRow,
+ sizeX: maxCol - minCol
+ };
+ };
+
+
+ /**
+ * Removes an item from the grid
+ *
+ * @param {Object} item
+ */
+ this.removeItem = function(item) {
+ for (var rowIndex = 0, l = this.grid.length; rowIndex < l; ++rowIndex) {
+ var columns = this.grid[rowIndex];
+ if (!columns) {
+ continue;
+ }
+ var index = columns.indexOf(item);
+ if (index !== -1) {
+ columns[index] = null;
+ break;
+ }
+ }
+ this.layoutChanged();
+ };
+
+ /**
+ * Returns the item at a specified coordinate
+ *
+ * @param {Number} row
+ * @param {Number} column
+ * @param {Array} excludeItems Items to exclude from selection
+ * @returns {Object} The matched item or null
+ */
+ this.getItem = function(row, column, excludeItems) {
+ if (excludeItems && !(excludeItems instanceof Array)) {
+ excludeItems = [excludeItems];
+ }
+ var sizeY = 1;
+ while (row > -1) {
+ var sizeX = 1,
+ col = column;
+ while (col > -1) {
+ var items = this.grid[row];
+ if (items) {
+ var item = items[col];
+ if (item && (!excludeItems || excludeItems.indexOf(item) === -1) && item.sizeX >= sizeX && item.sizeY >= sizeY) {
+ return item;
+ }
+ }
+ ++sizeX;
+ --col;
+ }
+ --row;
+ ++sizeY;
+ }
+ return null;
+ };
+
+ /**
+ * Insert an array of items into the grid
+ *
+ * @param {Array} items An array of items to insert
+ */
+ this.putItems = function(items) {
+ for (var i = 0, l = items.length; i < l; ++i) {
+ this.putItem(items[i]);
+ }
+ };
+
+ /**
+ * Insert a single item into the grid
+ *
+ * @param {Object} item The item to insert
+ * @param {Number} row (Optional) Specifies the items row index
+ * @param {Number} column (Optional) Specifies the items column index
+ * @param {Array} ignoreItems
+ */
+ this.putItem = function(item, row, column, ignoreItems) {
+ // auto place item if no row specified
+ if (typeof row === 'undefined' || row === null) {
+ row = item.row;
+ column = item.col;
+ if (typeof row === 'undefined' || row === null) {
+ this.autoSetItemPosition(item);
+ return;
+ }
+ }
+
+ // keep item within allowed bounds
+ if (!this.canItemOccupy(item, row, column)) {
+ column = Math.min(this.columns - item.sizeX, Math.max(0, column));
+ row = Math.min(this.maxRows - item.sizeY, Math.max(0, row));
+ }
+
+ // check if item is already in grid
+ if (item.oldRow !== null && typeof item.oldRow !== 'undefined') {
+ var samePosition = item.oldRow === row && item.oldColumn === column;
+ var inGrid = this.grid[row] && this.grid[row][column] === item;
+ if (samePosition && inGrid) {
+ item.row = row;
+ item.col = column;
+ return;
+ } else {
+ // remove from old position
+ var oldRow = this.grid[item.oldRow];
+ if (oldRow && oldRow[item.oldColumn] === item) {
+ delete oldRow[item.oldColumn];
+ }
+ }
+ }
+
+ item.oldRow = item.row = row;
+ item.oldColumn = item.col = column;
+
+ this.moveOverlappingItems(item, ignoreItems);
+
+ if (!this.grid[row]) {
+ this.grid[row] = [];
+ }
+ this.grid[row][column] = item;
+
+ if (this.movingItem === item) {
+ this.floatItemUp(item);
+ }
+ this.layoutChanged();
+ };
+
+ /**
+ * Trade row and column if item1 with item2
+ *
+ * @param {Object} item1
+ * @param {Object} item2
+ */
+ this.swapItems = function(item1, item2) {
+ this.grid[item1.row][item1.col] = item2;
+ this.grid[item2.row][item2.col] = item1;
+
+ var item1Row = item1.row;
+ var item1Col = item1.col;
+ item1.row = item2.row;
+ item1.col = item2.col;
+ item2.row = item1Row;
+ item2.col = item1Col;
+ };
+
+ /**
+ * Prevents items from being overlapped
+ *
+ * @param {Object} item The item that should remain
+ * @param {Array} ignoreItems
+ */
+ this.moveOverlappingItems = function(item, ignoreItems) {
+ // don't move item, so ignore it
+ if (!ignoreItems) {
+ ignoreItems = [item];
+ } else if (ignoreItems.indexOf(item) === -1) {
+ ignoreItems = ignoreItems.slice(0);
+ ignoreItems.push(item);
+ }
+
+ // get the items in the space occupied by the item's coordinates
+ var overlappingItems = this.getItems(
+ item.row,
+ item.col,
+ item.sizeX,
+ item.sizeY,
+ ignoreItems
+ );
+ this.moveItemsDown(overlappingItems, item.row + item.sizeY, ignoreItems);
+ };
+
+ /**
+ * Moves an array of items to a specified row
+ *
+ * @param {Array} items The items to move
+ * @param {Number} newRow The target row
+ * @param {Array} ignoreItems
+ */
+ this.moveItemsDown = function(items, newRow, ignoreItems) {
+ if (!items || items.length === 0) {
+ return;
+ }
+ items.sort(function(a, b) {
+ return a.row - b.row;
+ });
+
+ ignoreItems = ignoreItems ? ignoreItems.slice(0) : [];
+ var topRows = {},
+ item, i, l;
+
+ // calculate the top rows in each column
+ for (i = 0, l = items.length; i < l; ++i) {
+ item = items[i];
+ var topRow = topRows[item.col];
+ if (typeof topRow === 'undefined' || item.row < topRow) {
+ topRows[item.col] = item.row;
+ }
+ }
+
+ // move each item down from the top row in its column to the row
+ for (i = 0, l = items.length; i < l; ++i) {
+ item = items[i];
+ var rowsToMove = newRow - topRows[item.col];
+ this.moveItemDown(item, item.row + rowsToMove, ignoreItems);
+ ignoreItems.push(item);
+ }
+ };
+
+ /**
+ * Moves an item down to a specified row
+ *
+ * @param {Object} item The item to move
+ * @param {Number} newRow The target row
+ * @param {Array} ignoreItems
+ */
+ this.moveItemDown = function(item, newRow, ignoreItems) {
+ if (item.row >= newRow) {
+ return;
+ }
+ while (item.row < newRow) {
+ ++item.row;
+ this.moveOverlappingItems(item, ignoreItems);
+ }
+ this.putItem(item, item.row, item.col, ignoreItems);
+ };
+
+ /**
+ * Moves all items up as much as possible
+ */
+ this.floatItemsUp = function() {
+ if (this.floating === false) {
+ return;
+ }
+ for (var rowIndex = 0, l = this.grid.length; rowIndex < l; ++rowIndex) {
+ var columns = this.grid[rowIndex];
+ if (!columns) {
+ continue;
+ }
+ for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) {
+ var item = columns[colIndex];
+ if (item) {
+ this.floatItemUp(item);
+ }
+ }
+ }
+ };
+
+ /**
+ * Float an item up to the most suitable row
+ *
+ * @param {Object} item The item to move
+ */
+ this.floatItemUp = function(item) {
+ if (this.floating === false) {
+ return;
+ }
+ var colIndex = item.col,
+ sizeY = item.sizeY,
+ sizeX = item.sizeX,
+ bestRow = null,
+ bestColumn = null,
+ rowIndex = item.row - 1;
+
+ while (rowIndex > -1) {
+ var items = this.getItems(rowIndex, colIndex, sizeX, sizeY, item);
+ if (items.length !== 0) {
+ break;
+ }
+ bestRow = rowIndex;
+ bestColumn = colIndex;
+ --rowIndex;
+ }
+ if (bestRow !== null) {
+ this.putItem(item, bestRow, bestColumn);
+ }
+ };
+
+ /**
+ * Update gridsters height
+ *
+ * @param {Number} plus (Optional) Additional height to add
+ */
+ this.updateHeight = function(plus) {
+ var maxHeight = this.minRows;
+ plus = plus || 0;
+ for (var rowIndex = this.grid.length; rowIndex >= 0; --rowIndex) {
+ var columns = this.grid[rowIndex];
+ if (!columns) {
+ continue;
+ }
+ for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) {
+ if (columns[colIndex]) {
+ maxHeight = Math.max(maxHeight, rowIndex + plus + columns[colIndex].sizeY);
+ }
+ }
+ }
+ this.gridHeight = this.maxRows - maxHeight > 0 ? Math.min(this.maxRows, maxHeight) : Math.max(this.maxRows, maxHeight);
+ };
+
+ /**
+ * Returns the number of rows that will fit in given amount of pixels
+ *
+ * @param {Number} pixels
+ * @param {Boolean} ceilOrFloor (Optional) Determines rounding method
+ */
+ this.pixelsToRows = function(pixels, ceilOrFloor) {
+ if (ceilOrFloor === true) {
+ return Math.ceil(pixels / this.curRowHeight);
+ } else if (ceilOrFloor === false) {
+ return Math.floor(pixels / this.curRowHeight);
+ }
+
+ return Math.round(pixels / this.curRowHeight);
+ };
+
+ /**
+ * Returns the number of columns that will fit in a given amount of pixels
+ *
+ * @param {Number} pixels
+ * @param {Boolean} ceilOrFloor (Optional) Determines rounding method
+ * @returns {Number} The number of columns
+ */
+ this.pixelsToColumns = function(pixels, ceilOrFloor) {
+ if (ceilOrFloor === true) {
+ return Math.ceil(pixels / this.curColWidth);
+ } else if (ceilOrFloor === false) {
+ return Math.floor(pixels / this.curColWidth);
+ }
+
+ return Math.round(pixels / this.curColWidth);
+ };
+ }
+ ])
+
+ .directive('gridsterPreview', function() {
+ return {
+ replace: true,
+ scope: true,
+ require: '^gridster',
+ template: '<div ng-style="previewStyle()" class="gridster-item gridster-preview-holder"></div>',
+ link: function(scope, $el, attrs, gridster) {
+
+ /**
+ * @returns {Object} style object for preview element
+ */
+ scope.previewStyle = function() {
+
+ if (!gridster.movingItem) {
+ return {
+ display: 'none'
+ };
+ }
+
+ return {
+ display: 'block',
+ height: (gridster.movingItem.sizeY * gridster.curRowHeight - gridster.margins[0]) + 'px',
+ width: (gridster.movingItem.sizeX * gridster.curColWidth - gridster.margins[1]) + 'px',
+ top: (gridster.movingItem.row * gridster.curRowHeight + (gridster.outerMargin ? gridster.margins[0] : 0)) + 'px',
+ left: (gridster.movingItem.col * gridster.curColWidth + (gridster.outerMargin ? gridster.margins[1] : 0)) + 'px'
+ };
+ };
+ }
+ };
+ })
+
+ /**
+ * The gridster directive
+ *
+ * @param {Function} $timeout
+ * @param {Object} $window
+ * @param {Object} $rootScope
+ * @param {Function} gridsterDebounce
+ */
+ .directive('gridster', ['$timeout', '$window', '$rootScope', 'gridsterDebounce',
+ function($timeout, $window, $rootScope, gridsterDebounce) {
+ return {
+ scope: true,
+ restrict: 'EAC',
+ controller: 'GridsterCtrl',
+ controllerAs: 'gridster',
+ compile: function($tplElem) {
+
+ $tplElem.prepend('<div ng-if="gridster.movingItem" gridster-preview></div>');
+
+ return function(scope, $elem, attrs, gridster) {
+ gridster.loaded = false;
+
+ gridster.$element = $elem;
+
+ scope.gridster = gridster;
+
+ $elem.addClass('gridster');
+
+ var isVisible = function(ele) {
+ return ele.style.visibility !== 'hidden' && ele.style.display !== 'none';
+ };
+
+ function refresh(config) {
+ gridster.setOptions(config);
+
+ if (!isVisible($elem[0])) {
+ return;
+ }
+
+ // resolve "auto" & "match" values
+ if (gridster.width === 'auto') {
+ gridster.curWidth = $elem[0].offsetWidth || parseInt($elem.css('width'), 10);
+ } else {
+ gridster.curWidth = gridster.width;
+ }
+
+ if (gridster.colWidth === 'auto') {
+ gridster.curColWidth = (gridster.curWidth + (gridster.outerMargin ? -gridster.margins[1] : gridster.margins[1])) / gridster.columns;
+ } else {
+ gridster.curColWidth = gridster.colWidth;
+ }
+
+ gridster.curRowHeight = gridster.rowHeight;
+ if (typeof gridster.rowHeight === 'string') {
+ if (gridster.rowHeight === 'match') {
+ gridster.curRowHeight = Math.round(gridster.curColWidth);
+ } else if (gridster.rowHeight.indexOf('*') !== -1) {
+ gridster.curRowHeight = Math.round(gridster.curColWidth * gridster.rowHeight.replace('*', '').replace(' ', ''));
+ } else if (gridster.rowHeight.indexOf('/') !== -1) {
+ gridster.curRowHeight = Math.round(gridster.curColWidth / gridster.rowHeight.replace('/', '').replace(' ', ''));
+ }
+ }
+
+ gridster.isMobile = gridster.mobileModeEnabled && gridster.curWidth <= gridster.mobileBreakPoint;
+
+ // loop through all items and reset their CSS
+ for (var rowIndex = 0, l = gridster.grid.length; rowIndex < l; ++rowIndex) {
+ var columns = gridster.grid[rowIndex];
+ if (!columns) {
+ continue;
+ }
+
+ for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) {
+ if (columns[colIndex]) {
+ var item = columns[colIndex];
+ item.setElementPosition();
+ item.setElementSizeY();
+ item.setElementSizeX();
+ }
+ }
+ }
+
+ updateHeight();
+ }
+
+ var optionsKey = attrs.gridster;
+ if (optionsKey) {
+ scope.$parent.$watch(optionsKey, function(newConfig) {
+ refresh(newConfig);
+ }, true);
+ } else {
+ refresh({});
+ }
+
+ scope.$watch(function() {
+ return gridster.loaded;
+ }, function() {
+ if (gridster.loaded) {
+ $elem.addClass('gridster-loaded');
+ } else {
+ $elem.removeClass('gridster-loaded');
+ }
+ });
+
+ scope.$watch(function() {
+ return gridster.isMobile;
+ }, function() {
+ if (gridster.isMobile) {
+ $elem.addClass('gridster-mobile').removeClass('gridster-desktop');
+ } else {
+ $elem.removeClass('gridster-mobile').addClass('gridster-desktop');
+ }
+ $rootScope.$broadcast('gridster-mobile-changed', gridster);
+ });
+
+ scope.$watch(function() {
+ return gridster.draggable;
+ }, function() {
+ $rootScope.$broadcast('gridster-draggable-changed', gridster);
+ }, true);
+
+ scope.$watch(function() {
+ return gridster.resizable;
+ }, function() {
+ $rootScope.$broadcast('gridster-resizable-changed', gridster);
+ }, true);
+
+ function updateHeight() {
+ if(gridster.gridHeight){ //need to put this check, otherwise fail in IE8
+ $elem.css('height', (gridster.gridHeight * gridster.curRowHeight) + (gridster.outerMargin ? gridster.margins[0] : -gridster.margins[0]) + 'px');
+ }
+ }
+
+ scope.$watch(function() {
+ return gridster.gridHeight;
+ }, updateHeight);
+
+ scope.$watch(function() {
+ return gridster.movingItem;
+ }, function() {
+ gridster.updateHeight(gridster.movingItem ? gridster.movingItem.sizeY : 0);
+ });
+
+ var prevWidth = $elem[0].offsetWidth || parseInt($elem.css('width'), 10);
+
+ var resize = function() {
+ var width = $elem[0].offsetWidth || parseInt($elem.css('width'), 10);
+
+ if (!width || width === prevWidth || gridster.movingItem) {
+ return;
+ }
+ prevWidth = width;
+
+ if (gridster.loaded) {
+ $elem.removeClass('gridster-loaded');
+ }
+
+ refresh();
+
+ if (gridster.loaded) {
+ $elem.addClass('gridster-loaded');
+ }
+
+ $rootScope.$broadcast('gridster-resized', [width, $elem[0].offsetHeight], gridster);
+ };
+
+ // track element width changes any way we can
+ var onResize = gridsterDebounce(function onResize() {
+ resize();
+ $timeout(function() {
+ scope.$apply();
+ });
+ }, 100);
+
+ scope.$watch(function() {
+ return isVisible($elem[0]);
+ }, onResize);
+
+ // see https://github.com/sdecima/javascript-detect-element-resize
+ if (typeof window.addResizeListener === 'function') {
+ window.addResizeListener($elem[0], onResize);
+ } else {
+ scope.$watch(function() {
+ return $elem[0].offsetWidth || parseInt($elem.css('width'), 10);
+ }, resize);
+ }
+ var $win = angular.element($window);
+ $win.on('resize', onResize);
+
+ // be sure to cleanup
+ scope.$on('$destroy', function() {
+ gridster.destroy();
+ $win.off('resize', onResize);
+ if (typeof window.removeResizeListener === 'function') {
+ window.removeResizeListener($elem[0], onResize);
+ }
+ });
+
+ // allow a little time to place items before floating up
+ $timeout(function() {
+ scope.$watch('gridster.floating', function() {
+ gridster.floatItemsUp();
+ });
+ gridster.loaded = true;
+ }, 100);
+ };
+ }
+ };
+ }
+ ])
+
+ .controller('GridsterItemCtrl', function() {
+ this.$element = null;
+ this.gridster = null;
+ this.row = null;
+ this.col = null;
+ this.sizeX = null;
+ this.sizeY = null;
+ this.minSizeX = 0;
+ this.minSizeY = 0;
+ this.maxSizeX = null;
+ this.maxSizeY = null;
+
+ this.init = function($element, gridster) {
+ this.$element = $element;
+ this.gridster = gridster;
+ this.sizeX = gridster.defaultSizeX;
+ this.sizeY = gridster.defaultSizeY;
+ };
+
+ this.destroy = function() {
+ // set these to null to avoid the possibility of circular references
+ this.gridster = null;
+ this.$element = null;
+ };
+
+ /**
+ * Returns the items most important attributes
+ */
+ this.toJSON = function() {
+ return {
+ row: this.row,
+ col: this.col,
+ sizeY: this.sizeY,
+ sizeX: this.sizeX
+ };
+ };
+
+ this.isMoving = function() {
+ return this.gridster.movingItem === this;
+ };
+
+ /**
+ * Set the items position
+ *
+ * @param {Number} row
+ * @param {Number} column
+ */
+ this.setPosition = function(row, column) {
+ this.gridster.putItem(this, row, column);
+
+ if (!this.isMoving()) {
+ this.setElementPosition();
+ }
+ };
+
+ /**
+ * Sets a specified size property
+ *
+ * @param {String} key Can be either "x" or "y"
+ * @param {Number} value The size amount
+ * @param {Boolean} preventMove
+ */
+ this.setSize = function(key, value, preventMove) {
+ key = key.toUpperCase();
+ var camelCase = 'size' + key,
+ titleCase = 'Size' + key;
+ if (value === '') {
+ return;
+ }
+ value = parseInt(value, 10);
+ if (isNaN(value) || value === 0) {
+ value = this.gridster['default' + titleCase];
+ }
+ var max = key === 'X' ? this.gridster.columns : this.gridster.maxRows;
+ if (this['max' + titleCase]) {
+ max = Math.min(this['max' + titleCase], max);
+ }
+ if (this.gridster['max' + titleCase]) {
+ max = Math.min(this.gridster['max' + titleCase], max);
+ }
+ if (key === 'X' && this.cols) {
+ max -= this.cols;
+ } else if (key === 'Y' && this.rows) {
+ max -= this.rows;
+ }
+
+ var min = 0;
+ if (this['min' + titleCase]) {
+ min = Math.max(this['min' + titleCase], min);
+ }
+ if (this.gridster['min' + titleCase]) {
+ min = Math.max(this.gridster['min' + titleCase], min);
+ }
+
+ value = Math.max(Math.min(value, max), min);
+
+ var changed = (this[camelCase] !== value || (this['old' + titleCase] && this['old' + titleCase] !== value));
+ this['old' + titleCase] = this[camelCase] = value;
+
+ if (!this.isMoving()) {
+ this['setElement' + titleCase]();
+ }
+ if (!preventMove && changed) {
+ this.gridster.moveOverlappingItems(this);
+ this.gridster.layoutChanged();
+ }
+
+ return changed;
+ };
+
+ /**
+ * Sets the items sizeY property
+ *
+ * @param {Number} rows
+ * @param {Boolean} preventMove
+ */
+ this.setSizeY = function(rows, preventMove) {
+ return this.setSize('Y', rows, preventMove);
+ };
+
+ /**
+ * Sets the items sizeX property
+ *
+ * @param {Number} columns
+ * @param {Boolean} preventMove
+ */
+ this.setSizeX = function(columns, preventMove) {
+ return this.setSize('X', columns, preventMove);
+ };
+
+ /**
+ * Sets an elements position on the page
+ */
+ this.setElementPosition = function() {
+ if (this.gridster.isMobile) {
+ this.$element.css({
+ marginLeft: this.gridster.margins[0] + 'px',
+ marginRight: this.gridster.margins[0] + 'px',
+ marginTop: this.gridster.margins[1] + 'px',
+ marginBottom: this.gridster.margins[1] + 'px',
+ top: '',
+ left: ''
+ });
+ } else {
+ this.$element.css({
+ margin: 0,
+ top: (this.row * this.gridster.curRowHeight + (this.gridster.outerMargin ? this.gridster.margins[0] : 0)) + 'px',
+ left: (this.col * this.gridster.curColWidth + (this.gridster.outerMargin ? this.gridster.margins[1] : 0)) + 'px'
+ });
+ }
+ };
+
+ /**
+ * Sets an elements height
+ */
+ this.setElementSizeY = function() {
+ if (this.gridster.isMobile && !this.gridster.saveGridItemCalculatedHeightInMobile) {
+ this.$element.css('height', '');
+ } else {
+ var computedHeight = (this.sizeY * this.gridster.curRowHeight - this.gridster.margins[0]) + 'px';
+ //this.$element.css('height', computedHeight);
+ this.$element.attr('style', this.$element.attr('style') + '; ' + 'height: '+computedHeight+' !important;');
+ }
+ };
+
+ /**
+ * Sets an elements width
+ */
+ this.setElementSizeX = function() {
+ if (this.gridster.isMobile) {
+ this.$element.css('width', '');
+ } else {
+ this.$element.css('width', (this.sizeX * this.gridster.curColWidth - this.gridster.margins[1]) + 'px');
+ }
+ };
+
+ /**
+ * Gets an element's width
+ */
+ this.getElementSizeX = function() {
+ return (this.sizeX * this.gridster.curColWidth - this.gridster.margins[1]);
+ };
+
+ /**
+ * Gets an element's height
+ */
+ this.getElementSizeY = function() {
+ return (this.sizeY * this.gridster.curRowHeight - this.gridster.margins[0]);
+ };
+
+ })
+
+ .factory('GridsterTouch', [function() {
+ return function GridsterTouch(target, startEvent, moveEvent, endEvent) {
+ var lastXYById = {};
+
+ // Opera doesn't have Object.keys so we use this wrapper
+ var numberOfKeys = function(theObject) {
+ if (Object.keys) {
+ return Object.keys(theObject).length;
+ }
+
+ var n = 0,
+ key;
+ for (key in theObject) {
+ ++n;
+ }
+
+ return n;
+ };
+
+ // this calculates the delta needed to convert pageX/Y to offsetX/Y because offsetX/Y don't exist in the TouchEvent object or in Firefox's MouseEvent object
+ var computeDocumentToElementDelta = function(theElement) {
+ var elementLeft = 0;
+ var elementTop = 0;
+ var oldIEUserAgent = navigator.userAgent.match(/\bMSIE\b/);
+
+ for (var offsetElement = theElement; offsetElement != null; offsetElement = offsetElement.offsetParent) {
+ // the following is a major hack for versions of IE less than 8 to avoid an apparent problem on the IEBlog with double-counting the offsets
+ // this may not be a general solution to IE7's problem with offsetLeft/offsetParent
+ if (oldIEUserAgent &&
+ (!document.documentMode || document.documentMode < 8) &&
+ offsetElement.currentStyle.position === 'relative' && offsetElement.offsetParent && offsetElement.offsetParent.currentStyle.position === 'relative' && offsetElement.offsetLeft === offsetElement.offsetParent.offsetLeft) {
+ // add only the top
+ elementTop += offsetElement.offsetTop;
+ } else {
+ elementLeft += offsetElement.offsetLeft;
+ elementTop += offsetElement.offsetTop;
+ }
+ }
+
+ return {
+ x: elementLeft,
+ y: elementTop
+ };
+ };
+
+ // cache the delta from the document to our event target (reinitialized each mousedown/MSPointerDown/touchstart)
+ var documentToTargetDelta = computeDocumentToElementDelta(target);
+
+ // common event handler for the mouse/pointer/touch models and their down/start, move, up/end, and cancel events
+ var doEvent = function(theEvtObj) {
+
+ if (theEvtObj.type === 'mousemove' && numberOfKeys(lastXYById) === 0) {
+ return;
+ }
+
+ var prevent = true;
+
+ var pointerList = theEvtObj.changedTouches ? theEvtObj.changedTouches : [theEvtObj];
+
+ for (var i = 0; i < pointerList.length; ++i) {
+ var pointerObj = pointerList[i];
+ var pointerId = (typeof pointerObj.identifier !== 'undefined') ? pointerObj.identifier : (typeof pointerObj.pointerId !== 'undefined') ? pointerObj.pointerId : 1;
+
+ // use the pageX/Y coordinates to compute target-relative coordinates when we have them (in ie < 9, we need to do a little work to put them there)
+ if (typeof pointerObj.pageX === 'undefined') {
+
+ // initialize assuming our source element is our target
+ if(!ie8){
+ pointerObj.pageX = pointerObj.offsetX + documentToTargetDelta.x;
+ pointerObj.pageY = pointerObj.offsetY + documentToTargetDelta.y;
+ }
+ else{
+ pointerObj.pageX = pointerObj.clientX;
+ pointerObj.pageY = pointerObj.clientY;
+ }
+
+ if (pointerObj.srcElement.offsetParent === target && document.documentMode && document.documentMode === 8 && pointerObj.type === 'mousedown') {
+ // source element is a child piece of VML, we're in IE8, and we've not called setCapture yet - add the origin of the source element
+ pointerObj.pageX += pointerObj.srcElement.offsetLeft;
+ pointerObj.pageY += pointerObj.srcElement.offsetTop;
+ } else if (pointerObj.srcElement !== target && !document.documentMode || document.documentMode < 8) {
+ // source element isn't the target (most likely it's a child piece of VML) and we're in a version of IE before IE8 -
+ // the offsetX/Y values are unpredictable so use the clientX/Y values and adjust by the scroll offsets of its parents
+ // to get the document-relative coordinates (the same as pageX/Y)
+ var sx = -2,
+ sy = -2; // adjust for old IE's 2-pixel border
+ for (var scrollElement = pointerObj.srcElement; scrollElement !== null; scrollElement = scrollElement.parentNode) {
+ sx += scrollElement.scrollLeft ? scrollElement.scrollLeft : 0;
+ sy += scrollElement.scrollTop ? scrollElement.scrollTop : 0;
+ }
+
+ pointerObj.pageX = pointerObj.clientX + sx;
+ pointerObj.pageY = pointerObj.clientY + sy;
+ }
+ }
+
+
+ var pageX = pointerObj.pageX;
+ var pageY = pointerObj.pageY;
+
+ if (theEvtObj.type.match(/(start|down)$/i)) {
+ // clause for processing MSPointerDown, touchstart, and mousedown
+
+ // refresh the document-to-target delta on start in case the target has moved relative to document
+ documentToTargetDelta = computeDocumentToElementDelta(target);
+
+ // protect against failing to get an up or end on this pointerId
+ if (lastXYById[pointerId]) {
+ if (endEvent) {
+ endEvent({
+ target: theEvtObj.target,
+ which: theEvtObj.which,
+ pointerId: pointerId,
+ pageX: pageX,
+ pageY: pageY
+ });
+ }
+
+ delete lastXYById[pointerId];
+ }
+
+ if (startEvent) {
+ if (prevent) {
+ prevent = startEvent({
+ target: theEvtObj.target,
+ which: theEvtObj.which,
+ pointerId: pointerId,
+ pageX: pageX,
+ pageY: pageY
+ });
+ }
+ }
+
+ // init last page positions for this pointer
+ lastXYById[pointerId] = {
+ x: pageX,
+ y: pageY
+ };
+
+ // IE pointer model
+ if (target.msSetPointerCapture) {
+ target.msSetPointerCapture(pointerId);
+ } else if (theEvtObj.type === 'mousedown' && numberOfKeys(lastXYById) === 1) {
+ if (useSetReleaseCapture) {
+ target.setCapture(true);
+ } else {
+ document.addEventListener('mousemove', doEvent, false);
+ document.addEventListener('mouseup', doEvent, false);
+ }
+ }
+ } else if (theEvtObj.type.match(/move$/i)) {
+ // clause handles mousemove, MSPointerMove, and touchmove
+
+ if (lastXYById[pointerId] && !(lastXYById[pointerId].x === pageX && lastXYById[pointerId].y === pageY)) {
+ // only extend if the pointer is down and it's not the same as the last point
+
+ if (moveEvent && prevent) {
+ prevent = moveEvent({
+ target: theEvtObj.target,
+ which: theEvtObj.which,
+ pointerId: pointerId,
+ pageX: pageX,
+ pageY: pageY
+ });
+ }
+
+ // update last page positions for this pointer
+ lastXYById[pointerId].x = pageX;
+ lastXYById[pointerId].y = pageY;
+ }
+ } else if (lastXYById[pointerId] && theEvtObj.type.match(/(up|end|cancel)$/i)) {
+ // clause handles up/end/cancel
+
+ if (endEvent && prevent) {
+ prevent = endEvent({
+ target: theEvtObj.target,
+ which: theEvtObj.which,
+ pointerId: pointerId,
+ pageX: pageX,
+ pageY: pageY
+ });
+ }
+
+ // delete last page positions for this pointer
+ delete lastXYById[pointerId];
+
+ // in the Microsoft pointer model, release the capture for this pointer
+ // in the mouse model, release the capture or remove document-level event handlers if there are no down points
+ // nothing is required for the iOS touch model because capture is implied on touchstart
+ if (target.msReleasePointerCapture) {
+ target.msReleasePointerCapture(pointerId);
+ } else if (theEvtObj.type === 'mouseup' && numberOfKeys(lastXYById) === 0) {
+ if (useSetReleaseCapture) {
+ target.releaseCapture();
+ } else {
+ document.removeEventListener('mousemove', doEvent, false);
+ document.removeEventListener('mouseup', doEvent, false);
+ }
+ }
+ }
+ }
+
+ if (prevent) {
+ if (theEvtObj.preventDefault) {
+ theEvtObj.preventDefault();
+ }
+
+ if (theEvtObj.preventManipulation) {
+ theEvtObj.preventManipulation();
+ }
+
+ if (theEvtObj.preventMouseEvent) {
+ theEvtObj.preventMouseEvent();
+ }
+ }
+ };
+
+ var useSetReleaseCapture = false;
+ // saving the settings for contentZooming and touchaction before activation
+ var contentZooming, msTouchAction;
+
+ this.enable = function() {
+
+ if (window.navigator.msPointerEnabled) {
+ // Microsoft pointer model
+ target.addEventListener('MSPointerDown', doEvent, false);
+ target.addEventListener('MSPointerMove', doEvent, false);
+ target.addEventListener('MSPointerUp', doEvent, false);
+ target.addEventListener('MSPointerCancel', doEvent, false);
+
+ // css way to prevent panning in our target area
+ if (typeof target.style.msContentZooming !== 'undefined') {
+ contentZooming = target.style.msContentZooming;
+ target.style.msContentZooming = 'none';
+ }
+
+ // new in Windows Consumer Preview: css way to prevent all built-in touch actions on our target
+ // without this, you cannot touch draw on the element because IE will intercept the touch events
+ if (typeof target.style.msTouchAction !== 'undefined') {
+ msTouchAction = target.style.msTouchAction;
+ target.style.msTouchAction = 'none';
+ }
+ } else if (target.addEventListener) {
+ // iOS touch model
+ target.addEventListener('touchstart', doEvent, false);
+ target.addEventListener('touchmove', doEvent, false);
+ target.addEventListener('touchend', doEvent, false);
+ target.addEventListener('touchcancel', doEvent, false);
+
+ // mouse model
+ target.addEventListener('mousedown', doEvent, false);
+
+ // mouse model with capture
+ // rejecting gecko because, unlike ie, firefox does not send events to target when the mouse is outside target
+ if (target.setCapture && !window.navigator.userAgent.match(/\bGecko\b/)) {
+ useSetReleaseCapture = true;
+
+ target.addEventListener('mousemove', doEvent, false);
+ target.addEventListener('mouseup', doEvent, false);
+ }
+ } else if (target.attachEvent && target.setCapture) {
+ // legacy IE mode - mouse with capture
+ useSetReleaseCapture = true;
+ target.attachEvent('onmousedown', function() {
+ doEvent(window.event);
+ window.event.returnValue = false;
+ return false;
+ });
+ target.attachEvent('onmousemove', function() {
+ doEvent(window.event);
+ window.event.returnValue = false;
+ return false;
+ });
+ target.attachEvent('onmouseup', function() {
+ doEvent(window.event);
+ window.event.returnValue = false;
+ return false;
+ });
+ }
+ };
+
+ this.disable = function() {
+ if (window.navigator.msPointerEnabled) {
+ // Microsoft pointer model
+ target.removeEventListener('MSPointerDown', doEvent, false);
+ target.removeEventListener('MSPointerMove', doEvent, false);
+ target.removeEventListener('MSPointerUp', doEvent, false);
+ target.removeEventListener('MSPointerCancel', doEvent, false);
+
+ // reset zooming to saved value
+ if (contentZooming) {
+ target.style.msContentZooming = contentZooming;
+ }
+
+ // reset touch action setting
+ if (msTouchAction) {
+ target.style.msTouchAction = msTouchAction;
+ }
+ } else if (target.removeEventListener) {
+ // iOS touch model
+ target.removeEventListener('touchstart', doEvent, false);
+ target.removeEventListener('touchmove', doEvent, false);
+ target.removeEventListener('touchend', doEvent, false);
+ target.removeEventListener('touchcancel', doEvent, false);
+
+ // mouse model
+ target.removeEventListener('mousedown', doEvent, false);
+
+ // mouse model with capture
+ // rejecting gecko because, unlike ie, firefox does not send events to target when the mouse is outside target
+ if (target.setCapture && !window.navigator.userAgent.match(/\bGecko\b/)) {
+ useSetReleaseCapture = true;
+
+ target.removeEventListener('mousemove', doEvent, false);
+ target.removeEventListener('mouseup', doEvent, false);
+ }
+ } else if (target.detachEvent && target.setCapture) {
+ // legacy IE mode - mouse with capture
+ useSetReleaseCapture = true;
+ target.detachEvent('onmousedown');
+ target.detachEvent('onmousemove');
+ target.detachEvent('onmouseup');
+ }
+ };
+
+ return this;
+ };
+ }])
+
+ .factory('GridsterDraggable', ['$document', '$timeout', '$window', 'GridsterTouch',
+ function($document, $timeout, $window, GridsterTouch) {
+ function GridsterDraggable($el, scope, gridster, item, itemOptions) {
+
+ var elmX, elmY, elmW, elmH,
+
+ mouseX = 0,
+ mouseY = 0,
+ lastMouseX = 0,
+ lastMouseY = 0,
+ mOffX = 0,
+ mOffY = 0,
+
+ minTop = 0,
+ maxTop = 9999,
+ minLeft = 0,
+ realdocument = $document[0];
+
+ var originalCol, originalRow;
+ var inputTags = ['select', 'input', 'textarea', 'button'];
+
+ var gridsterItemDragElement = $el[0].querySelector('[gridster-item-drag]');
+ //console.log(gridsterItemDragElement);
+ var isDraggableAreaDefined = gridsterItemDragElement?true:false;
+ //console.log(isDraggableAreaDefined);
+
+ function mouseDown(e) {
+
+ if(ie8){
+ e.target = window.event.srcElement;
+ e.which = window.event.button;
+ }
+
+ if(isDraggableAreaDefined && (!gridsterItemDragElement.contains(e.target))){
+ return false;
+ }
+
+ if (inputTags.indexOf(e.target.nodeName.toLowerCase()) !== -1) {
+ return false;
+ }
+
+ var $target = angular.element(e.target);
+
+ // exit, if a resize handle was hit
+ if ($target.hasClass('gridster-item-resizable-handler')) {
+ return false;
+ }
+
+ // exit, if the target has it's own click event
+ if ($target.attr('onclick') || $target.attr('ng-click')) {
+ return false;
+ }
+
+ // only works if you have jQuery
+ if ($target.closest && $target.closest('.gridster-no-drag').length) {
+ return false;
+ }
+
+ switch (e.which) {
+ case 1:
+ // left mouse button
+ break;
+ case 2:
+ case 3:
+ // right or middle mouse button
+ return;
+ }
+
+ lastMouseX = e.pageX;
+ lastMouseY = e.pageY;
+
+ elmX = parseInt($el.css('left'), 10);
+ elmY = parseInt($el.css('top'), 10);
+ elmW = $el[0].offsetWidth;
+ elmH = $el[0].offsetHeight;
+
+ originalCol = item.col;
+ originalRow = item.row;
+
+ dragStart(e);
+
+ return true;
+ }
+
+ function mouseMove(e) {
+ if (!$el.hasClass('gridster-item-moving') || $el.hasClass('gridster-item-resizing')) {
+ return false;
+ }
+
+ var maxLeft = gridster.curWidth - 1;
+
+ // Get the current mouse position.
+ mouseX = e.pageX;
+ mouseY = e.pageY;
+
+ // Get the deltas
+ var diffX = mouseX - lastMouseX + mOffX;
+ var diffY = mouseY - lastMouseY + mOffY;
+ mOffX = mOffY = 0;
+
+ // Update last processed mouse positions.
+ lastMouseX = mouseX;
+ lastMouseY = mouseY;
+
+ var dX = diffX,
+ dY = diffY;
+ if (elmX + dX < minLeft) {
+ diffX = minLeft - elmX;
+ mOffX = dX - diffX;
+ } else if (elmX + elmW + dX > maxLeft) {
+ diffX = maxLeft - elmX - elmW;
+ mOffX = dX - diffX;
+ }
+
+ if (elmY + dY < minTop) {
+ diffY = minTop - elmY;
+ mOffY = dY - diffY;
+ } else if (elmY + elmH + dY > maxTop) {
+ diffY = maxTop - elmY - elmH;
+ mOffY = dY - diffY;
+ }
+ elmX += diffX;
+ elmY += diffY;
+
+ // set new position
+ $el.css({
+ 'top': elmY + 'px',
+ 'left': elmX + 'px'
+ });
+
+ drag(e);
+
+ return true;
+ }
+
+ function mouseUp(e) {
+ if (!$el.hasClass('gridster-item-moving') || $el.hasClass('gridster-item-resizing')) {
+ return false;
+ }
+
+ mOffX = mOffY = 0;
+
+ dragStop(e);
+
+ return true;
+ }
+
+ function dragStart(event) {
+ $el.addClass('gridster-item-moving');
+ gridster.movingItem = item;
+
+ gridster.updateHeight(item.sizeY);
+ scope.$apply(function() {
+ if (gridster.draggable && gridster.draggable.start) {
+ gridster.draggable.start(event, $el, itemOptions);
+ }
+ });
+ }
+
+ function drag(event) {
+ var oldRow = item.row,
+ oldCol = item.col,
+ hasCallback = gridster.draggable && gridster.draggable.drag,
+ scrollSensitivity = gridster.draggable.scrollSensitivity,
+ scrollSpeed = gridster.draggable.scrollSpeed;
+
+ var row = gridster.pixelsToRows(elmY);
+ var col = gridster.pixelsToColumns(elmX);
+
+ var itemsInTheWay = gridster.getItems(row, col, item.sizeX, item.sizeY, item);
+ var hasItemsInTheWay = itemsInTheWay.length !== 0;
+
+ if (gridster.swapping === true && hasItemsInTheWay) {
+ var boundingBoxItem = gridster.getBoundingBox(itemsInTheWay),
+ sameSize = boundingBoxItem.sizeX === item.sizeX && boundingBoxItem.sizeY === item.sizeY,
+ sameRow = boundingBoxItem.row === oldRow,
+ sameCol = boundingBoxItem.col === oldCol,
+ samePosition = boundingBoxItem.row === row && boundingBoxItem.col === col,
+ inline = sameRow || sameCol;
+
+ if (sameSize && itemsInTheWay.length === 1) {
+ if (samePosition) {
+ gridster.swapItems(item, itemsInTheWay[0]);
+ } else if (inline) {
+ return;
+ }
+ } else if (boundingBoxItem.sizeX <= item.sizeX && boundingBoxItem.sizeY <= item.sizeY && inline) {
+ var emptyRow = item.row <= row ? item.row : row + item.sizeY,
+ emptyCol = item.col <= col ? item.col : col + item.sizeX,
+ rowOffset = emptyRow - boundingBoxItem.row,
+ colOffset = emptyCol - boundingBoxItem.col;
+
+ for (var i = 0, l = itemsInTheWay.length; i < l; ++i) {
+ var itemInTheWay = itemsInTheWay[i];
+
+ var itemsInFreeSpace = gridster.getItems(
+ itemInTheWay.row + rowOffset,
+ itemInTheWay.col + colOffset,
+ itemInTheWay.sizeX,
+ itemInTheWay.sizeY,
+ item
+ );
+
+ if (itemsInFreeSpace.length === 0) {
+ gridster.putItem(itemInTheWay, itemInTheWay.row + rowOffset, itemInTheWay.col + colOffset);
+ }
+ }
+ }
+ }
+
+ if (gridster.pushing !== false || !hasItemsInTheWay) {
+ item.row = row;
+ item.col = col;
+ }
+
+ if(($window.navigator.appName === 'Microsoft Internet Explorer' && !ie8) || $window.navigator.userAgent.indexOf("Firefox")!==-1){
+ if (event.pageY - realdocument.documentElement.scrollTop < scrollSensitivity) {
+ realdocument.documentElement.scrollTop = realdocument.documentElement.scrollTop - scrollSpeed;
+ } else if ($window.innerHeight - (event.pageY - realdocument.documentElement.scrollTop) < scrollSensitivity) {
+ realdocument.documentElement.scrollTop = realdocument.documentElement.scrollTop + scrollSpeed;
+ }
+ }
+ else{
+ if (event.pageY - realdocument.body.scrollTop < scrollSensitivity) {
+ realdocument.body.scrollTop = realdocument.body.scrollTop - scrollSpeed;
+ } else if ($window.innerHeight - (event.pageY - realdocument.body.scrollTop) < scrollSensitivity) {
+ realdocument.body.scrollTop = realdocument.body.scrollTop + scrollSpeed;
+ }
+ }
+
+
+
+ if (event.pageX - realdocument.body.scrollLeft < scrollSensitivity) {
+ realdocument.body.scrollLeft = realdocument.body.scrollLeft - scrollSpeed;
+ } else if ($window.innerWidth - (event.pageX - realdocument.body.scrollLeft) < scrollSensitivity) {
+ realdocument.body.scrollLeft = realdocument.body.scrollLeft + scrollSpeed;
+ }
+
+ if (hasCallback || oldRow !== item.row || oldCol !== item.col) {
+ scope.$apply(function() {
+ if (hasCallback) {
+ gridster.draggable.drag(event, $el, itemOptions);
+ }
+ });
+ }
+ }
+
+ function dragStop(event) {
+ $el.removeClass('gridster-item-moving');
+ var row = gridster.pixelsToRows(elmY);
+ var col = gridster.pixelsToColumns(elmX);
+ if (gridster.pushing !== false || gridster.getItems(row, col, item.sizeX, item.sizeY, item).length === 0) {
+ item.row = row;
+ item.col = col;
+ }
+ gridster.movingItem = null;
+ item.setPosition(item.row, item.col);
+
+ scope.$apply(function() {
+ if (gridster.draggable && gridster.draggable.stop) {
+ gridster.draggable.stop(event, $el, itemOptions);
+ }
+ });
+ }
+
+ var enabled = null;
+ var $dragHandles = null;
+ var unifiedInputs = [];
+
+ this.enable = function() {
+ if (enabled === true) {
+ return;
+ }
+
+ // disable and timeout required for some template rendering
+ $timeout(function() {
+ // disable any existing draghandles
+ for (var u = 0, ul = unifiedInputs.length; u < ul; ++u) {
+ unifiedInputs[u].disable();
+ }
+ unifiedInputs = [];
+
+ if (gridster.draggable && gridster.draggable.handle) {
+ $dragHandles = angular.element($el[0].querySelectorAll(gridster.draggable.handle));
+ if ($dragHandles.length === 0) {
+ // fall back to element if handle not found...
+ $dragHandles = $el;
+ }
+ } else {
+ $dragHandles = $el;
+ }
+
+ for (var h = 0, hl = $dragHandles.length; h < hl; ++h) {
+ unifiedInputs[h] = new GridsterTouch($dragHandles[h], mouseDown, mouseMove, mouseUp);
+ unifiedInputs[h].enable();
+ }
+
+ enabled = true;
+ });
+ };
+
+ this.disable = function() {
+ if (enabled === false) {
+ return;
+ }
+
+ // timeout to avoid race contition with the enable timeout
+ $timeout(function() {
+
+ for (var u = 0, ul = unifiedInputs.length; u < ul; ++u) {
+ unifiedInputs[u].disable();
+ }
+
+ unifiedInputs = [];
+ enabled = false;
+ });
+ };
+
+ this.toggle = function(enabled) {
+ if (enabled) {
+ this.enable();
+ } else {
+ this.disable();
+ }
+ };
+
+ this.destroy = function() {
+ this.disable();
+ };
+ }
+
+ return GridsterDraggable;
+ }
+ ])
+
+ .factory('GridsterResizable', ['GridsterTouch', function(GridsterTouch) {
+ function GridsterResizable($el, scope, gridster, item, itemOptions) {
+
+ function ResizeHandle(handleClass) {
+
+ var hClass = handleClass;
+
+ var elmX, elmY, elmW, elmH,
+
+ mouseX = 0,
+ mouseY = 0,
+ lastMouseX = 0,
+ lastMouseY = 0,
+ mOffX = 0,
+ mOffY = 0,
+
+ minTop = 0,
+ maxTop = 9999,
+ minLeft = 0;
+
+ var getMinHeight = function() {
+ return (item.minSizeY ? item.minSizeY : 1) * gridster.curRowHeight - gridster.margins[0];
+ };
+ var getMinWidth = function() {
+ return (item.minSizeX ? item.minSizeX : 1) * gridster.curColWidth - gridster.margins[1];
+ };
+
+ var originalWidth, originalHeight;
+ var savedDraggable;
+
+ function mouseDown(e) {
+ switch (e.which) {
+ case 1:
+ // left mouse button
+ break;
+ case 2:
+ case 3:
+ // right or middle mouse button
+ return;
+ }
+
+ // save the draggable setting to restore after resize
+ savedDraggable = gridster.draggable.enabled;
+ if (savedDraggable) {
+ gridster.draggable.enabled = false;
+ scope.$broadcast('gridster-draggable-changed', gridster);
+ }
+
+ // Get the current mouse position.
+ lastMouseX = e.pageX;
+ lastMouseY = e.pageY;
+
+ // Record current widget dimensions
+ elmX = parseInt($el.css('left'), 10);
+ elmY = parseInt($el.css('top'), 10);
+ elmW = $el[0].offsetWidth;
+ elmH = $el[0].offsetHeight;
+
+ originalWidth = item.sizeX;
+ originalHeight = item.sizeY;
+
+ resizeStart(e);
+
+ return true;
+ }
+
+ function resizeStart(e) {
+ $el.addClass('gridster-item-moving');
+ $el.addClass('gridster-item-resizing');
+
+ gridster.movingItem = item;
+
+ item.setElementSizeX();
+ item.setElementSizeY();
+ item.setElementPosition();
+ gridster.updateHeight(1);
+
+ scope.$apply(function() {
+ // callback
+ if (gridster.resizable && gridster.resizable.start) {
+ gridster.resizable.start(e, $el, itemOptions); // options is the item model
+ }
+ });
+ }
+
+ function mouseMove(e) {
+ var maxLeft = gridster.curWidth - 1;
+
+ // Get the current mouse position.
+ mouseX = e.pageX;
+ mouseY = e.pageY;
+
+ // Get the deltas
+ var diffX = mouseX - lastMouseX + mOffX;
+ var diffY = mouseY - lastMouseY + mOffY;
+ mOffX = mOffY = 0;
+
+ // Update last processed mouse positions.
+ lastMouseX = mouseX;
+ lastMouseY = mouseY;
+
+ var dY = diffY,
+ dX = diffX;
+
+ if (hClass.indexOf('n') >= 0) {
+ if (elmH - dY < getMinHeight()) {
+ diffY = elmH - getMinHeight();
+ mOffY = dY - diffY;
+ } else if (elmY + dY < minTop) {
+ diffY = minTop - elmY;
+ mOffY = dY - diffY;
+ }
+ elmY += diffY;
+ elmH -= diffY;
+ }
+ if (hClass.indexOf('s') >= 0) {
+ if (elmH + dY < getMinHeight()) {
+ diffY = getMinHeight() - elmH;
+ mOffY = dY - diffY;
+ } else if (elmY + elmH + dY > maxTop) {
+ diffY = maxTop - elmY - elmH;
+ mOffY = dY - diffY;
+ }
+ elmH += diffY;
+ }
+ if (hClass.indexOf('w') >= 0) {
+ if (elmW - dX < getMinWidth()) {
+ diffX = elmW - getMinWidth();
+ mOffX = dX - diffX;
+ } else if (elmX + dX < minLeft) {
+ diffX = minLeft - elmX;
+ mOffX = dX - diffX;
+ }
+ elmX += diffX;
+ elmW -= diffX;
+ }
+ if (hClass.indexOf('e') >= 0) {
+ if (elmW + dX < getMinWidth()) {
+ diffX = getMinWidth() - elmW;
+ mOffX = dX - diffX;
+ } else if (elmX + elmW + dX > maxLeft) {
+ diffX = maxLeft - elmX - elmW;
+ mOffX = dX - diffX;
+ }
+ elmW += diffX;
+ }
+
+ // set new position
+ $el.css({
+ 'top': elmY + 'px',
+ 'left': elmX + 'px',
+ 'width': elmW + 'px',
+ 'height': elmH + 'px'
+ });
+
+ resize(e);
+
+ return true;
+ }
+
+ function mouseUp(e) {
+ // restore draggable setting to its original state
+ if (gridster.draggable.enabled !== savedDraggable) {
+ gridster.draggable.enabled = savedDraggable;
+ scope.$broadcast('gridster-draggable-changed', gridster);
+ }
+
+ mOffX = mOffY = 0;
+
+ resizeStop(e);
+
+ return true;
+ }
+
+ function resize(e) {
+ var oldRow = item.row,
+ oldCol = item.col,
+ oldSizeX = item.sizeX,
+ oldSizeY = item.sizeY,
+ hasCallback = gridster.resizable && gridster.resizable.resize;
+
+ var col = item.col;
+ // only change column if grabbing left edge
+ if (['w', 'nw', 'sw'].indexOf(handleClass) !== -1) {
+ col = gridster.pixelsToColumns(elmX, false);
+ }
+
+ var row = item.row;
+ // only change row if grabbing top edge
+ if (['n', 'ne', 'nw'].indexOf(handleClass) !== -1) {
+ row = gridster.pixelsToRows(elmY, false);
+ }
+
+ var sizeX = item.sizeX;
+ // only change row if grabbing left or right edge
+ if (['n', 's'].indexOf(handleClass) === -1) {
+ sizeX = gridster.pixelsToColumns(elmW, true);
+ }
+
+ var sizeY = item.sizeY;
+ // only change row if grabbing top or bottom edge
+ if (['e', 'w'].indexOf(handleClass) === -1) {
+ sizeY = gridster.pixelsToRows(elmH, true);
+ }
+
+ if (gridster.pushing !== false || gridster.getItems(row, col, sizeX, sizeY, item).length === 0) {
+ item.row = row;
+ item.col = col;
+ item.sizeX = sizeX;
+ item.sizeY = sizeY;
+ }
+ var isChanged = item.row !== oldRow || item.col !== oldCol || item.sizeX !== oldSizeX || item.sizeY !== oldSizeY;
+
+ if (hasCallback || isChanged) {
+ scope.$apply(function() {
+ if (hasCallback) {
+ gridster.resizable.resize(e, $el, itemOptions); // options is the item model
+ }
+ });
+ }
+ }
+
+ function resizeStop(e) {
+ $el.removeClass('gridster-item-moving');
+ $el.removeClass('gridster-item-resizing');
+
+ gridster.movingItem = null;
+
+ item.setPosition(item.row, item.col);
+ item.setSizeY(item.sizeY);
+ item.setSizeX(item.sizeX);
+
+ scope.$apply(function() {
+ if (gridster.resizable && gridster.resizable.stop) {
+ gridster.resizable.stop(e, $el, itemOptions); // options is the item model
+ }
+ });
+ }
+
+ var $dragHandle = null;
+ var unifiedInput;
+
+ this.enable = function() {
+ if (!$dragHandle) {
+ $dragHandle = angular.element('<div class="gridster-item-resizable-handler handle-' + hClass + '"></div>');
+ $el.append($dragHandle);
+ }
+
+ unifiedInput = new GridsterTouch($dragHandle[0], mouseDown, mouseMove, mouseUp);
+ unifiedInput.enable();
+ };
+
+ this.disable = function() {
+ if ($dragHandle) {
+ $dragHandle.remove();
+ $dragHandle = null;
+ }
+
+ unifiedInput.disable();
+ unifiedInput = undefined;
+ };
+
+ this.destroy = function() {
+ this.disable();
+ };
+ }
+
+ var handles = [];
+ var handlesOpts = gridster.resizable.handles;
+ if (typeof handlesOpts === 'string') {
+ handlesOpts = gridster.resizable.handles.split(',');
+ }
+ var enabled = false;
+
+ for (var c = 0, l = handlesOpts.length; c < l; c++) {
+ handles.push(new ResizeHandle(handlesOpts[c]));
+ }
+
+ this.enable = function() {
+ if (enabled) {
+ return;
+ }
+ for (var c = 0, l = handles.length; c < l; c++) {
+ handles[c].enable();
+ }
+ enabled = true;
+ };
+
+ this.disable = function() {
+ if (!enabled) {
+ return;
+ }
+ for (var c = 0, l = handles.length; c < l; c++) {
+ handles[c].disable();
+ }
+ enabled = false;
+ };
+
+ this.toggle = function(enabled) {
+ if (enabled) {
+ this.enable();
+ } else {
+ this.disable();
+ }
+ };
+
+ this.destroy = function() {
+ for (var c = 0, l = handles.length; c < l; c++) {
+ handles[c].destroy();
+ }
+ };
+ }
+ return GridsterResizable;
+ }])
+
+ .factory('gridsterDebounce', function() {
+ return function gridsterDebounce(func, wait, immediate) {
+ var timeout;
+ return function() {
+ var context = this,
+ args = arguments;
+ var later = function() {
+ timeout = null;
+ if (!immediate) {
+ func.apply(context, args);
+ }
+ };
+ var callNow = immediate && !timeout;
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ if (callNow) {
+ func.apply(context, args);
+ }
+ };
+ };
+ })
+
+ /**
+ * GridsterItem directive
+ * @param $parse
+ * @param GridsterDraggable
+ * @param GridsterResizable
+ * @param gridsterDebounce
+ */
+ .directive('gridsterItem', ['$parse', 'GridsterDraggable', 'GridsterResizable', 'gridsterDebounce',
+ function($parse, GridsterDraggable, GridsterResizable, gridsterDebounce) {
+ return {
+ scope: true,
+ restrict: 'EA',
+ controller: 'GridsterItemCtrl',
+ controllerAs: 'gridsterItem',
+ require: ['^gridster', 'gridsterItem'],
+ link: function(scope, $el, attrs, controllers) {
+ var optionsKey = attrs.gridsterItem,
+ options;
+
+ var gridster = controllers[0],
+ item = controllers[1];
+
+ scope.gridster = gridster;
+
+
+ // bind the item's position properties
+ // options can be an object specified by gridster-item="object"
+ // or the options can be the element html attributes object
+ if (optionsKey) {
+ var $optionsGetter = $parse(optionsKey);
+ options = $optionsGetter(scope) || {};
+ if (!options && $optionsGetter.assign) {
+ options = {
+ row: item.row,
+ col: item.col,
+ sizeX: item.sizeX,
+ sizeY: item.sizeY,
+ minSizeX: 0,
+ minSizeY: 0,
+ maxSizeX: null,
+ maxSizeY: null
+ };
+ $optionsGetter.assign(scope, options);
+ }
+ } else {
+ options = attrs;
+ }
+
+ item.init($el, gridster);
+
+ $el.addClass('gridster-item');
+
+ var aspects = ['minSizeX', 'maxSizeX', 'minSizeY', 'maxSizeY', 'sizeX', 'sizeY', 'row', 'col'],
+ $getters = {};
+
+ var expressions = [];
+ var aspectFn = function(aspect) {
+ var expression;
+ if (typeof options[aspect] === 'string') {
+ // watch the expression in the scope
+ expression = options[aspect];
+ } else if (typeof options[aspect.toLowerCase()] === 'string') {
+ // watch the expression in the scope
+ expression = options[aspect.toLowerCase()];
+ } else if (optionsKey) {
+ // watch the expression on the options object in the scope
+ expression = optionsKey + '.' + aspect;
+ } else {
+ return;
+ }
+ expressions.push('"' + aspect + '":' + expression);
+ $getters[aspect] = $parse(expression);
+
+ // initial set
+ var val = $getters[aspect](scope);
+ if (typeof val === 'number') {
+ item[aspect] = val;
+ }
+ };
+
+ for (var i = 0, l = aspects.length; i < l; ++i) {
+ aspectFn(aspects[i]);
+ }
+
+ var watchExpressions = '{' + expressions.join(',') + '}';
+
+ // when the value changes externally, update the internal item object
+ scope.$watchCollection(watchExpressions, function(newVals, oldVals) {
+ for (var aspect in newVals) {
+ var newVal = newVals[aspect];
+ var oldVal = oldVals[aspect];
+ if (oldVal === newVal) {
+ continue;
+ }
+ newVal = parseInt(newVal, 10);
+ if (!isNaN(newVal)) {
+ item[aspect] = newVal;
+ }
+ }
+ });
+
+ function positionChanged() {
+ // call setPosition so the element and gridster controller are updated
+ item.setPosition(item.row, item.col);
+
+ // when internal item position changes, update externally bound values
+ if ($getters.row && $getters.row.assign) {
+ $getters.row.assign(scope, item.row);
+ }
+ if ($getters.col && $getters.col.assign) {
+ $getters.col.assign(scope, item.col);
+ }
+ }
+ scope.$watch(function() {
+ return item.row + ',' + item.col;
+ }, positionChanged);
+
+ function sizeChanged() {
+ var changedX = item.setSizeX(item.sizeX, true);
+ if (changedX && $getters.sizeX && $getters.sizeX.assign) {
+ $getters.sizeX.assign(scope, item.sizeX);
+ }
+ var changedY = item.setSizeY(item.sizeY, true);
+ if (changedY && $getters.sizeY && $getters.sizeY.assign) {
+ $getters.sizeY.assign(scope, item.sizeY);
+ }
+
+ if (changedX || changedY) {
+ item.gridster.moveOverlappingItems(item);
+ gridster.layoutChanged();
+ scope.$broadcast('gridster-item-resized', item);
+ }
+ }
+
+ scope.$watch(function() {
+ return item.sizeY + ',' + item.sizeX + ',' + item.minSizeX + ',' + item.maxSizeX + ',' + item.minSizeY + ',' + item.maxSizeY;
+ }, sizeChanged);
+
+ var draggable = new GridsterDraggable($el, scope, gridster, item, options);
+ var resizable = new GridsterResizable($el, scope, gridster, item, options);
+
+ var updateResizable = function() {
+ resizable.toggle(!gridster.isMobile && gridster.resizable && gridster.resizable.enabled);
+ };
+ updateResizable();
+
+ var updateDraggable = function() {
+ draggable.toggle(!gridster.isMobile && gridster.draggable && gridster.draggable.enabled);
+ };
+ updateDraggable();
+
+ scope.$on('gridster-draggable-changed', updateDraggable);
+ scope.$on('gridster-resizable-changed', updateResizable);
+ scope.$on('gridster-resized', updateResizable);
+ scope.$on('gridster-mobile-changed', function() {
+ updateResizable();
+ updateDraggable();
+ });
+
+ function whichTransitionEvent() {
+ var el = document.createElement('div');
+ var transitions = {
+ 'transition': 'transitionend',
+ 'OTransition': 'oTransitionEnd',
+ 'MozTransition': 'transitionend',
+ 'WebkitTransition': 'webkitTransitionEnd'
+ };
+ for (var t in transitions) {
+ if (el.style[t] !== undefined) {
+ return transitions[t];
+ }
+ }
+ }
+
+ var debouncedTransitionEndPublisher = gridsterDebounce(function() {
+ scope.$apply(function() {
+ scope.$broadcast('gridster-item-transition-end', item);
+ });
+ }, 50);
+
+ if(whichTransitionEvent()){ //check for IE8, as it evaluates to null
+ $el.on(whichTransitionEvent(), debouncedTransitionEndPublisher);
+ }
+
+ scope.$broadcast('gridster-item-initialized', item);
+
+ return scope.$on('$destroy', function() {
+ try {
+ resizable.destroy();
+ draggable.destroy();
+ } catch (e) {}
+
+ try {
+ gridster.removeItem(item);
+ } catch (e) {}
+
+ try {
+ item.destroy();
+ } catch (e) {}
+ });
+ }
+ };
+ }
+ ])
+
+ .directive('gridsterNoDrag', function() {
+ return {
+ restrict: 'A',
+ link: function(scope, $element) {
+ $element.addClass('gridster-no-drag');
+ }
+ };
+ })
+
+ ;
+
+}));
diff --git a/epsdk-app-onap/src/main/webapp/static/fusion/js/att_angular_gridster/ui-gridster-tpls.js b/epsdk-app-onap/src/main/webapp/static/fusion/js/att_angular_gridster/ui-gridster-tpls.js
new file mode 100755
index 000000000..979b64b84
--- /dev/null
+++ b/epsdk-app-onap/src/main/webapp/static/fusion/js/att_angular_gridster/ui-gridster-tpls.js
@@ -0,0 +1,168 @@
+/**
+* FileName ui-gridster
+* Version 0.0.1
+* Build number ad58c6f4f8f8fd7f04ac457f95d76f09
+* Date 08/17/2015
+*/
+
+
+(function(angular, window){
+angular.module("att.gridster", ["att.gridster.tpls", "att.gridster.utilities","att.gridster.gridster"]);
+angular.module("att.gridster.tpls", ["template/gridster/gridster.html","template/gridster/gridsterItem.html","template/gridster/gridsterItemBody.html","template/gridster/gridsterItemFooter.html","template/gridster/gridsterItemHeader.html"]);
+angular.module('att.gridster.utilities', [])
+ .factory('$extendObj', [function() {
+ var _extendDeep = function(dst) {
+ angular.forEach(arguments, function(obj) {
+ if (obj !== dst) {
+ angular.forEach(obj, function(value, key) {
+ if (dst[key] && dst[key].constructor && dst[key].constructor === Object) {
+ _extendDeep(dst[key], value);
+ } else {
+ dst[key] = value;
+ }
+ });
+ }
+ });
+ return dst;
+ };
+ return {
+ extendDeep: _extendDeep
+ };
+ }]);
+
+angular.module('att.gridster.gridster', ['attGridsterLib', 'att.gridster.utilities'])
+ .config(['$compileProvider', function($compileProvider) {
+ $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|javascript):/);
+ }])
+ .constant('attGridsterConfig',
+ {
+ columns: 3,
+ margins: [10, 10],
+ outerMargin: true,
+ pushing: true,
+ floating: true,
+ swapping: true,
+ draggable: {
+ enabled: true
+ }
+ })
+ .directive('attGridster', ['attGridsterConfig', '$extendObj', function(attGridsterConfig, $extendObj) {
+ return {
+ restrict: 'EA',
+ scope: {
+ attGridsterOptions: '=?'
+ },
+ templateUrl: 'template/gridster/gridster.html',
+ replace: false,
+ transclude: true,
+ controller: [function() {}],
+ link: function(scope) {
+ if (angular.isDefined(scope.attGridsterOptions)) {
+ attGridsterConfig = $extendObj.extendDeep(attGridsterConfig, scope.attGridsterOptions);
+ }
+ scope.attGridsterConfig = attGridsterConfig;
+ }
+ };
+ }])
+ .directive('attGridsterItem', ['$timeout', function($timeout) {
+ return {
+ restrict: 'EA',
+ require: ['^attGridster'],
+ scope: {
+ attGridsterItem: '='
+ },
+ templateUrl: 'template/gridster/gridsterItem.html',
+ replace: false,
+ transclude: true,
+ controller: [function() {}]
+ };
+ }])
+ .directive('attGridsterItemHeader', [function() {
+ return {
+ restrict: 'EA',
+ require: ['^attGridsterItem'],
+ scope: {
+ headerText: '@',
+ subHeaderText: '@?'
+ },
+ templateUrl: 'template/gridster/gridsterItemHeader.html',
+ replace: true,
+ transclude: true,
+ link: function(scope, element) {
+ if (angular.isDefined(scope.subHeaderText) && scope.subHeaderText) {
+ angular.element(element[0].querySelector('span.gridster-item-sub-header-content')).attr("tabindex", "0");
+ angular.element(element[0].querySelector('span.gridster-item-sub-header-content')).attr("aria-label", scope.subHeaderText);
+ }
+ }
+ };
+ }])
+ .directive('attGridsterItemBody', [function() {
+ return {
+ restrict: 'EA',
+ require: ['^attGridsterItem'],
+ scope: {},
+ templateUrl: 'template/gridster/gridsterItemBody.html',
+ replace: true,
+ transclude: true
+ };
+ }])
+ .directive('attGridsterItemFooter', ['$location', function($location) {
+ return {
+ restrict: 'EA',
+ require: ['^attGridsterItem'],
+ scope: {
+ attGridsterItemFooterLink: '@?'
+ },
+ templateUrl: 'template/gridster/gridsterItemFooter.html',
+ replace: true,
+ transclude: true,
+ controller: ['$scope', function($scope) {
+ $scope.clickOnFooterLink = function(evt) {
+ evt.preventDefault();
+ evt.stopPropagation();
+ if ($scope.attGridsterItemFooterLink) {
+ $location.url($scope.attGridsterItemFooterLink);
+ }
+ };
+ }],
+ link: function(scope, element) {
+ if (angular.isDefined(scope.attGridsterItemFooterLink) && scope.attGridsterItemFooterLink) {
+ element.attr("role", "link");
+ }
+ }
+ };
+ }]);
+angular.module("template/gridster/gridster.html", []).run(["$templateCache", function($templateCache) {
+ $templateCache.put("template/gridster/gridster.html",
+ "<div gridster='attGridsterConfig'><div ng-transclude></div></div>");
+}]);
+
+angular.module("template/gridster/gridsterItem.html", []).run(["$templateCache", function($templateCache) {
+ $templateCache.put("template/gridster/gridsterItem.html",
+ "<div gridster-item='attGridsterItem' class=\"gridster-item-container\" ng-transclude></div>");
+}]);
+
+angular.module("template/gridster/gridsterItemBody.html", []).run(["$templateCache", function($templateCache) {
+ $templateCache.put("template/gridster/gridsterItemBody.html",
+ "<div class=\"gridster-item-body\" ng-transclude></div>");
+}]);
+
+angular.module("template/gridster/gridsterItemFooter.html", []).run(["$templateCache", function($templateCache) {
+ $templateCache.put("template/gridster/gridsterItemFooter.html",
+ "<div class=\"gridster-item-footer\" ng-click=\"clickOnFooterLink($event)\" tabindex=\"0\" ng-keydown=\"(($event.keyCode && $event.keyCode === 13) || ($event.which && $event.which === 13)) && clickOnFooterLink($event)\" >\n" +
+ " <span class=\"gridster-item-footer-content\" ng-transclude></span>\n" +
+ "</div>");
+}]);
+
+angular.module("template/gridster/gridsterItemHeader.html", []).run(["$templateCache", function($templateCache) {
+ $templateCache.put("template/gridster/gridsterItemHeader.html",
+ "<div class=\"gridster-item-header\">\n" +
+ " <img gridster-item-drag src=\"static/fusion/images/att_angular_gridster/grips.png\" alt=\"||\" aria-label=\"Tap/Click to move\" class=\"gridster-item-handle\" />\n" +
+ " <span class=\"gridster-item-header-content\" tabindex=\"0\" role=\"presentation\" aria-label=\"{{headerText}}\">{{headerText}}</span>\n" +
+ " <span class=\"gridster-item-sub-header-content\" role=\"presentation\">{{subHeaderText}}</span>\n" +
+ " <div class=\"gridster-item-header-buttons-container\" ng-transclude></div>\n" +
+ "</div>");
+}]);
+
+return {}
+})(angular, window); \ No newline at end of file