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();
+});

Reply via email to