http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/css/fonts/glyphicons-halflings-regular.woff ---------------------------------------------------------------------- diff --git a/dashboardv2/public/css/fonts/glyphicons-halflings-regular.woff b/dashboardv2/public/css/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..9e61285 Binary files /dev/null and b/dashboardv2/public/css/fonts/glyphicons-halflings-regular.woff differ
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/css/fonts/glyphicons-halflings-regular.woff2 ---------------------------------------------------------------------- diff --git a/dashboardv2/public/css/fonts/glyphicons-halflings-regular.woff2 b/dashboardv2/public/css/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000..64539b5 Binary files /dev/null and b/dashboardv2/public/css/fonts/glyphicons-halflings-regular.woff2 differ http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/css/login.css ---------------------------------------------------------------------- diff --git a/dashboardv2/public/css/login.css b/dashboardv2/public/css/login.css new file mode 100644 index 0000000..3a88aa9 --- /dev/null +++ b/dashboardv2/public/css/login.css @@ -0,0 +1,157 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +body { + font-family: 'Raleway', sans-serif; + background-color: #f6f7fb; + color: #686868; +} + +a { + color: #359f89; +} + +button:focus { + outline: none !important; +} + + +/* Bootstrap Extended */ + +.form-control:focus { + box-shadow: none; +} + +.errorBox { + position: absolute; + right: 36px; + display: none; + top: 26px; + width: 251px; +} + +.errorBox .alert { + box-shadow: 4px 3px 8px -2px gray; +} + +.close { + padding: 6px; + font-size: 15px; +} + + +/* Login Page */ + +.login-pane { + margin-top: 50px; + background: #323544; + color: #eee; + padding: 15px; + border-radius: 5px; +} + +.login-pane h2 { + margin-bottom: 40px; +} + +.login-pane .input-group { + margin: 20px 0px; +} + +.login-pane .form-control, +.login-pane .input-group-addon { + background-color: transparent; + border-radius: 0px; +} + +.login-pane .form-control { + border-left: none; + color: #eee; +} + +.login-pane .form-control:focus { + border-color: #CCC; +} + +.login-pane .input-group-addon { + border-right: none; + color: #ccc; +} + +.login-pane .form-control:focus + .input-group-addon { + border-color: #66afe9; +} + +.login-pane .btn-atlas { + background-color: #37bb9b; + color: #fff; +} + + +/* Login Page */ + +.login-pane { + margin-top: 35%; + background: #323544; + color: #eee; + padding: 15px; + border-radius: 5px; +} + +.login-pane h2 { + margin-bottom: 40px; +} + +.login-pane .input-group { + margin: 20px 0px; +} + +.login-pane .form-control, +.login-pane .input-group-addon { + background-color: transparent; + border-radius: 0px; +} + +.login-pane .form-control { + border-left: none; + color: #eee; +} + +.login-pane .form-control:focus { + border-color: #CCC; +} + +.login-pane .input-group-addon { + border-right: none; + color: #ccc; +} + +.login-pane .form-control:focus + .input-group-addon { + border-color: #66afe9; +} + +.login-pane .btn-atlas { + padding: 10px 20px; + background-color: #37bb9b; + color: #fff; + border: 1px #37bb9b solid; + border-radius: 4px; + -webkit-transition: all .3s ease; + -moz-transition: all .3s ease; + transition: all .3s ease; +} http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/css/override.css ---------------------------------------------------------------------- diff --git a/dashboardv2/public/css/override.css b/dashboardv2/public/css/override.css new file mode 100644 index 0000000..4c452cc --- /dev/null +++ b/dashboardv2/public/css/override.css @@ -0,0 +1,196 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#old header a.mainLogo { + color: #FFF; + font-size: 16px; + line-height: 40px; + padding: 2px 5px 0 15px; + text-shadow: 0 1px 0 #555; +} + +#old footer.navbar-bottom { + background-color: #fafafa; + border-top: solid 4px #444; + position: absolute; + bottom: 0px; + width: 100%; + height: 60px; +} + +#old .footer { + padding: 7px; +} + +#old .tab a { + color: #000; +} + +#old .backgrid th { + text-align: left; +} + +#old .backgrid a, +#old table a { + color: #428bca; +} + +.backgrid th { + text-transform: capitalize; +} + +#old .fa-refresh { + color: #333; +} + +#old .tagList a { + display: inline-block; + text-transform: capitalize; + background: #ADD8E6 !important; + color: #333 !important; + padding: 3px 6px; + margin: 0px 3px 3px 0px; + cursor: pointer; +} +#old .tagList a i.fa { + margin-left: 5px; +} +/* +#old .tagList a { + max-width: 100px; + display: list-item; + overflow: hidden; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; + white-space: nowrap; + text-transform: capitalize; + float: left; + background: #ADD8E6 !important; + color: #000 !important; + margin: 4px !important; + padding-left: 7px !important; + padding-right: 7px !important; + cursor: pointer; +}*/ + +#new footer { + display: none; +} + +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:focus, +.nav-tabs > li.active > a:hover { + border-width: 0; +} + +.nav-tabs > li > a { + border: none; + color: #666; +} + +.nav-tabs > li.active > a, +.nav-tabs > li > a:hover { + border: none; + color: #359f89 !important; +} + +.nav-tabs > li > a:after { + content: ""; + background: #359f89; + height: 2px; + position: absolute; + width: 100%; + left: 0px; + top: -1px; + transition: all 250ms ease 0s; + transform: scale(0); +} + +.nav-tabs > li > a:hover:after { + background: #359f89; +} + +.nav-tabs > li.active > a:after, +.nav-tabs > li:hover > a:after { + transform: scale(1); +} + +.tab-nav > li > a:after { + background: #21527d none repeat scroll 0% 0%; + color: #fff; +} + +.tab-pane { + padding: 15px 0; +} + +.sidebar-nav .dropdown-menu li { + border-bottom: none; + color: #323544; +} + +.sidebar-nav .dropdown-menu li a:hover, +.sidebar-nav .dropdown-menu li a { + color: #323544; +} + +.sidebar-nav .dropdown-menu li:hover { + background: #E4E4E4; +} + +.sidebar-nav .dropdown-menu:after { + position: absolute; + top: -6px; + left: 10px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + border-left: 6px solid transparent; + content: ''; +} + +.breadcrumb-ellipsis { + color: #359f89; + cursor: pointer; + display: none !important; +} + +.breadcrumb>li:last-child a { + color: #b4b7bc; +} + +.atlas-tag .select2-selection__choice { + padding: 3px 6px !important; + background-color: #4a90e2 !important; + color: #fff !important; + font-size: 12px; + text-transform: uppercase; + border-radius: 4px; +} + +.atlas-tag .select2-selection__choice__remove { + font-size: 17px; + line-height: 14px; + margin: 0px 6px !important; + color: #fff !important; + float: right; +} +.breadcrumb-dropdown .popover.bottom +{ + margin-top: 35px; +} http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/css/style.css ---------------------------------------------------------------------- diff --git a/dashboardv2/public/css/style.css b/dashboardv2/public/css/style.css new file mode 100644 index 0000000..d1d23cc --- /dev/null +++ b/dashboardv2/public/css/style.css @@ -0,0 +1,726 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +html { + min-height: 100%; + position: relative; +} + +body { + font-family: 'PT Sans', sans-serif; + background-color: #e8ebf1; + -webkit-font-smoothing: antialiased; +} + +.initialLoading { + display: block; + margin: auto; + margin-top: 18%; + height: 60px; +} + + +/* Bootstrap Extended */ + +.row-margin-bottom { + margin-bottom: 15px; +} + +.navbar-brand { + /* font-family: 'Yeseva One', cursive;*/ + font-size: 30px; + height: auto; +} + +.navbar-toggle .icon-bar { + background-color: #fff; +} + +.navbar-fixed-top + .wrapper { + margin-top: 90px; + padding-bottom: 90px; +} + +.navbar-form { + width: 30%; + padding: 0; +} + +.navbar-form .form-control { + width: 100%; + padding: 6px 0px; + background-color: transparent; + color: #fff; + border: none; + box-shadow: 0px 2px #fff; +} + +.form-control { + border-radius: 0px; +} + +.form-control:focus { + border-color: #8FA5B1; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 2px rgb(143, 165, 177); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 2px rgb(143, 165, 177); +} + +.input-group-btn .glyphicon { + top: 2px; +} + +.panel { + border-radius: 0px; +} + +.panel-primary { + border-color: #698797; +} + +.panel-primary>.panel-heading { + color: #fff; + background-color: #698797; + border-color: #698797; + border-radius: 0px; +} + +.list-group-item:first-child, +.list-group-item:last-child { + border-radius: 0px; +} + +.pagination>.active>a, +.pagination>.active>a:focus, +.pagination>.active>a:hover, +.pagination>.active>span, +.pagination>.active>span:focus, +.pagination>.active>span:hover { + background-color: #1BA9E2; + border-color: #1BA9E2; +} + + +/* Bootstrap Buttons */ + +.btn { + border-radius: 0px; +} + +.btn-primary { + color: #fff; + background-color: #44697d; + border-color: #44697d +} + +.btn-primary:hover { + color: #fff; + background-color: #334f5e; + border-color: #334f5e; +} + +.btn-success { + color: #fff; + background-color: #359F89; + border-color: #359F89; +} + +.btn-success:hover { + color: #fff; + background-color: #359F89; + border-color: #359F89 +} + +.btn-info { + color: #fff; + background-color: #3cb5e6; + border-color: #3cb5e6 +} + +.btn-info:hover { + color: #fff; + background-color: #339cc7; + border-color: #339cc7 +} + +.btn-warning { + color: #fff; + background-color: #f5a700; + border-color: #f5a700 +} + +.btn-warning:hover { + color: #fff; + background-color: #de9800; + border-color: #de9800 +} + +.btn-danger { + color: #fff; + background-color: #e14f00; + border-color: #e14f00 +} + +.btn-danger:hover { + color: #fff; + background-color: #c74600; + border-color: #c74600 +} + +.tabs { + position: relative; + height: 42px; + background-color: #FFF; + width: 100%; + white-space: nowrap; + padding: 0px; + border-bottom: 1px solid #e9ecf2; +} + +.tabs li.tab { + display: block; + float: left; + text-align: center; + background-color: #fff; + line-height: 42px; + height: 42px; + padding: 0 20px; + margin: 0; + text-transform: uppercase; + letter-spacing: 0.8px; + border-bottom: 1px solid #e9ecf2; +} + +.tabs li.tab a { + color: #ee6e73; + display: block; + text-decoration: none; + width: 100%; + height: 100%; + -webkit-transition: color 0.28s ease; + -moz-transition: color 0.28s ease; + -o-transition: color 0.28s ease; + -ms-transition: color 0.28s ease; + transition: color 0.28s ease; + color: #9398a0; +} + +.tabs li.tab a:hover { + color: #26530c; +} + +.tabs li.tab a.active { + color: #1BA9E2; +} + +.tabs .indicator { + position: absolute; + bottom: 0; + height: 2px; + background-color: #1BA9E2; + will-change: left, right; +} + +ul.tabs li.tab { + padding: 0; +} + + +/* Atlas Specific */ + +.navbar-atlas { + background-color: #323544; + box-shadow: inset 0 0 0 rgba(0, 0, 0, 0.1), 0 1px 10px rgba(0, 0, 0, 0.1); + -webkit-box-shadow: inset 0 0 0 rgba(0, 0, 0, 0.1), 0 1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 0 0 rgba(0, 0, 0, 0.1), 0 1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar-atlas .navbar-brand { + color: #fff; +} + +.navbar-atlas .nav>li>a { + color: #fff; + padding-top: 18px; + padding-bottom: 18px; + font-size: 100%; +} + +.navbar-atlas .nav>li>a:focus, +.navbar-atlas .nav>li>a:hover { + background-color: transparent; +} + +.graph-bg svg { + background-image: linear-gradient(to right, #000 -10px, rgba(0, 0, 0, 0) 1px), linear-gradient(#000 -10px, #ECECEC 1px); + background-size: 10px 10px; + position: relative; +} + +.card { + background: #FFF none repeat scroll 0% 0%; + box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.3); + margin-bottom: 30px; +} + + +/*create tags*/ + +.h160 { + height: 160px !important; +} + +.inputs button.addAttr { + background-color: #ff8e00; +} + +.inputs button.addAttr, +.inputs button.saveAttr { + height: 40px; + border-radius: 4px; + border: 1px solid #FFFFFF; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + font-weight: bold; +} + +.inputs input { + height: 50px; + border-radius: 0px; + border: 1px solid #e3e3e3; + color: #414141; + box-shadow: none; +} + +.inputs button.remove { + position: absolute; + right: 28px; + bottom: 12px; + color: #FFFFFF; + border: 0; + border-radius: 4px; + background-color: #a94442; +} + +.inputs .control-label { + padding: 15px; + padding-top: 15px !important; + color: #333; +} + + +/*About Atlas*/ + +.subContent { + width: 580px; +} + + +/*add tag model*/ + +.input-spacing { + padding-bottom: 10px!important; +} + +.modalHeight { + height: 50px; +} + +.fa-spin-custom, +.glyphicon-spin { + -webkit-animation: spin 1000ms infinite linear; + animation: spin 1000ms infinite linear; +} + +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +.loader { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + text-align: center; + z-index: 9; + background: rgba(255, 255, 255, 0.8) url('../img/loading.gif') no-repeat center center; +} + +.fontLoader { + text-align: center; + display: none; +} + +.headerDroupDown { + border-left: 1px solid #FFF; + font-size: 11px; + padding-left: 15px; + margin-left: 15px; +} + +.circle { + position: absolute; + top: -3px; + right: -2px; + width: 12px; + height: 12px; + background: #4A90E2; + border: 2px solid #323544; + border-radius: 16px; +} + +.switch { + float: left; + margin-top: 4px; + position: absolute; + z-index: 99; + top: 0; + left: 20px; + height: 26px; + width: 120px; + background: #DADADA; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 3px #545454, 0 1px #FFF; + box-shadow: inset 0 1px 3px #545454, 0 1px #FFF; + /* -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.1);*/ +} + +.switch-label { + position: relative; + z-index: 2; + float: left; + width: 58px; + line-height: 26px; + font-size: 11px; + /*color: rgba(255, 255, 255, 0.35);*/ + text-align: center; + /*text-shadow: 0 1px 1px rgba(0, 0, 0, 0.45);*/ + cursor: pointer; +} + +.switch-label:active { + font-weight: bold; +} + +.switch-label-off { + padding-left: 2px; +} + +.switch-label-on { + padding-right: 2px; +} + +.switch-input { + display: none; +} + +.switch-input:checked + .switch-label { + font-weight: bold; + color: rgba(0, 0, 0, 0.65); + text-shadow: 0 1px rgba(255, 255, 255, 0.25); + -webkit-transition: 0.15s ease-out; + -moz-transition: 0.15s ease-out; + -o-transition: 0.15s ease-out; + transition: 0.15s ease-out; +} + +.switch-input:checked + .switch-label-on ~ .switch-selection { + /* Note: left: 50% doesn't transition in WebKit */ + left: 60px; +} + +.switch-selection { + display: block; + position: absolute; + z-index: 1; + top: 2px; + left: 2px; + width: 58px; + height: 22px; + background: #65bd63; + border-radius: 3px; + background-image: linear-gradient(to bottom, #A7CEC6, #359F89); + background-image: -moz-linear-gradient(top, #A7CEC6, #359F89); + background-image: -o-linear-gradient(top, #A7CEC6, #359F89); + background-image: linear-gradient(to bottom, #A7CEC6, #359F89); + /* background-image: -webkit-linear-gradient(top, #9dd993, #65bd63); + background-image: -moz-linear-gradient(top, #9dd993, #65bd63); + background-image: -o-linear-gradient(top, #9dd993, #65bd63); + background-image: linear-gradient(to bottom, #9dd993, #65bd63);*/ + -webkit-box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2); + box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2); + -webkit-transition: left 0.15s ease-out; + -moz-transition: left 0.15s ease-out; + -o-transition: left 0.15s ease-out; + transition: left 0.15s ease-out; +} + +.switch-blue .switch-selection { + background: #3aa2d0; + background-image: -webkit-linear-gradient(top, #4fc9ee, #3aa2d0); + background-image: -moz-linear-gradient(top, #4fc9ee, #3aa2d0); + background-image: -o-linear-gradient(top, #4fc9ee, #3aa2d0); + background-image: linear-gradient(to bottom, #4fc9ee, #3aa2d0); +} + +.switch-yellow .switch-selection { + background: #c4bb61; + background-image: -webkit-linear-gradient(top, #e0dd94, #c4bb61); + background-image: -moz-linear-gradient(top, #e0dd94, #c4bb61); + background-image: -o-linear-gradient(top, #e0dd94, #c4bb61); + background-image: linear-gradient(to bottom, #e0dd94, #c4bb61); +} + +.scrollTagList { + height: 330px; + overflow-y: auto; + margin-bottom: 0px; +} + +.scrollTagList i.fa { + margin-right: 5px; +} + +.tagsList .atlast-tabbable { + margin: 0px 0px; +} + +.tagsList .atlast-tabbable .tab-content { + padding: 10px 22px; +} + +.tagsList .atlast-tabbable .nav-tabs>li>a { + padding: 10px 20px; +} + +.appForm .panel-body { + padding-bottom: 0; +} + +.appForm .panel-footer { + margin-bottom: 0; +} + +#new > * { + color: #686868; +} + +.branchListParent .parentActive { + background: none; +} + +ul[data-id=branchList] .fa, +.branchListParent .fa { + line-height: 40px; +} + +ul[data-id=branchList] li { + padding-left: 50px; +} + +.node { + cursor: pointer; +} + +.overlay { + /* background-color: #EEE;*/ +} + +.node circle { + fill: #fff; + stroke: steelblue; + stroke-width: 1.5px; +} + +.node text { + font-size: 10px; + font-family: sans-serif; +} + +.link { + fill: none; + stroke: #ccc; + stroke-width: 1.5px; +} + +.templink { + fill: none; + stroke: red; + stroke-width: 3px; +} + +.ghostCircle.show { + display: block; +} + +.ghostCircle, +.activeDrag .ghostCircle { + display: none; +} + +.d3-tip { + line-height: 1; + font-weight: bold; + padding: 12px; + background: rgba(0, 0, 0, 0.8); + color: #fff; + border-radius: 2px; +} + + +/* Creates a small triangle extender for the tooltip */ + +.d3-tip:after { + box-sizing: border-box; + display: inline; + font-size: 10px; + width: 100%; + line-height: 1; + color: rgba(0, 0, 0, 0.8); + content: "\25BC"; + position: absolute; + text-align: center; +} + + +/* Style northward tooltips differently */ + +.d3-tip.n:after { + margin: -1px 0 0 0; + top: 100%; + left: 0; +} + +.noTags { + font-size: 24px; + font-weight: bold; + text-align: center; +} + +.addTag-dropdown { + display: inline-block; +} + +.addTagBase { + border-radius: 4px; + padding: 4px 8px; + border: solid 1px #4a90e2; + cursor: pointer +} + +.addTagText { + font-size: 12px; + font-weight: 600; + color: #4a90e2; +} + +.addTagPlus { + font-size: 12px; + font-weight: 600; + color: #4a90e2; +} + +.menuItem { + padding: 10px; + color: #4a90e2; + cursor: pointer; +} + +.input-tag { + display: inline-block; + padding: 6px 12px; + background-color: #4a90e2; + color: #fff; + font-size: 12px; + text-transform: uppercase; + border-radius: 4px; + margin-right: 3px; + margin-bottom: 3px; +} + +.tagging { + display: inline-block; +} + +.input-tag i.fa { + position: relative; + right: -5px; + cursor: pointer; +} + +.crossClearText { + line-height: 20px !important; +} + +.inputSearchTag { + max-width: 140px; +} + +.appndList { + max-height: 200px; + overflow: auto; + max-width: 140px; + overflow-x: hidden; +} + +.dropdown .fa-ellipsis-h { + position: relative; + top: 4px; +} + +g.type-TK > rect { + fill: #00ffd0; +} + +text { + font-weight: 300; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serf; + font-size: 14px; +} + +.node rect { + stroke: #999; + fill: #fff; + stroke-width: 1.5px; +} + +.edgePath path { + stroke: #333; + stroke-width: 1.5px; +} + http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/img/ApacheAtlasLogo.png ---------------------------------------------------------------------- diff --git a/dashboardv2/public/img/ApacheAtlasLogo.png b/dashboardv2/public/img/ApacheAtlasLogo.png new file mode 100644 index 0000000..50c0ffd Binary files /dev/null and b/dashboardv2/public/img/ApacheAtlasLogo.png differ http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/img/graph.png ---------------------------------------------------------------------- diff --git a/dashboardv2/public/img/graph.png b/dashboardv2/public/img/graph.png new file mode 100644 index 0000000..278c6bd Binary files /dev/null and b/dashboardv2/public/img/graph.png differ http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/img/icon-gear.png ---------------------------------------------------------------------- diff --git a/dashboardv2/public/img/icon-gear.png b/dashboardv2/public/img/icon-gear.png new file mode 100644 index 0000000..dc935e9 Binary files /dev/null and b/dashboardv2/public/img/icon-gear.png differ http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/img/icon-table.png ---------------------------------------------------------------------- diff --git a/dashboardv2/public/img/icon-table.png b/dashboardv2/public/img/icon-table.png new file mode 100644 index 0000000..1b1e4f0 Binary files /dev/null and b/dashboardv2/public/img/icon-table.png differ http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/img/loading.gif ---------------------------------------------------------------------- diff --git a/dashboardv2/public/img/loading.gif b/dashboardv2/public/img/loading.gif new file mode 100644 index 0000000..5b33f7e Binary files /dev/null and b/dashboardv2/public/img/loading.gif differ http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/img/logo-green.png ---------------------------------------------------------------------- diff --git a/dashboardv2/public/img/logo-green.png b/dashboardv2/public/img/logo-green.png new file mode 100644 index 0000000..fc3f234 Binary files /dev/null and b/dashboardv2/public/img/logo-green.png differ http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/img/ring.gif ---------------------------------------------------------------------- diff --git a/dashboardv2/public/img/ring.gif b/dashboardv2/public/img/ring.gif new file mode 100644 index 0000000..f18f441 Binary files /dev/null and b/dashboardv2/public/img/ring.gif differ http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/index.html ---------------------------------------------------------------------- diff --git a/dashboardv2/public/index.html b/dashboardv2/public/index.html new file mode 100644 index 0000000..c2f15c9 --- /dev/null +++ b/dashboardv2/public/index.html @@ -0,0 +1,82 @@ +<!-- + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +--> +<!doctype html> +<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--> +<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]--> +<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]--> +<!--[if gt IE 8]><!--> +<html class="no-js"> +<!--<![endif]--> + +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <title>Atlas</title> + <meta name="description" content=""> + <meta name="viewport" content="width=device-width"> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"> + <link rel="icon" href="favicon.ico" type="image/x-icon"> + <!-- Place favicon.ico and apple-touch-icon.png in the root directory --> + <link rel="stylesheet" type="text/css" href="css/animate.min.css" /> + <link rel="stylesheet" href="js/libs/backgrid/css/backgrid.css"> + <link rel="stylesheet" href="js/libs/backgrid-filter/css/backgrid-filter.min.css"> + <link rel="stylesheet" href="js/libs/backgrid-paginator/css/backgrid-paginator.css"> + <link rel="stylesheet" href="js/libs/backgrid-orderable-columns/css/backgrid-orderable-columns.css"> + <link rel="stylesheet" href="js/libs/backgrid-sizeable-columns/css/backgrid-sizeable-columns.css"> + <link rel="stylesheet" href="js/libs/bootstrap/css/bootstrap.min.css"> + <link rel="stylesheet" href="js/libs/jquery-asBreadcrumbs/css/asBreadcrumbs.css"> + <link href='https://fonts.googleapis.com/css?family=Raleway:400,400italic,600,600italic,700,700italic' rel='stylesheet' type='text/css'> + <link href="css/bootstrap-sidebar.css" rel="stylesheet"> + <link href="css/font-awesome.min.css" rel="stylesheet"> + <link href="css/style.css" rel="stylesheet"> + <link href="css/business-catlog.css" rel="stylesheet"> + <link href="css/override.css" rel="stylesheet"> +</head> + +<body> + <div id="new"> + <div id="wrapper"> + <div id="sidebar-wrapper"> + <div id="sideNav-wrapper"></div> + </div> + <div id="page-content-wrapper"> + <header id="new-header" class="clearfix"></header> + <div id="new-page-wrapper"> </div> + </div> + </div> + </div> + <div id='old'> + <!--Header Begin--> + <header id="header" class="navbar-fixed-top navbar-top navbar-atlas"> </header> + <!--Header End--> + <div class="container wrapper"> + <div class=""> + <div id="page-wrapper"> + <div> + <img class="initialLoading" src="../img/ring.gif"> + </div> + </div> + </div> + </div> + <div id="footer"></div> + </div> + <!-- build:js scripts/main.js --> + <script data-main="js/main" src="js/libs/requirejs/require.js"></script> + <!-- endbuild --> +</body> + +</html> http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/App.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/App.js b/dashboardv2/public/js/App.js new file mode 100644 index 0000000..c63ccf6 --- /dev/null +++ b/dashboardv2/public/js/App.js @@ -0,0 +1,38 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['marionette'], function(Marionette) { + + var App = new Marionette.Application(); + + App.addRegions({ + rHeader: '#header', + rSideNav: '#sideNav-wrapper', + rNContent: '#new-page-wrapper', + rNHeader: '#new-header', + rContent: '#page-wrapper', + rFooter: '#footer' + + }); + + App.addInitializer(function() { + Backbone.history.start(); + }); + + return App; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/collection/BaseCollection.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/collection/BaseCollection.js b/dashboardv2/public/js/collection/BaseCollection.js new file mode 100644 index 0000000..2018019 --- /dev/null +++ b/dashboardv2/public/js/collection/BaseCollection.js @@ -0,0 +1,136 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', + 'utils/Globals', + 'utils/Utils', + 'backbone.paginator' +], function(require, Globals, Utils) { + 'use strict'; + + var BaseCollection = Backbone.PageableCollection.extend( + /** @lends BaseCollection.prototype */ + { + /** + * BaseCollection's initialize function + * @augments Backbone.PageableCollection + * @constructs + */ + + initialize: function() { + + }, + bindErrorEvents: function() { + this.bind("error", Utils.defaultErrorHandler); + }, + /** + * state required for the PageableCollection + */ + state: { + firstPage: 0, + pageSize: Globals.settings.PAGE_SIZE + }, + + mode: 'client', + + /** + * override the parseRecords of PageableCollection for our use + */ + parseRecords: function(resp, options) { + this.responseData = { + dataType: resp.dataType, + query: resp.query, + queryType: resp.queryType, + requestId: resp.requestId + } + try { + if (!this.modelAttrName) { + throw new Error("this.modelAttrName not defined for " + this); + } + return resp[this.modelAttrName]; + } catch (e) { + console.log(e); + } + }, + + //////////////////////////////////////////////////////////// + // Overriding backbone-pageable page handlers methods // + //////////////////////////////////////////////////////////// + getFirstPage: function(options) { + return this.getPage('first', _.extend({ + reset: true + }, options)); + }, + + getPreviousPage: function(options) { + return this.getPage("prev", _.extend({ + reset: true + }, options)); + }, + + getNextPage: function(options) { + return this.getPage("next", _.extend({ + reset: true + }, options)); + }, + + getLastPage: function(options) { + return this.getPage("last", _.extend({ + reset: true + }, options)); + }, + hasPrevious: function(options) { + return this.hasPreviousPage(); + }, + hasNext: function(options) { + return this.hasNextPage(); + } + ///////////////////////////// + // End overriding methods // + ///////////////////////////// + + }, + /** BaseCollection's Static Attributes */ + { + // Static functions + getTableCols: function(cols, collection) { + var retCols = _.map(cols, function(v, k, l) { + var defaults = collection.constructor.tableCols[k]; + if (!defaults) { + //console.log("Error!! " + k + " not found in collection: " , collection); + defaults = {}; + } + return _.extend({ + 'name': k + }, defaults, v); + }); + + return retCols; + }, + + nonCrudOperation: function(url, requestMethod, options) { + return Backbone.sync.call(this, null, this, _.extend({ + url: url, + type: requestMethod + }, options)); + } + + }); + + return BaseCollection; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/collection/VCommonList.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/collection/VCommonList.js b/dashboardv2/public/js/collection/VCommonList.js new file mode 100644 index 0000000..d9e1f52 --- /dev/null +++ b/dashboardv2/public/js/collection/VCommonList.js @@ -0,0 +1,50 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', + 'utils/Globals', + 'collection/BaseCollection', + 'models/VCommon', +], function(require, Globals, BaseCollection, VCommon) { + 'use strict'; + var VCommonList = BaseCollection.extend( + //Prototypal attributes + { + url: Globals.baseURL + '', + + model: VCommon, + + initialize: function() { + this.modelName = 'VCommon'; + this.modelAttrName = ''; + this.bindErrorEvents(); + }, + }, + //Static Class Members + { + /** + * Table Cols to be passed to Backgrid + * UI has to use this as base and extend this. + * + */ + tableCols: {} + } + ); + + return VCommonList; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/collection/VEntityList.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/collection/VEntityList.js b/dashboardv2/public/js/collection/VEntityList.js new file mode 100644 index 0000000..75e6733 --- /dev/null +++ b/dashboardv2/public/js/collection/VEntityList.js @@ -0,0 +1,49 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', + 'utils/Globals', + 'collection/BaseCollection', + 'models/VEntity' +], function(require, Globals, BaseCollection, VEntity) { + 'use strict'; + var VEntityList = BaseCollection.extend( + //Prototypal attributes + { + url: Globals.baseURL + '/api/atlas/entities', + + model: VEntity, + + initialize: function() { + this.modelName = 'VEntity'; + this.modelAttrName = 'definition'; + this.bindErrorEvents(); + } + }, + //Static Class Members + { + /** + * Table Cols to be passed to Backgrid + * UI has to use this as base and extend this. + * + */ + tableCols: {} + } + ); + return VEntityList; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/collection/VLineageList.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/collection/VLineageList.js b/dashboardv2/public/js/collection/VLineageList.js new file mode 100644 index 0000000..4f37f87 --- /dev/null +++ b/dashboardv2/public/js/collection/VLineageList.js @@ -0,0 +1,49 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', + 'utils/Globals', + 'collection/BaseCollection', + 'models/VLineage' +], function(require, Globals, BaseCollection, VLineage) { + 'use strict'; + var VLineageList = BaseCollection.extend( + //Prototypal attributes + { + url: Globals.baseURL + 'api/atlas/lineage/hive/table/assetName/outputs/graph', + + model: VLineage, + + initialize: function() { + this.modelName = 'VLineage'; + this.modelAttrName = 'results'; + this.bindErrorEvents(); + } + }, + //Static Class Members + { + /** + * Table Cols to be passed to Backgrid + * UI has to use this as base and extend this. + * + */ + tableCols: {} + } + ); + return VLineageList; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/collection/VSchemaList.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/collection/VSchemaList.js b/dashboardv2/public/js/collection/VSchemaList.js new file mode 100644 index 0000000..6a5c9d6 --- /dev/null +++ b/dashboardv2/public/js/collection/VSchemaList.js @@ -0,0 +1,61 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', + 'utils/Globals', + 'collection/BaseCollection', + 'models/VSchema' +], function(require, Globals, BaseCollection, VSchema) { + 'use strict'; + var VSchemaList = BaseCollection.extend( + //Prototypal attributes + { + url: Globals.baseURL + '/api/atlas/lineage/hive/table/log_fact_daily_mv/schema', + model: VSchema, + initialize: function() { + this.modelName = 'VSchema'; + this.modelAttrName = 'results'; + this.bindErrorEvents(); + }, + parseRecords: function(resp, options) { + try { + if (!this.modelAttrName) { + throw new Error("this.modelAttrName not defined for " + this); + } + var arr = []; + resp[this.modelAttrName].rows.forEach(function(d) { + arr.push(d) + }) + return arr; + } catch (e) { + console.log(e); + } + }, + }, + //Static Class Members + { + /** + * Table Cols to be passed to Backgrid + * UI has to use this as base and extend this. + * + */ + tableCols: {} + } + ); + return VSchemaList; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/collection/VSearchList.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/collection/VSearchList.js b/dashboardv2/public/js/collection/VSearchList.js new file mode 100644 index 0000000..22b3e95 --- /dev/null +++ b/dashboardv2/public/js/collection/VSearchList.js @@ -0,0 +1,49 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', + 'utils/Globals', + 'collection/BaseCollection', + 'models/VSearch' +], function(require, Globals, BaseCollection, VSearch) { + 'use strict'; + var VSearchList = BaseCollection.extend( + //Prototypal attributes + { + url: Globals.baseURL + '/api/atlas/discovery/search', + + model: VSearch, + + initialize: function() { + this.modelName = 'VSearch'; + this.modelAttrName = 'results'; + this.bindErrorEvents(); + } + }, + //Static Class Members + { + /** + * Table Cols to be passed to Backgrid + * UI has to use this as base and extend this. + * + */ + tableCols: {} + } + ); + return VSearchList; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/collection/VTagList.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/collection/VTagList.js b/dashboardv2/public/js/collection/VTagList.js new file mode 100644 index 0000000..9fa48bf --- /dev/null +++ b/dashboardv2/public/js/collection/VTagList.js @@ -0,0 +1,63 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', + 'utils/Globals', + 'collection/BaseCollection', + 'models/VTag' +], function(require, Globals, BaseCollection, VTag) { + 'use strict'; + var VTagList = BaseCollection.extend( + //Prototypal attributes + { + url: Globals.baseURL + '/api/atlas/types', + model: VTag, + initialize: function() { + this.modelName = 'VTag'; + this.modelAttrName = 'results'; + this.bindErrorEvents(); + }, + parseRecords: function(resp, options) { + try { + if (!this.modelAttrName) { + throw new Error("this.modelAttrName not defined for " + this); + } + var arr = []; + resp[this.modelAttrName].forEach(function(d) { + arr.push({ + tags: d + }) + }) + return arr; + } catch (e) { + console.log(e); + } + }, + }, + //Static Class Members + { + /** + * Table Cols to be passed to Backgrid + * UI has to use this as base and extend this. + * + */ + tableCols: {} + } + ); + return VTagList; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/main.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/main.js b/dashboardv2/public/js/main.js new file mode 100644 index 0000000..94d49b7 --- /dev/null +++ b/dashboardv2/public/js/main.js @@ -0,0 +1,144 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +require.config({ + /* starting point for application */ + hbs: { + disableI18n: true, // This disables the i18n helper and doesn't require the json i18n files (e.g. en_us.json) + helperPathCallback: // Callback to determine the path to look for helpers + function(name) { // ('/template/helpers/'+name by default) + return 'modules/Helpers'; + }, + templateExtension: 'html', // Set the extension automatically appended to templates + compileOptions: {} // options object which is passed to Handlebars compiler + }, + /** + * Requested as soon as the loader has processed the configuration. It does + * not block any other require() calls from starting their requests for + * modules, it is just a way to specify some modules to load asynchronously + * as part of a config block. + * @type {Array} An array of dependencies to load. + */ + deps: ['marionette'], + + /** + * The number of seconds to wait before giving up on loading a script. + * @default 7 seconds + * @type {Number} + */ + waitSeconds: 30, + + shim: { + backbone: { + deps: ['underscore', 'jquery'], + exports: 'Backbone' + }, + asBreadcrumbs: { + deps: ['jquery'], + exports: 'asBreadcrumbs' + }, + bootstrap: { + deps: ['jquery'], + exports: 'jquery' + }, + underscore: { + exports: '_' + }, + marionette: { + deps: ['backbone'] + }, + backgrid: { + deps: ['backbone'], + exports: 'Backgrid' + }, + 'backgrid-paginator': { + deps: ['backbone', 'backgrid'] + }, + 'backgrid-filter': { + deps: ['backbone', 'backgrid'] + }, + 'backgrid-orderable': { + deps: ['backbone', 'backgrid'], + }, + 'backgrid-sizeable': { + deps: ['backbone', 'backgrid'], + }, + hbs: { + deps: ['underscore', 'handlebars'] + }, + d3: { + exports: 'd3' + }, + 'd3-tip': { + deps: ['d3'], + exports: 'd3-tip' + }, + noty: { + deps: ['jquery'], + }, + dagreD3: { + deps: ['d3'], + exports: 'dagreD3' + } + }, + + paths: { + 'jquery': 'libs/jquery/js/jquery.min', + 'underscore': 'libs/underscore/underscore-min', + 'bootstrap': 'libs/bootstrap/js/bootstrap.min', + 'backbone': 'libs/backbone/backbone-min', + 'backbone.babysitter': 'libs/backbone.babysitter/lib/backbone.babysitter.min', + 'marionette': 'libs/backbone-marionette/backbone.marionette.min', + 'backbone.paginator': 'libs/backbone-paginator/backbone.paginator.min', + 'backbone.wreqr': 'libs/backbone-wreqr/backbone.wreqr.min', + 'backgrid': 'libs/backgrid/js/backgrid', + 'backgrid-filter': 'libs/backgrid-filter/js/backgrid-filter.min', + 'backgrid-orderable': 'libs/backgrid-orderable-columns/js/backgrid-orderable-columns', + 'backgrid-paginator': 'libs/backgrid-paginator/js/backgrid-paginator.min', + 'backgrid-sizeable': 'libs/backgrid-sizeable-columns/js/backgrid-sizeable-columns', + 'asBreadcrumbs': 'libs/jquery-asBreadcrumbs/js/jquery-asBreadcrumbs.min', + 'd3': 'libs/d3/d3.min', + 'd3-tip': 'libs/d3/index', + 'tmpl': 'templates', + 'noty': 'libs/noty/js/jquery.noty.packaged.min', + 'requirejs.text': 'libs/requirejs-text/text', + 'handlebars': 'require-handlebars-plugin/js/handlebars', + 'json2': 'require-handlebars-plugin/js/json2', + 'hbs': 'require-handlebars-plugin/js/hbs', + 'i18nprecompile': 'require-handlebars-plugin/js/i18nprecompile', + 'dagreD3': 'libs/dagre-d3/dagre-d3.min' + }, + + /** + * If set to true, an error will be thrown if a script loads that does not + * call define() or have a shim exports string value that can be checked. + * To get timely, correct error triggers in IE, force a define/shim export. + * @type {Boolean} + */ + enforceDefine: false +}); + +require(['App', + 'router/Router', + 'utils/Overrides', + 'bootstrap', + 'd3' +], function(App, Router) { + App.appRouter = new Router(); + App.start(); +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/models/BaseModel.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/models/BaseModel.js b/dashboardv2/public/js/models/BaseModel.js new file mode 100644 index 0000000..da96d04 --- /dev/null +++ b/dashboardv2/public/js/models/BaseModel.js @@ -0,0 +1,71 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', 'utils/Utils', 'backbone'], function(require, Utils, Backbone) { + 'use strict'; + + var BaseModel = Backbone.Model.extend( + /** @lends BaseModel.prototype */ + { + /** + * BaseModel's initialize function + * @augments Backbone.Model + * @constructs + */ + initialize: function() { + + }, + bindErrorEvents: function() { + this.bind("error", Utils.defaultErrorHandler); + }, + /** + * toString for a model. Every model should implement this function. + */ + toString: function() { + throw new Error('ERROR: toString() not defined for ' + this.modelName); + }, + + /** + * Silent'ly set the attributes. ( do not trigger events ) + */ + silent_set: function(attrs) { + return this.set(attrs, { + silent: true + }); + } + }, + /** BaseModel's Static Attributes */ + { + + /** + * [nonCrudOperation description] + * @param {[type]} url [description] + * @param {[type]} requestMethod [description] + * @param {[type]} options [description] + * @return {[type]} [description] + */ + nonCrudOperation: function(url, requestMethod, options) { + return Backbone.sync.call(this, null, this, _.extend({ + url: url, + type: requestMethod + }, options)); + } + }); + + return BaseModel; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/models/VCommon.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/models/VCommon.js b/dashboardv2/public/js/models/VCommon.js new file mode 100644 index 0000000..63015ec --- /dev/null +++ b/dashboardv2/public/js/models/VCommon.js @@ -0,0 +1,42 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', + 'utils/Globals', + 'models/BaseModel' +], function(require, Globals, VBaseModel) { + 'use strict'; + var VCommon = VBaseModel.extend({ + urlRoot: Globals.baseURL + '', + + defaults: {}, + + serverSchema: {}, + + idAttribute: 'id', + + initialize: function() { + this.modelName = 'VCommon'; + this.bindErrorEvents(); + }, + toString: function() { + return this.get('name'); + }, + }, {}); + return VCommon; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/models/VEntity.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/models/VEntity.js b/dashboardv2/public/js/models/VEntity.js new file mode 100644 index 0000000..cd84e9d --- /dev/null +++ b/dashboardv2/public/js/models/VEntity.js @@ -0,0 +1,66 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', + 'utils/Globals', + 'models/BaseModel' +], function(require, Globals, VBaseModel) { + 'use strict'; + var VEntity = VBaseModel.extend({ + + urlRoot: Globals.baseURL + '/api/atlas/entities/', + + defaults: {}, + + serverSchema: {}, + + idAttribute: 'id', + + initialize: function() { + this.modelName = 'VEntity'; + this.bindErrorEvents(); + }, + toString: function() { + return this.get('name'); + }, + /************************* + * Non - CRUD operations + *************************/ + + getEntity: function(token, options) { + var url = Globals.baseURL + '/api/atlas/entities/' + token; + + options = _.extend({ + contentType: 'application/json', + dataType: 'json' + }, options); + + return this.constructor.nonCrudOperation.call(this, url, 'GET', options); + }, + saveEntity: function(token, options) { + var url = Globals.baseURL + '/api/atlas/entities/' + token + '/traits'; + options = _.extend({ + contentType: 'application/json', + dataType: 'json' + }, options); + return this.constructor.nonCrudOperation.call(this, url, 'POST', options); + }, + + }, {}); + return VEntity; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/models/VLineage.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/models/VLineage.js b/dashboardv2/public/js/models/VLineage.js new file mode 100644 index 0000000..e33488a --- /dev/null +++ b/dashboardv2/public/js/models/VLineage.js @@ -0,0 +1,43 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', + 'utils/Globals', + 'models/BaseModel' +], function(require, Globals, VBaseModel) { + 'use strict'; + var VLineage = VBaseModel.extend({ + + urlRoot: Globals.baseURL + 'api/atlas/lineage/hive/table/assetName/outputs/graph', + + defaults: {}, + + serverSchema: {}, + + idAttribute: 'id', + + initialize: function() { + this.modelName = 'VLineage'; + this.bindErrorEvents(); + }, + toString: function() { + return this.get('name'); + }, + }, {}); + return VLineage; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/models/VSchema.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/models/VSchema.js b/dashboardv2/public/js/models/VSchema.js new file mode 100644 index 0000000..1f8e0bb --- /dev/null +++ b/dashboardv2/public/js/models/VSchema.js @@ -0,0 +1,42 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', + 'utils/Globals', + 'models/BaseModel' +], function(require, Globals, VBaseModel) { + 'use strict'; + var VSchema = VBaseModel.extend({ + urlRoot: Globals.baseURL + '/api/atlas/lineage/hive/table/log_fact_daily_mv/schema', + + defaults: {}, + + serverSchema: {}, + + idAttribute: 'id', + + initialize: function() { + this.modelName = 'VSchema'; + this.bindErrorEvents(); + }, + toString: function() { + return this.get('name'); + }, + }, {}); + return VSchema; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/models/VSearch.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/models/VSearch.js b/dashboardv2/public/js/models/VSearch.js new file mode 100644 index 0000000..13376cc --- /dev/null +++ b/dashboardv2/public/js/models/VSearch.js @@ -0,0 +1,55 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', + 'utils/Globals', + 'models/BaseModel' +], function(require, Globals, VBaseModel) { + 'use strict'; + var VSearch = VBaseModel.extend({ + urlRoot: Globals.baseURL + '/api/atlas/discovery/search', + + defaults: {}, + + serverSchema: {}, + + idAttribute: 'id', + + initialize: function() { + this.modelName = 'VSearch'; + this.bindErrorEvents(); + }, + toString: function() { + return this.get('name'); + }, + /************************* + * Non - CRUD operations + *************************/ + getEntity: function(token, options) { + var url = Globals.baseURL + '/api/atlas/entities/' + token; + + options = _.extend({ + contentType: 'application/json', + dataType: 'json' + }, options); + + return this.constructor.nonCrudOperation.call(this, url, 'GET', options); + }, + }, {}); + return VSearch; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/models/VTag.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/models/VTag.js b/dashboardv2/public/js/models/VTag.js new file mode 100644 index 0000000..12c36f8 --- /dev/null +++ b/dashboardv2/public/js/models/VTag.js @@ -0,0 +1,53 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', + 'utils/Globals', + 'models/BaseModel' +], function(require, Globals, vBaseModel) { + 'use strict'; + var VTag = vBaseModel.extend({ + urlRoot: Globals.baseURL + '/api/atlas/types', + + defaults: {}, + + serverSchema: {}, + + idAttribute: 'id', + + initialize: function() { + this.modelName = 'VTag'; + this.bindErrorEvents(); + }, + toString: function() { + return this.get('name'); + }, + /************************* + * Non - CRUD operations + *************************/ + deleteTag: function(guid, name, options) { + var url = Globals.baseURL + '/api/atlas/entities/' + guid + '/traits/' + name; + options = _.extend({ + contentType: 'application/json', + dataType: 'json' + }, options); + return this.constructor.nonCrudOperation.call(this, url, 'DELETE', options); + } + }, {}); + return VTag; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/modules/Helpers.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/modules/Helpers.js b/dashboardv2/public/js/modules/Helpers.js new file mode 100644 index 0000000..4deb19b --- /dev/null +++ b/dashboardv2/public/js/modules/Helpers.js @@ -0,0 +1,93 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['require', + 'handlebars', +], function(require, Handlebars, localization) { + /* + * General guidelines while writing helpers: + * + * - If returning HTML use return new Handlebars.SafeString(); + * - If the helper needs optional arguments use the "hash arguments" + * Eg. {{{link . "See more..." story.url class="story"}}} + * NOTE: the first argument after the helper name should be . which will be context in the helper function + * Handlebars.registerHelper('link', function (context, text, url, options) { + * var attrs = []; + * + * for(var prop in options.hash) { + * attrs.push(prop + '="' + options.hash[prop] + '"'); + * } + * return new Handlebars.SafeString("<a " + attrs.join(" ") + ">" + text + "</a>"); + * }); + * + * + * NOTE: Due to some limitations in the require-handlebars-plugin, we cannot have helper that takes zero arguments, + * for such helpers we have to pass a "." as first argument. [https://github.com/SlexAxton/require-handlebars-plugin/issues/72] + */ + + var HHelpers = {}; + + /** + * Convert new line (\n\r) to <br> + * from http://phpjs.org/functions/nl2br:480 + */ + HHelpers.nl2br = function(text) { + text = Handlebars.Utils.escapeExpression(text); + var nl2br = (text + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + '<br>' + '$2'); + return new Handlebars.SafeString(nl2br); + }; + Handlebars.registerHelper('nl2br', HHelpers.nl2br); + + Handlebars.registerHelper('toHumanDate', function(val) { + if (!val) return ""; + return val //localization.formatDate(val, 'f'); + }); + Handlebars.registerHelper('tt', function(str) { + //return localization.tt(str); + return str; + }); + + Handlebars.registerHelper('ifCond', function(v1, operator, v2, options) { + switch (operator) { + case '==': + return (v1 == v2) ? options.fn(this) : options.inverse(this); + break; + case '===': + return (v1 === v2) ? options.fn(this) : options.inverse(this); + break; + case '<': + return (v1 < v2) ? options.fn(this) : options.inverse(this); + break; + case '<=': + return (v1 <= v2) ? options.fn(this) : options.inverse(this); + break; + case '>': + return (v1 > v2) ? options.fn(this) : options.inverse(this); + break; + case '>=': + return (v1 >= v2) ? options.fn(this) : options.inverse(this); + break; + default: + return options.inverse(this); + break; + } + //return options.inverse(this); + }); + + return HHelpers; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/modules/Modal.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/modules/Modal.js b/dashboardv2/public/js/modules/Modal.js new file mode 100644 index 0000000..f17fda2 --- /dev/null +++ b/dashboardv2/public/js/modules/Modal.js @@ -0,0 +1,252 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(function(require) { + + var Backbone = require('backbone'); + var template = require('hbs!tmpl/common/modal'); + + var Modal = Backbone.View.extend({ + + className: 'modal', + + events: { + 'click .close': function(event) { + event.preventDefault(); + + this.trigger('closeModal'); + + if (this.options.content && this.options.content.trigger) { + this.options.content.trigger('closeModal', this); + } + }, + 'click .cancel': function(event) { + event.preventDefault(); + + this.trigger('closeModal'); + + if (this.options.content && this.options.content.trigger) { + this.options.content.trigger('closeModal', this); + } + }, + 'click .ok': function(event) { + event.preventDefault(); + + this.trigger('ok'); + + if (this.options.content && this.options.content.trigger) { + this.options.content.trigger('ok', this); + } + + if (this.options.okCloses) { + this.close(); + } + } + }, + + /** + * Creates an instance of a Bootstrap Modal + * + * @see http://twitter.github.com/bootstrap/javascript.html#modals + * + * @param {Object} options + * @param {String|View} [options.content] Modal content. Default: none + * @param {String} [options.title] Title. Default: none + * @param {String} [options.okText] Text for the OK button. Default: 'OK' + * @param {String} [options.cancelText] Text for the cancel button. Default: 'Cancel'. If passed a falsey value, the button will be removed + * @param {Boolean} [options.allowCancel Whether the modal can be closed, other than by pressing OK. Default: true + * @param {Boolean} [options.escape] Whether the 'esc' key can dismiss the modal. Default: true, but false if options.cancellable is true + * @param {Boolean} [options.animate] Whether to animate in/out. Default: false + * @param {Function} [options.template] Compiled underscore template to override the default one + */ + initialize: function(options) { + this.options = _.extend({ + title: null, + okText: 'OK', + focusOk: true, + okCloses: true, + cancelText: 'Cancel', + allowCancel: false, + showFooter: true, + escape: true, + animate: true, + contentWithFooter: false, + template: template + }, options); + }, + + /** + * Creates the DOM element + * + * @api private + */ + render: function() { + var $el = this.$el, + options = this.options, + content = options.content; + + //Create the modal container + $el.html(options.template(options)); + + // var $content = this.$content = $el.find('.modal-body'); + + //Insert the main content if it's a view + if (content && content.$el) { + content.render(); + if (options.contentWithFooter) { + $el.find('.modal-content').append(content.$el); + } else { + $el.find('.modal-body').html(content.$el); + } + } else { + if (options.htmlContent) { + $el.find('.modal-body').append(options.htmlContent); + } + + } + + // if (options.mainClass) $el.addClass(options.mainClass); + + if (options.animate) $el.addClass('fade'); + + this.isRendered = true; + + return this; + }, + onClose: function() { + alert('close'); + }, + /** + * Renders and shows the modal + * + * @param {Function} [cb] Optional callback that runs only when OK is pressed. + */ + open: function(cb) { + if (!this.isRendered) this.render(); + + var self = this, + $el = this.$el; + + //Create it + $el.modal(_.extend({ + keyboard: this.options.allowCancel, + backdrop: this.options.allowCancel ? true : 'static' + }, this.options.modalOptions)); + + //Focus OK button + $el.one('shown', function() { + if (self.options.focusOk) { + $el.find('.btn.ok').focus(); + } + + if (self.options.content && self.options.content.trigger) { + self.options.content.trigger('shown', self); + } + + self.trigger('shown'); + }); + + //Adjust the modal and backdrop z-index; for dealing with multiple modals + var numModals = Modal.count, + $backdrop = $('.modal-backdrop:eq(' + numModals + ')'), + backdropIndex = parseInt($backdrop.css('z-index'), 10), + elIndex = parseInt($backdrop.css('z-index'), 10); + + $backdrop.css('z-index', backdropIndex + numModals); + this.$el.css('z-index', elIndex + numModals); + + if (this.options.allowCancel) { + $backdrop.one('click', function() { + if (self.options.content && self.options.content.trigger) { + self.options.content.trigger('closeModal', self); + } + + self.trigger('closeModal'); + }); + + $(document).one('keyup.dismiss.modal', function(e) { + e.which == 27 && self.trigger('closeModal'); + + if (self.options.content && self.options.content.trigger) { + e.which == 27 && self.options.content.trigger('shown', self); + } + }); + } + + this.on('cancel', function() { + self.close(); + }); + + Modal.count++; + + //Run callback on OK if provided + if (cb) { + self.on('ok', cb); + } + + return this; + }, + + /** + * Closes the modal + */ + close: function() { + var self = this, + $el = this.$el; + + //Check if the modal should stay open + if (this._preventClose) { + this._preventClose = false; + return; + } + + $el.one('hidden.bs.modal', function onHidden(e) { + // Ignore events propagated from interior objects, like bootstrap tooltips + if (e.target !== e.currentTarget) { + return $el.one('hidden.bs.modal', onHidden); + } + self.remove(); + + if (self.options.content && self.options.content.trigger) { + self.options.content.trigger('hidden.bs.modal', self); + } + + self.trigger('hidden.bs.modal'); + }); + + $el.modal('hide'); + + Modal.count--; + }, + + /** + * Stop the modal from closing. + * Can be called from within a 'close' or 'ok' event listener. + */ + preventClose: function() { + this._preventClose = true; + } + }, { + //STATICS + + //The number of modals on display + count: 0 + }); + + return Modal; +}); http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/a5f8c5aa/dashboardv2/public/js/modules/Vent.js ---------------------------------------------------------------------- diff --git a/dashboardv2/public/js/modules/Vent.js b/dashboardv2/public/js/modules/Vent.js new file mode 100644 index 0000000..6f75b9b --- /dev/null +++ b/dashboardv2/public/js/modules/Vent.js @@ -0,0 +1,22 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +define(['backbone.wreqr'], function(Wreqr) { + "use strict"; + return new Wreqr.EventAggregator(); +});
